<?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>119629</bug_id>
          
          <creation_ts>2013-08-09 07:23:16 -0700</creation_ts>
          <short_desc>Move StyleResolver static functions to Style namespace</short_desc>
          <delta_ts>2013-08-09 12:43:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>philn</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>915820</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-09 07:23:16 -0700</bug_when>
    <thetext>Shrink down StyleResolver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915833</commentid>
    <comment_count>1</comment_count>
      <attachid>208435</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-09 08:11:19 -0700</bug_when>
    <thetext>Created attachment 208435
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915836</commentid>
    <comment_count>2</comment_count>
      <attachid>208436</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-09 08:18:44 -0700</bug_when>
    <thetext>Created attachment 208436
rebased

The patch is big because StyleResolver.cpp was svn cp&apos;d to keep history.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915873</commentid>
    <comment_count>3</comment_count>
      <attachid>208442</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-09 10:51:32 -0700</bug_when>
    <thetext>Created attachment 208442
lets try without move</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915874</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-09 10:53:54 -0700</bug_when>
    <thetext>Attachment 208442 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/css/DeprecatedStyleBuilder.cpp&apos;, u&apos;Source/WebCore/css/StyleResolver.cpp&apos;, u&apos;Source/WebCore/css/StyleResolver.h&apos;, u&apos;Source/WebCore/dom/Document.cpp&apos;, u&apos;Source/WebCore/editing/EditingStyle.cpp&apos;, u&apos;Source/WebCore/html/HTMLLinkElement.cpp&apos;, u&apos;Source/WebCore/rendering/style/RenderStyle.cpp&apos;, u&apos;Source/WebCore/rendering/style/RenderStyle.h&apos;, u&apos;Source/WebCore/rendering/svg/RenderSVGInlineText.cpp&apos;, u&apos;Source/WebCore/style/StyleFontSizeFunctions.cpp&apos;, u&apos;Source/WebCore/style/StyleFontSizeFunctions.h&apos;, u&apos;Source/WebCore/style/StyleResolveForDocument.cpp&apos;, u&apos;Source/WebCore/style/StyleResolveForDocument.h&apos;]&quot; exit_code: 1
Source/WebCore/style/StyleFontSizeFunctions.cpp:109:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/style/StyleFontSizeFunctions.cpp:110:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/style/StyleFontSizeFunctions.cpp:111:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/style/StyleFontSizeFunctions.cpp:112:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/style/StyleFontSizeFunctions.cpp:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/style/StyleFontSizeFunctions.cpp:114:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/style/StyleFontSizeFunctions.cpp:115:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/style/StyleFontSizeFunctions.cpp:116:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/style/StyleFontSizeFunctions.cpp:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/style/StyleFontSizeFunctions.cpp:127:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/style/StyleFontSizeFunctions.cpp:128:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/style/StyleFontSizeFunctions.cpp:129:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/style/StyleFontSizeFunctions.cpp:130:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/style/StyleFontSizeFunctions.cpp:131:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/style/StyleFontSizeFunctions.cpp:132:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/style/StyleFontSizeFunctions.cpp:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 16 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915875</commentid>
    <comment_count>5</comment_count>
      <attachid>208442</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-09 10:59:27 -0700</bug_when>
    <thetext>Comment on attachment 208442
lets try without move

Attachment 208442 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1385327</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915876</commentid>
    <comment_count>6</comment_count>
      <attachid>208442</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-09 10:59:35 -0700</bug_when>
    <thetext>Comment on attachment 208442
lets try without move

Attachment 208442 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1413246</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915877</commentid>
    <comment_count>7</comment_count>
      <attachid>208442</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-09 11:01:14 -0700</bug_when>
    <thetext>Comment on attachment 208442
lets try without move

Attachment 208442 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/1353529</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915878</commentid>
    <comment_count>8</comment_count>
      <attachid>208442</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-09 11:07:56 -0700</bug_when>
    <thetext>Comment on attachment 208442
lets try without move

Attachment 208442 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1401263</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915879</commentid>
    <comment_count>9</comment_count>
      <attachid>208442</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-08-09 11:09:41 -0700</bug_when>
    <thetext>Comment on attachment 208442
lets try without move

Attachment 208442 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1413251</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915881</commentid>
    <comment_count>10</comment_count>
      <attachid>208442</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-09 11:15:53 -0700</bug_when>
    <thetext>Comment on attachment 208442
lets try without move

Attachment 208442 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1412236</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915884</commentid>
    <comment_count>11</comment_count>
      <attachid>208442</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-09 11:32:06 -0700</bug_when>
    <thetext>Comment on attachment 208442
lets try without move

Attachment 208442 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/1405256</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915890</commentid>
    <comment_count>12</comment_count>
      <attachid>208443</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-09 11:41:45 -0700</bug_when>
    <thetext>Created attachment 208443
build files and fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915903</commentid>
    <comment_count>13</comment_count>
      <attachid>208443</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-09 12:01:33 -0700</bug_when>
    <thetext>Comment on attachment 208443
build files and fixes

Attachment 208443 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/1359542</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915906</commentid>
    <comment_count>14</comment_count>
      <attachid>208443</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-09 12:07:06 -0700</bug_when>
    <thetext>Comment on attachment 208443
build files and fixes

Attachment 208443 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/1412250</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915915</commentid>
    <comment_count>15</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-08-09 12:43:19 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/153906</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208435</attachid>
            <date>2013-08-09 08:11:19 -0700</date>
            <delta_ts>2013-08-09 08:18:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>move-styleresolver-statics.patch</filename>
            <type>text/plain</type>
            <size>412188</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Mzg5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTA4LTA5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHN0YXRpYyBTdHlsZVJl
c29sdmVyIGZ1bmN0aW9ucyB0byBTdHlsZSBuYW1lc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTYyOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gTW92ZSBzdGF0aWMgZm9udCBzaXplIGNvbXB1
dGF0aW9uIGZ1bmN0aW9ucyB0byBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgvLmNwcAorICAgICAg
ICAtIE1vdmUgU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JEb2N1bWVudCB0byBTdHlsZTo6cmVzb2x2
ZUZvckRvY3VtZW50CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRGYW1pbHk6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250RmFtaWx5OjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbml0aWFsVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseVZhbHVlKToK
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0Zv
ck9yaWVudGF0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JH
ZW5lcmljRmFtaWx5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Omlu
aXRpYWxpemVGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0
Rm9udFNpemUpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6
CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
bGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUpOgorICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6cHJvY2Vzcyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN0eWxlOjpnZXRGb250QW5kR2x5cGhPcmllbnRhdGlvbik6CisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGlu
ZVRleHQ6OmNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUpOgorICAgICAgICAqIHN0eWxlL1N0
eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Y29tcHV0ZWRGb250
U2l6ZUZyb21TcGVjaWZpZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpjb21wdXRl
ZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemVGb3JTVkdJbmxpbmVUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OmxlZ2FjeUZvbnRTaXplRm9yUGl4ZWxTaXplKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZUZv
bnRTaXplRnVuY3Rpb25zLmg6IEFkZGVkLgorICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZUZv
ckRvY3VtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6cmVzb2x2ZUZv
ckRvY3VtZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oOiBB
ZGRlZC4KKwogMjAxMy0wOC0wOSAgQnJ1bm8gZGUgT2xpdmVpcmEgQWJpbmFkZXIgIDxicnVuby5k
QHBhcnRuZXIuc2Ftc3VuZy5jb20+CiAKICAgICAgICAgVGV4dCBkZWNvcmF0aW9ucyBzaG91bGQg
YmUgbGlzdGVkIGFzIG5vbi1pbmhlcml0YWJsZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUzODE0KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC01NTQ0LDYgKzU1NDQsMTAgQEAKIAkJRTRDMTc4OUIwRUU2OTAzODAwODI0RDY5
IC8qIENTU1NlbGVjdG9yTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTRDMTc4OTYwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0QzI3
OTU4MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMyNzk1NjBDRjk3NDE5MDBFOTdCOTggLyog
UmVuZGVyTWVkaWEuY3BwICovOyB9OwogCQlFNEMyNzk1OTBDRjk3NDE5MDBFOTdCOTggLyogUmVu
ZGVyTWVkaWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0QzI3OTU3MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oICovOyB9OworCQlFNEQ1
OEVCNDE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENThFQjIxN0I0REJE
QzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcCAqLzsgfTsKKwkJRTRENThF
QjUxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ1OEVCMzE3QjREQkRDMDBD
QkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCAqLzsgfTsKKwkJRTRENThFQjgxN0I0
RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENThFQjYxN0I0RUQ4OTAwQ0JEQ0E4
IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwICovOyB9OworCQlFNEQ1OEVCOTE3QjRFRDg5
MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENThFQjcxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0
eWxlRm9udFNpemVGdW5jdGlvbnMuaCAqLzsgfTsKIAkJRTRENjg3NzcwRUQ3QUUzRDAwNkVBOTc4
IC8qIFB1cmdlYWJsZUJ1ZmZlck1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNEQ2ODc3NjBFRDdBRTNEMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVm
ZmVyTWFjLmNwcCAqLzsgfTsKIAkJRTRENjg3NzkwRUQ3QUU0RjAwNkVBOTc4IC8qIFB1cmdlYWJs
ZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRENjg3NzgwRUQ3QUU0RjAwNkVBOTc4IC8qIFB1cmdlYWJsZUJ1ZmZlci5oICovOyB9OwogCQlF
NERFQUExNzE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVSZXNvbHZlVHJlZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNERFQUExNTE3QTkzREMzMDAw
RTA0MzAgLyogU3R5bGVSZXNvbHZlVHJlZS5jcHAgKi87IH07CkBAIC0xMjM2Miw2ICsxMjM2Niwx
MCBAQAogCQlFNEMxNzg5NjBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1NlbGVjdG9yTGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNEMyNzk1NjBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVy
TWVkaWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWVk
aWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEMyNzk1NzBDRjk3NDE5MDBF
OTdCOTggLyogUmVuZGVyTWVkaWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyTWVkaWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRENThFQjIxN0I0
REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRENThFQjMxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0
eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUU0RDU4RUI2MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlRm9udFNpemVGdW5jdGlv
bnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEQ1OEVCNzE3QjRFRDg5MDBD
QkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0RDY4Nzc2MEVEN0FFM0QwMDZFQTk3OCAvKiBQdXJnZWFibGVCdWZmZXJNYWMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHVyZ2VhYmxlQnVmZmVy
TWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRENjg3NzgwRUQ3QUU0RjAw
NkVBOTc4IC8qIFB1cmdlYWJsZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQdXJnZWFibGVCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRE
RUFBMTUxN0E5M0RDMzAwMEUwNDMwIC8qIFN0eWxlUmVzb2x2ZVRyZWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZXNvbHZlVHJlZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTYwOSw2ICsxOTYxNywxMCBAQAogCQlFNDc2M0Q0QTE3
QjI3MDQ5MDBEMzUyMDYgLyogc3R5bGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCUU0RDU4RUI2MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXpl
RnVuY3Rpb25zLmNwcCAqLywKKwkJCQlFNEQ1OEVCNzE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVG
b250U2l6ZUZ1bmN0aW9ucy5oICovLAorCQkJCUU0RDU4RUIyMTdCNERCREMwMENCRENBOCAvKiBT
dHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAgKi8sCisJCQkJRTRENThFQjMxN0I0REJEQzAwQ0JE
Q0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggKi8sCiAJCQkJRTRERUFBMTUxN0E5M0RD
MzAwMEUwNDMwIC8qIFN0eWxlUmVzb2x2ZVRyZWUuY3BwICovLAogCQkJCUU0REVBQTE2MTdBOTNE
QzMwMDBFMDQzMCAvKiBTdHlsZVJlc29sdmVUcmVlLmggKi8sCiAJCQkpOwpAQCAtMjIyNDIsNiAr
MjIyNTQsNyBAQAogCQkJCTY1REYzMjNBMDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc0dyYWRp
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NURGMzIzQzA5RDFERTY1MDAwQkUzMjUgLyogSlND
YW52YXNQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NURGMzIzQzA5RDFERTY1MDAxQkUz
MjUgLyogSlNDYW52YXNQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRENThFQjUxN0I0REJE
QzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OUVFRDE0MzEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0OUVFRDE0NTEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjlCN0ExMEJBNjAzMjYw
MDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzgzNyw2ICsy
Mzg1MCw3IEBACiAJCQkJQkM4QkYxNTExMDU4MTNCRjAwQTQwQTA3IC8qIFVzZXJTdHlsZVNoZWV0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhCRjE1QTEwNTgxNDE4MDBBNDBBMDcgLyogVXNlclN0
eWxlU2hlZXRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERjMxN0MxMUY4RDY4MzAwM0M1
QkY4IC8qIFVzZXJUeXBpbmdHZXN0dXJlSW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlF
NEQ1OEVCOTE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUZBRkJGMTkxNUE1RkE3NDAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkUzQkJGMDgxMTYyREExMTAwQjk0MDlBIC8qIFVVSUQuaCBp
biBIZWFkZXJzICovLAogCQkJCTUwRDMyODU4MTYzQjMxM0YwMDE2MTExRSAvKiBWYWxpZGF0ZWRD
dXN0b21GaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjUwNDMsNiArMjUwNTcs
NyBAQAogCQkJCTQ5RUNFQjZGMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4Q0ZGMDREMEExNTRGMDkwMDBBNDIzNCAvKiBGaXhlZFRh
YmxlTGF5b3V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTY4MEIwNTM4MTQwMDJDRTY0
RiAvKiBGbG9hdFBvaW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0RDU4RUI4MTdCNEVEODkw
MENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyRTI3QzlGMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjI3NTM1NTkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMjc1MzU3ODBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludE1h
Yy5tbSBpbiBTb3VyY2VzICovLApAQCAtMjY5NzcsNiArMjY5OTIsNyBAQAogCQkJCUE3RDZCMzRB
MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkU0MzQ2NTQwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwQjkwNTZGODBGMjY4NUYzMDA5NUZGNkEgLyogV29ya2VyVGhyZWFkYWJs
ZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNEQ1OEVCNDE3QjREQkRDMDBDQkRDQTgg
LyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdBQUJE
MkMxNEZBMDlENTAwNzQ1N0FFIC8qIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTIzMDk5RTY0OTIwMDU2RTU4MSAvKiBXcmFwQ29u
dGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgzM0M3Q0Mw
QTJDRjA3NDAwRDU3NjY0IC8qIFhMaW5rTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCShyZXZpc2lv
biAxNTM4MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2lu
Y2x1ZGUgIlN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVy
LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC02NzgsNyArNjc5LDcgQEAg
cHVibGljOgogICAgICAgICAKICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUg
dG8gYWNjb3VudCBmb3IgdGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFjZSB0
byBub24tbW9ub3NwYWNlLgogICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXpl
KCkgJiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKLSAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc3R5bGVSZXNvbHZl
ci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCksIENTU1ZhbHVl
WHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgZmFsc2UpKTsKKyAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5
bGU6OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRpb24u
a2V5d29yZFNpemUoKSAtIDEsIGZhbHNlLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpKSk7CiAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KGluaXRpYWxEZXNjLmdlbmVy
aWNGYW1pbHkoKSk7CiAgICAgICAgIGlmICghaW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKS5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWxpZXMoaW5pdGlhbERl
c2MuZmFtaWxpZXMoKSk7CkBAIC03NTIsNyArNzUzLDcgQEAgcHVibGljOgogICAgICAgICBmb250
RGVzY3JpcHRpb24uYWRvcHRGYW1pbGllcyhmYW1pbGllcyk7CiAKICAgICAgICAgaWYgKGZvbnRE
ZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1
bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpCi0gICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHN0eWxlUmVzb2x2ZXIt
PmZvbnRTaXplRm9yS2V5d29yZChzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLCBDU1NWYWx1ZVh4
U21hbGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsICFvbGRGYW1pbHlVc2Vk
Rml4ZWREZWZhdWx0U2l6ZSkpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNp
emUoZm9udERlc2NyaXB0aW9uLCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlWHhT
bWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgIW9sZEZhbWlseVVzZWRG
aXhlZERlZmF1bHRTaXplLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpKSk7CiAKICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAg
fQpAQCAtNzk2LDcgKzc5Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAg
IHsKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmbG9hdCBzaXplID0gc3R5
bGVSZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCks
IENTU1ZhbHVlTWVkaXVtLCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsK
KyAgICAgICAgZmxvYXQgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVN
ZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCksIHN0eWxlUmVzb2x2
ZXItPmRvY3VtZW50KCkpOwogCiAgICAgICAgIGlmIChzaXplIDwgMCkKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTgzNiw3ICs4MzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlWExhcmdlOgogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVh4TGFyZ2U6CiAgICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlV2Via2l0WHh4TGFyZ2U6Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IHN0
eWxlUmVzb2x2ZXItPmZvbnRTaXplRm9yS2V5d29yZChzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgp
LCBpZGVudCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CisgICAgICAg
ICAgICAgICAgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoaWRlbnQsIGZvbnREZXNj
cmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCksIHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkp
OwogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShpZGVudCAt
IENTU1ZhbHVlWHhTbWFsbCArIDEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAJKHJldmlzaW9uIDE1MzgxNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSw3IEBACiAjaW5jbHVkZSAiU2hh
ZG93Um9vdC5oIgogI2luY2x1ZGUgIlNoYWRvd1ZhbHVlLmgiCiAjaW5jbHVkZSAiU3R5bGVDYWNo
ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKICNpbmNsdWRl
ICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCiAjaW5jbHVkZSAiU3R5bGVQZW5kaW5nSW1hZ2UuaCIK
ICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCkBAIC03ODIsMTM3ICs3ODMsNiBAQCBSZW5k
ZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkCiAgICAgcmV0dXJuIHNoYXJlRWxl
bWVudC0+cmVuZGVyU3R5bGUoKTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0Rm9udEFuZEdseXBoT3Jp
ZW50YXRpb24oY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBGb250T3JpZW50YXRpb24mIGZvbnRP
cmllbnRhdGlvbiwgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbiYgZ2x5cGhPcmllbnRhdGlvbikKLXsK
LSAgICBpZiAoc3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgZm9u
dE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbDsKLSAgICAgICAgZ2x5cGhPcmllbnRhdGlvbiA9IE5v
bkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgc3dpdGNoIChzdHlsZS0+dGV4dE9yaWVudGF0aW9uKCkpIHsKLSAgICBjYXNlIFRl
eHRPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ6Ci0gICAgICAgIGZvbnRPcmllbnRhdGlvbiA9IFZl
cnRpY2FsOwotICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlv
blZlcnRpY2FsUmlnaHQ7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFRleHRPcmllbnRhdGlv
blVwcmlnaHQ6Ci0gICAgICAgIGZvbnRPcmllbnRhdGlvbiA9IFZlcnRpY2FsOwotICAgICAgICBn
bHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblVwcmlnaHQ7Ci0gICAgICAg
IHJldHVybjsKLSAgICBjYXNlIFRleHRPcmllbnRhdGlvblNpZGV3YXlzOgotICAgICAgICBpZiAo
c3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gTGVmdFRvUmlnaHRXcml0aW5nTW9kZSkgewotICAgICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG1hcCB0byBzaWRld2F5cy1sZWZ0LCB3aGljaCBp
cyBub3Qgc3VwcG9ydGVkIHlldC4KLSAgICAgICAgICAgIGZvbnRPcmllbnRhdGlvbiA9IFZlcnRp
Y2FsOwotICAgICAgICAgICAgZ2x5cGhPcmllbnRhdGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRp
b25WZXJ0aWNhbFJpZ2h0OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IGZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWw7Ci0gICAgICAgIGdseXBoT3JpZW50YXRpb24g
PSBOb25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodDsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgVGV4dE9yaWVudGF0aW9uU2lkZXdheXNSaWdodDoKLSAgICAgICAgZm9udE9yaWVu
dGF0aW9uID0gSG9yaXpvbnRhbDsKLSAgICAgICAgZ2x5cGhPcmllbnRhdGlvbiA9IE5vbkNKS0ds
eXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGZvbnRPcmllbnRhdGlv
biA9IEhvcml6b250YWw7Ci0gICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9y
aWVudGF0aW9uVmVydGljYWxSaWdodDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JEb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQsIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQotewotICAgIEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotCi0gICAgLy8gSFRNTDUgc3RhdGVzIHRo
YXQgc2VhbWxlc3MgaWZyYW1lcyBzaG91bGQgcmVwbGFjZSBkZWZhdWx0IENTUyB2YWx1ZXMKLSAg
ICAvLyB3aXRoIHZhbHVlcyBpbmhlcml0ZWQgZnJvbSB0aGUgY29udGFpbmluZyBpZnJhbWUgZWxl
bWVudC4gSG93ZXZlciwKLSAgICAvLyBzb21lIHZhbHVlcyAoc3VjaCBhcyB0aGUgY2FzZSBvZiBk
ZXNpZ25Nb2RlID0gIm9uIikgc3RpbGwgbmVlZCB0bwotICAgIC8vIGJlIHNldCBieSB0aGlzICJk
b2N1bWVudCBzdHlsZSIuCi0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBkb2N1bWVudFN0eWxlID0g
UmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIGJvb2wgc2VhbWxlc3NXaXRoUGFyZW50ID0gZG9j
dW1lbnQtPnNob3VsZERpc3BsYXlTZWFtbGVzc2x5V2l0aFBhcmVudCgpOwotICAgIGlmIChzZWFt
bGVzc1dpdGhQYXJlbnQpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIGlmcmFtZVN0eWxlID0gZG9j
dW1lbnQtPnNlYW1sZXNzUGFyZW50SUZyYW1lKCktPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgIGlm
IChpZnJhbWVTdHlsZSkKLSAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPmluaGVyaXRGcm9tKGlm
cmFtZVN0eWxlKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hpY2gg
dmFsdWVzIGJlbG93IHdlIHdhbnQgdG8gb3ZlcnJpZGUgaW4gdGhlIHNlYW1sZXNzIGNhc2UhCi0g
ICAgZG9jdW1lbnRTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0gICAgaWYgKCFzZWFtbGVzc1dp
dGhQYXJlbnQpIHsKLSAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0UlRMT3JkZXJpbmcoZG9jdW1l
bnQtPnZpc3VhbGx5T3JkZXJlZCgpID8gVmlzdWFsT3JkZXIgOiBMb2dpY2FsT3JkZXIpOwotICAg
ICAgICBkb2N1bWVudFN0eWxlLT5zZXRab29tKGZyYW1lICYmICFkb2N1bWVudC0+cHJpbnRpbmco
KSA/IGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpIDogMSk7Ci0gICAgICAgIGRvY3VtZW50U3R5bGUt
PnNldFBhZ2VTY2FsZVRyYW5zZm9ybShmcmFtZSA/IGZyYW1lLT5mcmFtZVNjYWxlRmFjdG9yKCkg
OiAxKTsKLSAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0TG9jYWxlKGRvY3VtZW50LT5jb250ZW50
TGFuZ3VhZ2UoKSk7Ci0gICAgfQotICAgIC8vIFRoaXMgb3ZlcnJpZGVzIGFueSAtd2Via2l0LXVz
ZXItbW9kaWZ5IGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgaWZyYW1lLgotICAgIGRvY3VtZW50
U3R5bGUtPnNldFVzZXJNb2RpZnkoZG9jdW1lbnQtPmluRGVzaWduTW9kZSgpID8gUkVBRF9XUklU
RSA6IFJFQURfT05MWSk7Ci0KLSAgICBFbGVtZW50KiBkb2NFbGVtZW50ID0gZG9jdW1lbnQtPmRv
Y3VtZW50RWxlbWVudCgpOwotICAgIFJlbmRlck9iamVjdCogZG9jRWxlbWVudFJlbmRlcmVyID0g
ZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlcmVyKCkgOiAwOwotICAgIGlmIChkb2NFbGVt
ZW50UmVuZGVyZXIpIHsKLSAgICAgICAgLy8gVXNlIHRoZSBkaXJlY3Rpb24gYW5kIHdyaXRpbmct
bW9kZSBvZiB0aGUgYm9keSB0byBzZXQgdGhlCi0gICAgICAgIC8vIHZpZXdwb3J0J3MgZGlyZWN0
aW9uIGFuZCB3cml0aW5nLW1vZGUgdW5sZXNzIHRoZSBwcm9wZXJ0eSBpcyBzZXQgb24gdGhlIGRv
Y3VtZW50IGVsZW1lbnQuCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGJvZHksIHRoZW4gdXNl
IHRoZSBkb2N1bWVudCBlbGVtZW50LgotICAgICAgICBSZW5kZXJPYmplY3QqIGJvZHlSZW5kZXJl
ciA9IGRvY3VtZW50LT5ib2R5KCkgPyBkb2N1bWVudC0+Ym9keSgpLT5yZW5kZXJlcigpIDogMDsK
LSAgICAgICAgaWYgKGJvZHlSZW5kZXJlciAmJiAhZG9jdW1lbnQtPndyaXRpbmdNb2RlU2V0T25E
b2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFdyaXRpbmdN
b2RlKGJvZHlSZW5kZXJlci0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFdyaXRpbmdNb2RlKGRvY0VsZW1lbnRSZW5k
ZXJlci0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7Ci0gICAgICAgIGlmIChib2R5UmVuZGVyZXIg
JiYgIWRvY3VtZW50LT5kaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAg
ICAgZG9jdW1lbnRTdHlsZS0+c2V0RGlyZWN0aW9uKGJvZHlSZW5kZXJlci0+c3R5bGUoKS0+ZGly
ZWN0aW9uKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRE
aXJlY3Rpb24oZG9jRWxlbWVudFJlbmRlcmVyLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSk7Ci0gICAg
fQotCi0gICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IGZyYW1lLT52aWV3KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFBhZ2luYXRpb24mIHBhZ2luYXRp
b24gPSBmcmFtZVZpZXctPnBhZ2luYXRpb24oKTsKLSAgICAgICAgICAgIGlmIChwYWdpbmF0aW9u
Lm1vZGUgIT0gUGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQpIHsKLSAgICAgICAgICAgICAgICBkb2N1
bWVudFN0eWxlLT5zZXRDb2x1bW5TdHlsZXNGcm9tUGFnaW5hdGlvbk1vZGUocGFnaW5hdGlvbi5t
b2RlKTsKLSAgICAgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRDb2x1bW5HYXAocGFnaW5h
dGlvbi5nYXApOwotICAgICAgICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZG9jdW1l
bnQtPnJlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodmlldy0+aGFzQ29s
dW1ucygpKQotICAgICAgICAgICAgICAgICAgICAgICAgdmlldy0+dXBkYXRlQ29sdW1uSW5mb0Zy
b21TdHlsZShkb2N1bWVudFN0eWxlLmdldCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTZWFtbGVzcyBpZnJhbWVzIHdhbnQg
dG8gaW5oZXJpdCB0aGVpciBmb250IGZyb20gdGhlaXIgcGFyZW50IGlmcmFtZSwgc28gZWFybHkg
cmV0dXJuIGJlZm9yZSBzZXR0aW5nIHRoZSBmb250LgotICAgIGlmIChzZWFtbGVzc1dpdGhQYXJl
bnQpCi0gICAgICAgIHJldHVybiBkb2N1bWVudFN0eWxlLnJlbGVhc2UoKTsKLQotICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFNjcmlw
dChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKGRvY3VtZW50U3R5bGUtPmxvY2Fs
ZSgpKSk7Ci0gICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5ncygp
KSB7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChkb2N1bWVudC0+
cHJpbnRpbmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKCkp
OwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9u
dFJlbmRlcmluZ01vZGUoKSk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3RhbmRhcmRG
b250ID0gc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseShmb250RGVzY3JpcHRpb24uc2NyaXB0
KCkpOwotICAgICAgICBpZiAoIXN0YW5kYXJkRm9udC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U3RhbmRh
cmRGYW1pbHkpOwotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShzdGFu
ZGFyZEZvbnQpOwotICAgICAgICB9Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3Jk
U2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwotICAgICAgICBpbnQg
c2l6ZSA9IFN0eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCwgQ1NTVmFs
dWVNZWRpdW0sIGZhbHNlKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNp
emUoc2l6ZSk7Ci0gICAgICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzID0gZG9jdW1lbnQtPmlzU1ZH
RG9jdW1lbnQoKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHls
ZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCwgZG9j
dW1lbnRTdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUs
IHVzZVNWR1pvb21SdWxlcykpOwotICAgIH0gZWxzZQotICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQtPnByaW50aW5nKCkpOwotCi0gICAgRm9udE9yaWVu
dGF0aW9uIGZvbnRPcmllbnRhdGlvbjsKLSAgICBOb25DSktHbHlwaE9yaWVudGF0aW9uIGdseXBo
T3JpZW50YXRpb247Ci0gICAgZ2V0Rm9udEFuZEdseXBoT3JpZW50YXRpb24oZG9jdW1lbnRTdHls
ZS5nZXQoKSwgZm9udE9yaWVudGF0aW9uLCBnbHlwaE9yaWVudGF0aW9uKTsKLSAgICBmb250RGVz
Y3JpcHRpb24uc2V0T3JpZW50YXRpb24oZm9udE9yaWVudGF0aW9uKTsKLSAgICBmb250RGVzY3Jp
cHRpb24uc2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihnbHlwaE9yaWVudGF0aW9uKTsKLQotICAg
IGRvY3VtZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAg
IGRvY3VtZW50U3R5bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKLQotICAgIHJldHVy
biBkb2N1bWVudFN0eWxlLnJlbGVhc2UoKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGlzQXRT
aGFkb3dCb3VuZGFyeShjb25zdCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIGlmICghZWxlbWVu
dCkKQEAgLTE0NjAsNyArMTMzMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVy
U3R5bGUoUmUKIAogICAgIC8vIENhbGwgc2V0U3R5bGVzRm9yUGFnaW5hdGlvbk1vZGUoKSBpZiBh
IHBhZ2luYXRpb24gbW9kZSBpcyBzZXQgZm9yIGFueSBub24tcm9vdCBlbGVtZW50cy4gSWYgdGhl
c2UKICAgICAvLyBzdHlsZXMgYXJlIHNwZWNpZmllZCBvbiBhIHJvb3QgZWxlbWVudCwgdGhlbiB0
aGV5IHdpbGwgYmUgaW5jb3Jwb3JhdGVkIGluCi0gICAgLy8gU3R5bGVSZXNvbHZlcjo6c3R5bGVG
b3JEb2N1bWVudCgpLgorICAgIC8vIFN0eWxlOjpjcmVhdGVGb3JEb2N1bWVudCgpLgogICAgIGlm
ICgoc3R5bGUtPm92ZXJmbG93WSgpID09IE9QQUdFRFggfHwgc3R5bGUtPm92ZXJmbG93WSgpID09
IE9QQUdFRFkpICYmICEoZSAmJiAoZS0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBlLT5oYXNUYWdO
YW1lKGJvZHlUYWcpKSkpCiAgICAgICAgIHN0eWxlLT5zZXRDb2x1bW5TdHlsZXNGcm9tUGFnaW5h
dGlvbk1vZGUoV2ViQ29yZTo6cGFnaW5hdGlvbk1vZGVGb3JSZW5kZXJTdHlsZShzdHlsZSkpOwog
CkBAIC0xNTkwLDcgKzE0NjAsNyBAQCBzdGF0aWMgdm9pZCBjaGVja0Zvck9yaWVudGF0aW9uQ2hh
bmdlKFJlCiB7CiAgICAgRm9udE9yaWVudGF0aW9uIGZvbnRPcmllbnRhdGlvbjsKICAgICBOb25D
SktHbHlwaE9yaWVudGF0aW9uIGdseXBoT3JpZW50YXRpb247Ci0gICAgZ2V0Rm9udEFuZEdseXBo
T3JpZW50YXRpb24oc3R5bGUsIGZvbnRPcmllbnRhdGlvbiwgZ2x5cGhPcmllbnRhdGlvbik7Cisg
ICAgc3R5bGUtPmdldEZvbnRBbmRHbHlwaE9yaWVudGF0aW9uKGZvbnRPcmllbnRhdGlvbiwgZ2x5
cGhPcmllbnRhdGlvbik7CiAKICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICBpZiAoZm9udERlc2NyaXB0aW9u
Lm9yaWVudGF0aW9uKCkgPT0gZm9udE9yaWVudGF0aW9uICYmIGZvbnREZXNjcmlwdGlvbi5ub25D
SktHbHlwaE9yaWVudGF0aW9uKCkgPT0gZ2x5cGhPcmllbnRhdGlvbikKQEAgLTI0MjIsNyArMjI5
Miw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm8KICAgICAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQoKS0+cHJp
bnRpbmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKCkpOwog
CiAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSB6b29tIGZhY3Rvci4KLSAgICAgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21T
cGVjaWZpZWRTaXplKGRvY3VtZW50KCksIHN0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5p
c0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkda
b29tUnVsZXMoKSkpOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShmb250RGVzY3Jp
cHRpb24uc3BlY2lmaWVkU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwg
dXNlU1ZHWm9vbVJ1bGVzKCksIHN0YXRlLnN0eWxlKCksIGRvY3VtZW50KCkpKTsKICAgICAgICAg
ICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNGb250VmFsdWUoKSkgewpAQCAtMzI2OCw3
ICszMTM4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbAogICAg
IC8vIG11bHRpcGx5aW5nIGJ5IG91ciBzY2FsZSBmYWN0b3IuCiAgICAgZmxvYXQgc2l6ZTsKICAg
ICBpZiAoY2hpbGRGb250LmtleXdvcmRTaXplKCkpCi0gICAgICAgIHNpemUgPSBmb250U2l6ZUZv
cktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgY2hpbGRGb250LmtleXdvcmRT
aXplKCkgLSAxLCBjaGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKKyAgICAgICAgc2l6
ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVYeFNtYWxsICsgY2hpbGRGb250
LmtleXdvcmRTaXplKCkgLSAxLCBjaGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpLCBkb2N1
bWVudCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1l
bnRTZXR0aW5ncygpOwogICAgICAgICBmbG9hdCBmaXhlZFNjYWxlRmFjdG9yID0gKHNldHRpbmdz
ICYmIHNldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpICYmIHNldHRpbmdzLT5kZWZhdWx0
Rm9udFNpemUoKSkKQEAgLTMyOTQsNyArMzE2NCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5p
dGlhbGl6ZUZvbnRTdHlsZSgKICAgICBpZiAoIXN0YW5kYXJkRm9udEZhbWlseS5pc0VtcHR5KCkp
CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoc3RhbmRhcmRGb250RmFtaWx5
KTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBD
U1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZv
bnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsKKyAg
ICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQo
Q1NTVmFsdWVNZWRpdW0sIGZhbHNlLCBkb2N1bWVudCgpKSk7CiAgICAgbV9zdGF0ZS5zdHlsZSgp
LT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKICAgICBt
X3N0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKQEAgLTMzMDMsMTUxICszMTczLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
Ojppbml0aWFsaXplRm9udFN0eWxlKAogdm9pZCBTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKIHsKICAgICBmb250
RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICBmb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50
KCksIG1fc3RhdGUuc3R5bGUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNp
emUsIHVzZVNWR1pvb21SdWxlcygpKSk7Ci19Ci0KLWZsb2F0IFN0eWxlUmVzb2x2ZXI6OmdldENv
bXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiBkb2N1bWVudCwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBib29s
IHVzZVNWR1pvb21SdWxlcykKLXsKLSAgICBmbG9hdCB6b29tRmFjdG9yID0gMS4wZjsKLSAgICBp
ZiAoIXVzZVNWR1pvb21SdWxlcykgewotICAgICAgICB6b29tRmFjdG9yID0gc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKTsKLSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgp
KQotICAgICAgICAgICAgem9vbUZhY3RvciAqPSBmcmFtZS0+dGV4dFpvb21GYWN0b3IoKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNp
ZmllZFNpemUoZG9jdW1lbnQsIHpvb21GYWN0b3IsIGlzQWJzb2x1dGVTaXplLCBzcGVjaWZpZWRT
aXplKTsKLX0KLQotZmxvYXQgU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNp
ZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBmbG9hdCB6b29tRmFjdG9yLCBib29sIGlzQWJz
b2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUg
dXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUpCi17Ci0gICAgLy8gVGV4dCB3aXRoIGEgMHB4IGZv
bnQgc2l6ZSBzaG91bGQgbm90IGJlIHZpc2libGUgYW5kIHRoZXJlZm9yZSBuZWVkcyB0byBiZQot
ICAgIC8vIGV4ZW1wdCBmcm9tIG1pbmltdW0gZm9udCBzaXplIHJ1bGVzLiBBY2lkMyByZWxpZXMg
b24gdGhpcyBmb3IgcGl4ZWwtcGVyZmVjdAotICAgIC8vIHJlbmRlcmluZy4gVGhpcyBpcyBhbHNv
IGNvbXBhdGlibGUgd2l0aCBvdGhlciBicm93c2VycyB0aGF0IGhhdmUgbWluaW11bQotICAgIC8v
IGZvbnQgc2l6ZSBzZXR0aW5ncyAoZS5nLiBGaXJlZm94KS4KLSAgICBpZiAoZmFic2Yoc3BlY2lm
aWVkU2l6ZSkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpKQotICAgICAg
ICByZXR1cm4gMC4wZjsKLQotICAgIC8vIFdlIHN1cHBvcnQgdHdvIHR5cGVzIG9mIG1pbmltdW0g
Zm9udCBzaXplLiBUaGUgZmlyc3QgaXMgYSBoYXJkIG92ZXJyaWRlIHRoYXQgYXBwbGllcyB0bwot
ICAgIC8vIGFsbCBmb250cy4gVGhpcyBpcyAibWluU2l6ZS4iIFRoZSBzZWNvbmQgdHlwZSBvZiBt
aW5pbXVtIGZvbnQgc2l6ZSBpcyBhICJzbWFydCBtaW5pbXVtIgotICAgIC8vIHRoYXQgaXMgYXBw
bGllZCBvbmx5IHdoZW4gdGhlIFdlYiBwYWdlIGNhbid0IGtub3cgd2hhdCBzaXplIGl0IHJlYWxs
eSBhc2tlZCBmb3IsIGUuZy4sCi0gICAgLy8gd2hlbiBpdCB1c2VzIGxvZ2ljYWwgc2l6ZXMgbGlr
ZSAic21hbGwiIG9yIGV4cHJlc3NlcyB0aGUgZm9udC1zaXplIGFzIGEgcGVyY2VudGFnZSBvZgot
ICAgIC8vIHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IHNldHRpbmcuCi0KLSAgICAvLyBXaXRoIHRo
ZSBzbWFydCBtaW5pbXVtLCB3ZSBuZXZlciB3YW50IHRvIGdldCBzbWFsbGVyIHRoYW4gdGhlIG1p
bmltdW0gZm9udCBzaXplIHRvIGtlZXAgZm9udHMgcmVhZGFibGUuCi0gICAgLy8gSG93ZXZlciB3
ZSBhbHdheXMgYWxsb3cgdGhlIHBhZ2UgdG8gc2V0IGFuIGV4cGxpY2l0IHBpeGVsIHNpemUgdGhh
dCBpcyBzbWFsbGVyLAotICAgIC8vIHNpbmNlIHNpdGVzIHdpbGwgbWlzLXJlbmRlciBvdGhlcndp
c2UgKGUuZy4sIGh0dHA6Ly93d3cuZ2FtZXNwb3QuY29tIHdpdGggYSA5cHggbWluaW11bSkuCi0K
LSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKTsKLSAgICBpZiAo
IXNldHRpbmdzKQotICAgICAgICByZXR1cm4gMS4wZjsKLQotICAgIGludCBtaW5TaXplID0gc2V0
dGluZ3MtPm1pbmltdW1Gb250U2l6ZSgpOwotICAgIGludCBtaW5Mb2dpY2FsU2l6ZSA9IHNldHRp
bmdzLT5taW5pbXVtTG9naWNhbEZvbnRTaXplKCk7Ci0gICAgZmxvYXQgem9vbWVkU2l6ZSA9IHNw
ZWNpZmllZFNpemUgKiB6b29tRmFjdG9yOwotCi0gICAgLy8gQXBwbHkgdGhlIGhhcmQgbWluaW11
bSBmaXJzdC4gV2Ugb25seSBhcHBseSB0aGUgaGFyZCBtaW5pbXVtIGlmIGFmdGVyIHpvb21pbmcg
d2UncmUgc3RpbGwgdG9vIHNtYWxsLgotICAgIGlmICh6b29tZWRTaXplIDwgbWluU2l6ZSkKLSAg
ICAgICAgem9vbWVkU2l6ZSA9IG1pblNpemU7Ci0KLSAgICAvLyBOb3cgYXBwbHkgdGhlICJzbWFy
dCBtaW5pbXVtLiIgVGhpcyBtaW5pbXVtIGlzIGFsc28gb25seSBhcHBsaWVkIGlmIHdlJ3JlIHN0
aWxsIHRvbyBzbWFsbAotICAgIC8vIGFmdGVyIHpvb21pbmcuIFRoZSBmb250IHNpemUgbXVzdCBl
aXRoZXIgYmUgcmVsYXRpdmUgdG8gdGhlIHVzZXIgZGVmYXVsdCBvciB0aGUgb3JpZ2luYWwgc2l6
ZQotICAgIC8vIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGFibGUuIEluIG90aGVyIHdvcmRzLCB3ZSBv
bmx5IGFwcGx5IHRoZSBzbWFydCBtaW5pbXVtIHdoZW5ldmVyIHdlJ3JlIHBvc2l0aXZlCi0gICAg
Ly8gZG9pbmcgc28gd29uJ3QgZGlzcnVwdCB0aGUgbGF5b3V0LgotICAgIGlmICh1c2VTbWFydE1p
bmltdW1Gb3JGb250U2l6ZSAmJiB6b29tZWRTaXplIDwgbWluTG9naWNhbFNpemUgJiYgKHNwZWNp
ZmllZFNpemUgPj0gbWluTG9naWNhbFNpemUgfHwgIWlzQWJzb2x1dGVTaXplKSkKLSAgICAgICAg
em9vbWVkU2l6ZSA9IG1pbkxvZ2ljYWxTaXplOwotCi0gICAgLy8gQWxzbyBjbGFtcCB0byBhIHJl
YXNvbmFibGUgbWF4aW11bSB0byBwcmV2ZW50IGluc2FuZSBmb250IHNpemVzIGZyb20gY2F1c2lu
ZyBjcmFzaGVzIG9uIHZhcmlvdXMKLSAgICAvLyBwbGF0Zm9ybXMgKEknbSBsb29raW5nIGF0IHlv
dSwgV2luZG93cy4pCi0gICAgcmV0dXJuIG1pbihtYXhpbXVtQWxsb3dlZEZvbnRTaXplLCB6b29t
ZWRTaXplKTsKLX0KLQotY29uc3QgaW50IGZvbnRTaXplVGFibGVNYXggPSAxNjsKLWNvbnN0IGlu
dCBmb250U2l6ZVRhYmxlTWluID0gOTsKLWNvbnN0IGludCB0b3RhbEtleXdvcmRzID0gODsKLQot
Ly8gV2luSUUvTmF2NCB0YWJsZSBmb3IgZm9udCBzaXplcy4gRGVzaWduZWQgdG8gbWF0Y2ggdGhl
IGxlZ2FjeSBmb250IG1hcHBpbmcgc3lzdGVtIG9mIEhUTUwuCi1zdGF0aWMgY29uc3QgaW50IHF1
aXJrc0ZvbnRTaXplVGFibGVbZm9udFNpemVUYWJsZU1heCAtIGZvbnRTaXplVGFibGVNaW4gKyAx
XVt0b3RhbEtleXdvcmRzXSA9Ci17Ci0gICAgICB7IDksICAgIDksICAgICA5LCAgICAgOSwgICAg
MTEsICAgIDE0LCAgICAxOCwgICAgMjggfSwKLSAgICAgIHsgOSwgICAgOSwgICAgIDksICAgIDEw
LCAgICAxMiwgICAgMTUsICAgIDIwLCAgICAzMSB9LAotICAgICAgeyA5LCAgICA5LCAgICAgOSwg
ICAgMTEsICAgIDEzLCAgICAxNywgICAgMjIsICAgIDM0IH0sCi0gICAgICB7IDksICAgIDksICAg
IDEwLCAgICAxMiwgICAgMTQsICAgIDE4LCAgICAyNCwgICAgMzcgfSwKLSAgICAgIHsgOSwgICAg
OSwgICAgMTAsICAgIDEzLCAgICAxNiwgICAgMjAsICAgIDI2LCAgICA0MCB9LCAvLyBmaXhlZCBm
b250IGRlZmF1bHQgKDEzKQotICAgICAgeyA5LCAgICA5LCAgICAxMSwgICAgMTQsICAgIDE3LCAg
ICAyMSwgICAgMjgsICAgIDQyIH0sCi0gICAgICB7IDksICAgMTAsICAgIDEyLCAgICAxNSwgICAg
MTcsICAgIDIzLCAgICAzMCwgICAgNDUgfSwKLSAgICAgIHsgOSwgICAxMCwgICAgMTMsICAgIDE2
LCAgICAxOCwgICAgMjQsICAgIDMyLCAgICA0OCB9IC8vIHByb3BvcnRpb25hbCBmb250IGRlZmF1
bHQgKDE2KQotfTsKLS8vIEhUTUwgICAgICAgMSAgICAgIDIgICAgICAzICAgICAgNCAgICAgIDUg
ICAgICA2ICAgICAgNwotLy8gQ1NTICB4eHMgICB4cyAgICAgcyAgICAgIG0gICAgICBsICAgICB4
bCAgICAgeHhsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgfAotLy8gICAgICAgICAgICAg
ICAgICAgICAgdXNlciBwcmVmCi0KLS8vIFN0cmljdCBtb2RlIHRhYmxlIG1hdGNoZXMgTWFjSUUg
YW5kIE1vemlsbGEncyBzZXR0aW5ncyBleGFjdGx5Lgotc3RhdGljIGNvbnN0IGludCBzdHJpY3RG
b250U2l6ZVRhYmxlW2ZvbnRTaXplVGFibGVNYXggLSBmb250U2l6ZVRhYmxlTWluICsgMV1bdG90
YWxLZXl3b3Jkc10gPQotewotICAgICAgeyA5LCAgICA5LCAgICAgOSwgICAgIDksICAgIDExLCAg
ICAxNCwgICAgMTgsICAgIDI3IH0sCi0gICAgICB7IDksICAgIDksICAgICA5LCAgICAxMCwgICAg
MTIsICAgIDE1LCAgICAyMCwgICAgMzAgfSwKLSAgICAgIHsgOSwgICAgOSwgICAgMTAsICAgIDEx
LCAgICAxMywgICAgMTcsICAgIDIyLCAgICAzMyB9LAotICAgICAgeyA5LCAgICA5LCAgICAxMCwg
ICAgMTIsICAgIDE0LCAgICAxOCwgICAgMjQsICAgIDM2IH0sCi0gICAgICB7IDksICAgMTAsICAg
IDEyLCAgICAxMywgICAgMTYsICAgIDIwLCAgICAyNiwgICAgMzkgfSwgLy8gZml4ZWQgZm9udCBk
ZWZhdWx0ICgxMykKLSAgICAgIHsgOSwgICAxMCwgICAgMTIsICAgIDE0LCAgICAxNywgICAgMjEs
ICAgIDI4LCAgICA0MiB9LAotICAgICAgeyA5LCAgIDEwLCAgICAxMywgICAgMTUsICAgIDE4LCAg
ICAyMywgICAgMzAsICAgIDQ1IH0sCi0gICAgICB7IDksICAgMTAsICAgIDEzLCAgICAxNiwgICAg
MTgsICAgIDI0LCAgICAzMiwgICAgNDggfSAvLyBwcm9wb3J0aW9uYWwgZm9udCBkZWZhdWx0ICgx
NikKLX07Ci0vLyBIVE1MICAgICAgIDEgICAgICAyICAgICAgMyAgICAgIDQgICAgICA1ICAgICAg
NiAgICAgIDcKLS8vIENTUyAgeHhzICAgeHMgICAgIHMgICAgICBtICAgICAgbCAgICAgeGwgICAg
IHh4bAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHwKLS8vICAgICAgICAgICAgICAgICAg
ICAgIHVzZXIgcHJlZgotCi0vLyBGb3IgdmFsdWVzIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSB0
YWJsZSwgd2UgdXNlIFRvZGQgRmFocm5lcidzIHN1Z2dlc3RlZCBzY2FsZQotLy8gZmFjdG9ycyBm
b3IgZWFjaCBrZXl3b3JkIHZhbHVlLgotc3RhdGljIGNvbnN0IGZsb2F0IGZvbnRTaXplRmFjdG9y
c1t0b3RhbEtleXdvcmRzXSA9IHsgMC42MGYsIDAuNzVmLCAwLjg5ZiwgMS4wZiwgMS4yZiwgMS41
ZiwgMi4wZiwgMy4wZiB9OwotCi1mbG9hdCBTdHlsZVJlc29sdmVyOjpmb250U2l6ZUZvcktleXdv
cmQoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQga2V5d29yZCwgYm9vbCBzaG91bGRVc2VGaXhlZERl
ZmF1bHRTaXplKQotewotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5n
cygpOwotICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybiAxLjBmOwotCi0gICAgYm9v
bCBxdWlya3NNb2RlID0gZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpOwotICAgIGludCBtZWRpdW1T
aXplID0gc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSA/IHNldHRpbmdzLT5kZWZhdWx0Rml4ZWRG
b250U2l6ZSgpIDogc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpOwotICAgIGlmIChtZWRpdW1T
aXplID49IGZvbnRTaXplVGFibGVNaW4gJiYgbWVkaXVtU2l6ZSA8PSBmb250U2l6ZVRhYmxlTWF4
KSB7Ci0gICAgICAgIC8vIExvb2sgdXAgdGhlIGVudHJ5IGluIHRoZSB0YWJsZS4KLSAgICAgICAg
aW50IHJvdyA9IG1lZGl1bVNpemUgLSBmb250U2l6ZVRhYmxlTWluOwotICAgICAgICBpbnQgY29s
ID0gKGtleXdvcmQgLSBDU1NWYWx1ZVh4U21hbGwpOwotICAgICAgICByZXR1cm4gcXVpcmtzTW9k
ZSA/IHF1aXJrc0ZvbnRTaXplVGFibGVbcm93XVtjb2xdIDogc3RyaWN0Rm9udFNpemVUYWJsZVty
b3ddW2NvbF07Ci0gICAgfQotCi0gICAgLy8gVmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2Yg
dGhlIHRhYmxlLiBBcHBseSB0aGUgc2NhbGUgZmFjdG9yIGluc3RlYWQuCi0gICAgZmxvYXQgbWlu
TG9naWNhbFNpemUgPSBtYXgoc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKSwgMSk7
Ci0gICAgcmV0dXJuIG1heChmb250U2l6ZUZhY3RvcnNba2V5d29yZCAtIENTU1ZhbHVlWHhTbWFs
bF0qbWVkaXVtU2l6ZSwgbWluTG9naWNhbFNpemUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgotc3RhdGljIGludCBmaW5kTmVhcmVzdExlZ2FjeUZvbnRTaXplKGludCBwaXhlbEZvbnRTaXpl
LCBjb25zdCBUKiB0YWJsZSwgaW50IG11bHRpcGxpZXIpCi17Ci0gICAgLy8gSWdub3JlIHRhYmxl
WzBdIGJlY2F1c2UgeHgtc21hbGwgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkgbGVnYWN5IGZv
bnQgc2l6ZS4KLSAgICBmb3IgKGludCBpID0gMTsgaSA8IHRvdGFsS2V5d29yZHMgLSAxOyBpKysp
IHsKLSAgICAgICAgaWYgKHBpeGVsRm9udFNpemUgKiAyIDwgKHRhYmxlW2ldICsgdGFibGVbaSAr
IDFdKSAqIG11bHRpcGxpZXIpCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRvdGFsS2V5d29yZHMgLSAxOwotfQotCi1pbnQgU3R5bGVSZXNvbHZlcjo6bGVnYWN5Rm9u
dFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRV
c2VGaXhlZERlZmF1bHRTaXplKQotewotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50
LT5zZXR0aW5ncygpOwotICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybiAxOwotCi0g
ICAgYm9vbCBxdWlya3NNb2RlID0gZG9jdW1lbnQtPmluUXVpcmtzTW9kZSgpOwotICAgIGludCBt
ZWRpdW1TaXplID0gc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSA/IHNldHRpbmdzLT5kZWZhdWx0
Rml4ZWRGb250U2l6ZSgpIDogc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpOwotICAgIGlmICht
ZWRpdW1TaXplID49IGZvbnRTaXplVGFibGVNaW4gJiYgbWVkaXVtU2l6ZSA8PSBmb250U2l6ZVRh
YmxlTWF4KSB7Ci0gICAgICAgIGludCByb3cgPSBtZWRpdW1TaXplIC0gZm9udFNpemVUYWJsZU1p
bjsKLSAgICAgICAgcmV0dXJuIGZpbmROZWFyZXN0TGVnYWN5Rm9udFNpemU8aW50PihwaXhlbEZv
bnRTaXplLCBxdWlya3NNb2RlID8gcXVpcmtzRm9udFNpemVUYWJsZVtyb3ddIDogc3RyaWN0Rm9u
dFNpemVUYWJsZVtyb3ddLCAxKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmluZE5lYXJlc3RMZWdh
Y3lGb250U2l6ZTxmbG9hdD4ocGl4ZWxGb250U2l6ZSwgZm9udFNpemVGYWN0b3JzLCBtZWRpdW1T
aXplKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpjb21wdXRl
ZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoc2l6ZSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1
dGVTaXplKCksIHVzZVNWR1pvb21SdWxlcygpLCBtX3N0YXRlLnN0eWxlKCksIGRvY3VtZW50KCkp
KTsKIH0KIAogc3RhdGljIENvbG9yIGNvbG9yRm9yQ1NTVmFsdWUoQ1NTVmFsdWVJRCBjc3NWYWx1
ZUlkKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCShyZXZpc2lvbiAxNTM4MTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Myw4ICs1Myw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBFU21hcnRNaW5p
bXVtRm9yRm9udFNpemUgeyBEb05vdFVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXplLCBVc2VTbWFy
dE1pbmltdW1Gb3JGb250Rml6ZSB9OwotCiBjbGFzcyBDU1NDdXJzb3JJbWFnZVZhbHVlOwogY2xh
c3MgQ1NTRm9udFNlbGVjdG9yOwogY2xhc3MgQ1NTRm9udEZhY2U7CkBAIC0xOTAsOCArMTg4LDYg
QEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yUGFnZShpbnQg
cGFnZUluZGV4KTsKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBkZWZhdWx0U3R5bGVGb3JF
bGVtZW50KCk7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JE
b2N1bWVudChEb2N1bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAwKTsKLQogICAgIFJlbmRlclN0
eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUoKTsgfQogICAgIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50U3R5bGUo
KTsgfQogICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5yb290RWxlbWVudFN0eWxlKCk7IH0KQEAgLTI1MCwxMyArMjQ2LDYgQEAgcHVibGlj
OgogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiBzdHlsZVJ1bGVzRm9yRWxlbWVu
dChFbGVtZW50KiwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUgPSBBbGxCdXRFbXB0eUNTU1J1bGVz
KTsKICAgICBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4gcHNldWRvU3R5bGVSdWxlc0Zv
ckVsZW1lbnQoRWxlbWVudCosIFBzZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IEFs
bEJ1dEVtcHR5Q1NTUnVsZXMpOwogCi0gICAgLy8gR2l2ZW4gYSBDU1Mga2V5d29yZCBpbiB0aGUg
cmFuZ2UgKHh4LXNtYWxsIHRvIC13ZWJraXQteHh4LWxhcmdlKSwgdGhpcyBmdW5jdGlvbiB3aWxs
IHJldHVybgotICAgIC8vIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBzY2FsZWQgcmVsYXRpdmUgdG8g
dGhlIHVzZXIncyBkZWZhdWx0IChtZWRpdW0pLgotICAgIHN0YXRpYyBmbG9hdCBmb250U2l6ZUZv
cktleXdvcmQoRG9jdW1lbnQqLCBpbnQga2V5d29yZCwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1
bHRTaXplKTsKLQotICAgIC8vIEdpdmVuIGEgZm9udCBzaXplIGluIHBpeGVsLCB0aGlzIGZ1bmN0
aW9uIHdpbGwgcmV0dXJuIGxlZ2FjeSBmb250IHNpemUgYmV0d2VlbiAxIGFuZCA3LgotICAgIHN0
YXRpYyBpbnQgbGVnYWN5Rm9udFNpemUoRG9jdW1lbnQqLCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9v
bCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKTsKLQogcHVibGljOgogICAgIHZvaWQgYXBwbHlQ
cm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBSZW5kZXJTdHlsZSopOwog
CkBAIC0yNjUsMTMgKzI1NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUZvbnQoKTsKICAg
ICB2b2lkIGluaXRpYWxpemVGb250U3R5bGUoU2V0dGluZ3MqKTsKIAotICAgIHN0YXRpYyBmbG9h
dCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIGZsb2F0IHpvb21G
YWN0b3IsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIEVTbWFydE1p
bmltdW1Gb3JGb250U2l6ZSA9IFVzZVNtYXJ0TWluaW11bUZvckZvbnRGaXplKTsKLQogICAgIHZv
aWQgc2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7CiAKLXByaXZhdGU6
Ci0gICAgc3RhdGljIGZsb2F0IGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3Vt
ZW50KiwgUmVuZGVyU3R5bGUqLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRT
aXplLCBib29sIHVzZVNWR1pvb21SdWxlcyk7Ci0KIHB1YmxpYzoKICAgICBib29sIHVzZVNWR1pv
b21SdWxlcygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDE1Mzgx
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0Niw2ICsxNDYsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93
Um9vdC5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKKyNpbmNsdWRlICJTdHlsZVJl
c29sdmVGb3JEb2N1bWVudC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRl
ICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgpAQCAt
MTc4OSw4ICsxNzkwLDkgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGUoU3R5bGU6OkNoYW5n
ZQogICAgICAgICBpZiAoKGNoYW5nZSA9PSBTdHlsZTo6Rm9yY2UpIHx8IChzaG91bGREaXNwbGF5
U2VhbWxlc3NseVdpdGhQYXJlbnQoKSAmJiAoY2hhbmdlID49IFN0eWxlOjpJbmhlcml0KSkpIHsK
ICAgICAgICAgICAgIC8vIHN0eWxlIHNlbGVjdG9yIG1heSBzZXQgdGhpcyBhZ2FpbiBkdXJpbmcg
cmVjYWxjCiAgICAgICAgICAgICBtX2hhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUgPSBmYWxz
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBkb2N1bWVu
dFN0eWxlID0gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JEb2N1bWVudCh0aGlzLCBtX3N0eWxlUmVz
b2x2ZXIgPyBtX3N0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpIDogMCk7CisKKyAgICAgICAg
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHlsZSA9IFN0eWxlOjpyZXNvbHZlRm9y
RG9jdW1lbnQodGhpcyk7CisKICAgICAgICAgICAgIFN0eWxlOjpDaGFuZ2UgZG9jdW1lbnRDaGFu
Z2UgPSBTdHlsZTo6ZGV0ZXJtaW5lQ2hhbmdlKGRvY3VtZW50U3R5bGUuZ2V0KCksIHJlbmRlcmVy
KCktPnN0eWxlKCksIHNldHRpbmdzKCkpOwogICAgICAgICAgICAgaWYgKGRvY3VtZW50Q2hhbmdl
ICE9IFN0eWxlOjpOb0NoYW5nZSkKICAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5zZXRTdHls
ZShkb2N1bWVudFN0eWxlLnJlbGVhc2UoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmdTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuY3BwCShyZXZpc2lvbiAxNTM4MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNp
bmNsdWRlICJQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNpbmNsdWRl
ICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKICNp
bmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgog
I2luY2x1ZGUgIlN0eWxlUnVsZS5oIgpAQCAtMTU2NywxMCArMTU2OCwxMCBAQCBpbnQgbGVnYWN5
Rm9udFNpemVGcm9tQ1NTVmFsdWUoRG9jdW1lbnQqCiB7CiAgICAgaWYgKGlzQ1NTVmFsdWVMZW5n
dGgodmFsdWUpKSB7CiAgICAgICAgIGludCBwaXhlbEZvbnRTaXplID0gdmFsdWUtPmdldEludFZh
bHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwotICAgICAgICBpbnQgbGVnYWN5Rm9udFNp
emUgPSBTdHlsZVJlc29sdmVyOjpsZWdhY3lGb250U2l6ZShkb2N1bWVudCwgcGl4ZWxGb250U2l6
ZSwgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUpOworICAgICAgICBpbnQgbGVnYWN5Rm9u
dFNpemUgPSBTdHlsZTo6bGVnYWN5Rm9udFNpemVGb3JQaXhlbFNpemUocGl4ZWxGb250U2l6ZSwg
c2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUsIGRvY3VtZW50KTsKICAgICAgICAgLy8gVXNl
IGxlZ2FjeSBmb250IHNpemUgb25seSBpZiBwaXhlbCB2YWx1ZSBtYXRjaGVzIGV4YWN0bHkgdG8g
dGhhdCBvZiBsZWdhY3kgZm9udCBzaXplLgogICAgICAgICBpbnQgY3NzUHJpbWl0aXZlRXF1aXZh
bGVudCA9IGxlZ2FjeUZvbnRTaXplIC0gMSArIENTU1ZhbHVlWFNtYWxsOwotICAgICAgICBpZiAo
bW9kZSA9PSBBbHdheXNVc2VMZWdhY3lGb250U2l6ZSB8fCBTdHlsZVJlc29sdmVyOjpmb250U2l6
ZUZvcktleXdvcmQoZG9jdW1lbnQsIGNzc1ByaW1pdGl2ZUVxdWl2YWxlbnQsIHNob3VsZFVzZUZp
eGVkRm9udERlZmF1bHRTaXplKSA9PSBwaXhlbEZvbnRTaXplKQorICAgICAgICBpZiAobW9kZSA9
PSBBbHdheXNVc2VMZWdhY3lGb250U2l6ZSB8fCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKGNz
c1ByaW1pdGl2ZUVxdWl2YWxlbnQsIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplLCBkb2N1
bWVudCkgPT0gcGl4ZWxGb250U2l6ZSkKICAgICAgICAgICAgIHJldHVybiBsZWdhY3lGb250U2l6
ZTsKIAogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExp
bmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5r
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE1MzgxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TExpbmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDEzIEBACiAjaW5j
bHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2luY2x1
ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKLSNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGFnZS5oInUKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50
TGlzdGVuZXIuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlN0eWxlSW5oZXJp
dGVkRGF0YS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
CkBAIC0yMDQsNyArMjA2LDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MoKQogCiAg
ICAgICAgIGJvb2wgbWVkaWFRdWVyeU1hdGNoZXMgPSB0cnVlOwogICAgICAgICBpZiAoIW1fbWVk
aWEuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGRvY3VtZW50
U3R5bGUgPSBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckRvY3VtZW50KGRvY3VtZW50KCkpOworICAg
ICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBkb2N1bWVudFN0eWxlID0gU3R5bGU6OnJlc29s
dmVGb3JEb2N1bWVudChkb2N1bWVudCgpKTsKICAgICAgICAgICAgIFJlZlB0cjxNZWRpYVF1ZXJ5
U2V0PiBtZWRpYSA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50
YXgobV9tZWRpYSk7CiAgICAgICAgICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIGV2YWx1YXRvcihk
b2N1bWVudCgpLT5mcmFtZSgpLT52aWV3KCktPm1lZGlhVHlwZSgpLCBkb2N1bWVudCgpLT5mcmFt
ZSgpLCBkb2N1bWVudFN0eWxlLmdldCgpKTsKICAgICAgICAgICAgIG1lZGlhUXVlcnlNYXRjaGVz
ID0gZXZhbHVhdG9yLmV2YWwobWVkaWEuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCShyZXZpc2lvbiAxNTM4MTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzE2LDYgKzE3MTYsNDUgQEAgTGF5b3V0Qm94RXh0ZW50IFJlbmRlclN0eWxlOjpp
bWFnZU91dHNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmluZVBpZWNlSW1hZ2U6OmNv
bXB1dGVPdXRzZXQoaW1hZ2Uub3V0c2V0KCkubGVmdCgpLCBib3JkZXJMZWZ0V2lkdGgoKSkpOwog
fQogCit2b2lkIFJlbmRlclN0eWxlOjpnZXRGb250QW5kR2x5cGhPcmllbnRhdGlvbihGb250T3Jp
ZW50YXRpb24mIGZvbnRPcmllbnRhdGlvbiwgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbiYgZ2x5cGhP
cmllbnRhdGlvbikKK3sKKyAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgeworICAg
ICAgICBmb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsOworICAgICAgICBnbHlwaE9yaWVudGF0
aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRleHRPcmllbnRhdGlvbigpKSB7CisgICAgY2FzZSBU
ZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OgorICAgICAgICBmb250T3JpZW50YXRpb24gPSBW
ZXJ0aWNhbDsKKyAgICAgICAgZ2x5cGhPcmllbnRhdGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRp
b25WZXJ0aWNhbFJpZ2h0OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUZXh0T3JpZW50YXRp
b25VcHJpZ2h0OgorICAgICAgICBmb250T3JpZW50YXRpb24gPSBWZXJ0aWNhbDsKKyAgICAgICAg
Z2x5cGhPcmllbnRhdGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRpb25VcHJpZ2h0OworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBUZXh0T3JpZW50YXRpb25TaWRld2F5czoKKyAgICAgICAgaWYg
KHdyaXRpbmdNb2RlKCkgPT0gTGVmdFRvUmlnaHRXcml0aW5nTW9kZSkgeworICAgICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIG1hcCB0byBzaWRld2F5cy1sZWZ0LCB3aGljaCBpcyBub3Qg
c3VwcG9ydGVkIHlldC4KKyAgICAgICAgICAgIGZvbnRPcmllbnRhdGlvbiA9IFZlcnRpY2FsOwor
ICAgICAgICAgICAgZ2x5cGhPcmllbnRhdGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0
aWNhbFJpZ2h0OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvbnRP
cmllbnRhdGlvbiA9IEhvcml6b250YWw7CisgICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25D
SktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodDsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgVGV4dE9yaWVudGF0aW9uU2lkZXdheXNSaWdodDoKKyAgICAgICAgZm9udE9yaWVudGF0aW9u
ID0gSG9yaXpvbnRhbDsKKyAgICAgICAgZ2x5cGhPcmllbnRhdGlvbiA9IE5vbkNKS0dseXBoT3Jp
ZW50YXRpb25WZXJ0aWNhbFJpZ2h0OworICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGZvbnRPcmllbnRhdGlvbiA9IEhv
cml6b250YWw7CisgICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0
aW9uVmVydGljYWxSaWdodDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogdm9pZCBSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VTb3VyY2UoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBpbWFn
ZSkKIHsKICAgICBpZiAoc3Vycm91bmQtPmJvcmRlci5tX2ltYWdlLmltYWdlKCkgPT0gaW1hZ2Uu
Z2V0KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaAkocmV2aXNpb24gMTUzODE0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1Nyw2ICs1NTcsNyBAQCBwdWJsaWM6
CiAgICAgZmxvYXQgc3BlY2lmaWVkRm9udFNpemUoKSBjb25zdDsKICAgICBmbG9hdCBjb21wdXRl
ZEZvbnRTaXplKCkgY29uc3Q7CiAgICAgaW50IGZvbnRTaXplKCkgY29uc3Q7CisgICAgdm9pZCBn
ZXRGb250QW5kR2x5cGhPcmllbnRhdGlvbihGb250T3JpZW50YXRpb24mLCBOb25DSktHbHlwaE9y
aWVudGF0aW9uJik7CiAKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogICAgIGZsb2F0IHRl
eHRBdXRvc2l6aW5nTXVsdGlwbGllcigpIGNvbnN0IHsgcmV0dXJuIHZpc3VhbC0+bV90ZXh0QXV0
b3NpemluZ011bHRpcGxpZXI7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24gMTUzODE0KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3gu
aCIKICNpbmNsdWRlICJTVkdSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHUm9vdElu
bGluZUJveC5oIgorI2luY2x1ZGUgIlN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKICNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAKQEAgLTI0
MSw3ICsyNDIsNyBAQCB2b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OmNvbXB1dGVOZXdTY2FsCiAg
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbihzdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCkpOwogCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gYmV0dGVyIGhhbmRsZSB0aGUgY2FzZSB3
aGVuIHdlIGNvbXB1dGUgdmVyeSBzbWFsbCBmb250cyBiZWxvdyAoYmVsb3cgMXB0KS4KLSAgICBm
b250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVk
U2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50LCBzY2FsaW5nRmFjdG9yLCBmb250RGVzY3Jp
cHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLCBE
b05vdFVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXplKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNl
dENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplRm9y
U1ZHSW5saW5lVGV4dChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCksIGZvbnREZXNjcmlw
dGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzY2FsaW5nRmFjdG9yLCBkb2N1bWVudCkpOwogCiAgICAg
c2NhbGVkRm9udCA9IEZvbnQoZm9udERlc2NyaXB0aW9uLCAwLCAwKTsKICAgICBzY2FsZWRGb250
LnVwZGF0ZShzdHlsZVJlc29sdmVyLT5mb250U2VsZWN0b3IoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMTUz
ODE2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHA6MTUzODE2KQor
KysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0Mjg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3ZWJraXRAbmlja3NoYW5rcy5jb20pCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIs
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1
cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorCisjaW5jbHVkZSAiQXR0cmli
dXRlLmgiCisjaW5jbHVkZSAiQ1NTQm9yZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJDU1NDYWxjdWxh
dGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUg
IkNTU0RlZmF1bHRTdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgor
I2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU0xpbmVCb3hDb250YWlu
VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NQYWdlUnVsZS5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5o
IgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKKyNpbmNsdWRlICJDU1NQ
cm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCisjaW5jbHVkZSAi
Q1NTU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKKyNpbmNsdWRlICJD
U1NTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NTdXBwb3J0c1J1bGUuaCIKKyNpbmNsdWRlICJD
U1NUaW1pbmdGdW5jdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCisjaW5j
bHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCisjaW5j
bHVkZSAiQ29udGVudERhdGEuaCIKKyNpbmNsdWRlICJDb250ZXh0RmVhdHVyZXMuaCIKKyNpbmNs
dWRlICJDb3VudGVyLmgiCisjaW5jbHVkZSAiQ291bnRlckNvbnRlbnQuaCIKKyNpbmNsdWRlICJD
dXJzb3JMaXN0LmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5oIgorI2luY2x1
ZGUgIkRvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJFbGVtZW50UnVs
ZUNvbGxlY3Rvci5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cuaCIKKyNpbmNsdWRlICJGb250
RmVhdHVyZVZhbHVlLmgiCisjaW5jbHVkZSAiRm9udFZhbHVlLmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIkhUTUxPcHRHcm91cEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MT3B0aW9uRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
U3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgorI2luY2x1ZGUg
IkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgorI2lu
Y2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIktleWZyYW1lTGlz
dC5oIgorI2luY2x1ZGUgIkxpbmtIYXNoLmgiCisjaW5jbHVkZSAiTG9jYWxlVG9TY3JpcHRNYXBw
aW5nLmgiCisjaW5jbHVkZSAiTWF0aE1MTmFtZXMuaCIKKyNpbmNsdWRlICJNZWRpYUxpc3QuaCIK
KyNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCisjaW5jbHVkZSAiTm9kZVJlbmRlclN0
eWxlLmgiCisjaW5jbHVkZSAiTm9kZVJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCisjaW5jbHVkZSAiUGFnZVJ1bGVDb2xsZWN0b3IuaCIKKyNpbmNsdWRlICJQYWlyLmgiCisj
aW5jbHVkZSAiUXVvdGVzRGF0YS5oIgorI2luY2x1ZGUgIlJlY3QuaCIKKyNpbmNsdWRlICJSZW5k
ZXJSZWdpb24uaCIKKyNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCisj
aW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVk
ZSAiUnVsZVNldC5oIgorI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgorI2luY2x1
ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisj
aW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyRmFzdFBhdGguaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5o
IgorI2luY2x1ZGUgIlNoYWRvd0RhdGEuaCIKKyNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5j
bHVkZSAiU2hhZG93VmFsdWUuaCIKKyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5j
bHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlUGVuZGluZ0ltYWdl
LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVy
dHlTaG9ydGhhbmQuaCIKKyNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJTdHlsZVJ1
bGVJbXBvcnQuaCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKKyNpbmNsdWRlICJT
dHlsZVNoZWV0TGlzdC5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1G
dW5jdGlvbnMuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAi
VXNlckFnZW50U3R5bGVTaGVldHMuaCIKKyNpbmNsdWRlICJWaWV3cG9ydFN0eWxlUmVzb2x2ZXIu
aCIKKyNpbmNsdWRlICJWaXNpdGVkTGlua1N0YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgorI2luY2x1
ZGUgIldlYktpdENTU1JlZ2lvblJ1bGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZS5oIgorI2luY2x1ZGUgIldlYktpdEZvbnRGYW1pbHlOYW1lcy5oIgorI2luY2x1ZGUgIlhN
TE5hbWVzLmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJPcGVy
YXRpb24uaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oIgorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKKyNpbmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCisj
aW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZVNldC5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIuaCIKKyNpbmNs
dWRlICJDdXN0b21GaWx0ZXJDb2xvclBhcmFtZXRlci5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRl
ckNvbnN0YW50cy5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlci5oIgor
I2luY2x1ZGUgIkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRl
clBhcmFtZXRlci5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW1JbmZvLmgiCisjaW5j
bHVkZSAiQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyLmgiCisjaW5jbHVkZSAiU3R5bGVD
YWNoZWRTaGFkZXIuaCIKKyNpbmNsdWRlICJTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0uaCIKKyNp
bmNsdWRlICJTdHlsZUN1c3RvbUZpbHRlclByb2dyYW1DYWNoZS5oIgorI2luY2x1ZGUgIlN0eWxl
UGVuZGluZ1NoYWRlci5oIgorI2luY2x1ZGUgIlN0eWxlU2hhZGVyLmgiCisjaW5jbHVkZSAiV2Vi
S2l0Q1NTTWl4RnVuY3Rpb25WYWx1ZS5oIgorI2luY2x1ZGUgIldlYktpdENTU1NoYWRlclZhbHVl
LmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlTG9hZGVyLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQorI2lu
Y2x1ZGUgIkNTU1ZhcmlhYmxlVmFsdWUuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKERBU0hCT0FS
RF9TVVBQT1JUKQorI2luY2x1ZGUgIkRhc2hib2FyZFJlZ2lvbi5oIgorI2VuZGlmCisKKyNpZiBF
TkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKKyNpbmNsdWRlICJIVE1MQXVkaW9FbGVtZW50
LmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIgorI2luY2x1ZGUg
IlNWR0RvY3VtZW50LmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR05h
bWVzLmgiCisjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NT
U1ZHRG9jdW1lbnRWYWx1ZS5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisj
aW5jbHVkZSAiV2ViVlRURWxlbWVudC5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwor
I2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCitpZiAoaXNJbmhlcml0KSB7IFwK
KyAgICBtX3N0YXRlLnN0eWxlKCktPnNldCMjUHJvcChtX3N0YXRlLnBhcmVudFN0eWxlKCktPnBy
b3AoKSk7IFwKKyAgICByZXR1cm47IFwKK30KKworI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9BTkRf
SU5JVElBTChwcm9wLCBQcm9wKSBcCitIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBcCitpZiAo
aXNJbml0aWFsKSB7IFwKKyAgICBtX3N0YXRlLnN0eWxlKCktPnNldCMjUHJvcChSZW5kZXJTdHls
ZTo6aW5pdGlhbCMjUHJvcCgpKTsgXAorICAgIHJldHVybjsgXAorfQorCitSZW5kZXJTdHlsZSog
U3R5bGVSZXNvbHZlcjo6c19zdHlsZU5vdFlldEF2YWlsYWJsZTsKKworaW5saW5lIHZvaWQgU3R5
bGVSZXNvbHZlcjo6U3RhdGU6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpCit7CisgICAgbV9o
YXNVQUFwcGVhcmFuY2UgPSBtX3N0eWxlLT5oYXNBcHBlYXJhbmNlKCk7CisgICAgaWYgKG1faGFz
VUFBcHBlYXJhbmNlKSB7CisgICAgICAgIG1fYm9yZGVyRGF0YSA9IG1fc3R5bGUtPmJvcmRlcigp
OworICAgICAgICBtX2JhY2tncm91bmREYXRhID0gKm1fc3R5bGUtPmJhY2tncm91bmRMYXllcnMo
KTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBtX3N0eWxlLT5iYWNrZ3JvdW5kQ29sb3Io
KTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpjbGVhcigp
Cit7CisgICAgbV9lbGVtZW50ID0gMDsKKyAgICBtX3N0eWxlZEVsZW1lbnQgPSAwOworICAgIG1f
cGFyZW50U3R5bGUgPSAwOworICAgIG1fcGFyZW50Tm9kZSA9IDA7CisgICAgbV9yZWdpb25Gb3JT
dHlsaW5nID0gMDsKKyAgICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKKyNpZiBF
TkFCTEUoQ1NTX1NIQURFUlMpCisgICAgbV9oYXNQZW5kaW5nU2hhZGVycyA9IGZhbHNlOworI2Vu
ZGlmCisjaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQorICAgIG1fcGVuZGlu
Z1NWR0RvY3VtZW50cy5jbGVhcigpOworI2VuZGlmCit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
TWF0Y2hSZXN1bHQ6OmFkZE1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQq
IHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwgUHJv
cGVydHlXaGl0ZWxpc3RUeXBlIHByb3BlcnR5V2hpdGVsaXN0VHlwZSkKK3sKKyAgICBtYXRjaGVk
UHJvcGVydGllcy5ncm93KG1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSArIDEpOworICAgIFN0eWxl
UmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBuZXdQcm9wZXJ0aWVzID0gbWF0Y2hlZFByb3Bl
cnRpZXMubGFzdCgpOworICAgIG5ld1Byb3BlcnRpZXMucHJvcGVydGllcyA9IGNvbnN0X2Nhc3Q8
U3R5bGVQcm9wZXJ0eVNldCo+KHByb3BlcnRpZXMpOworICAgIG5ld1Byb3BlcnRpZXMubGlua01h
dGNoVHlwZSA9IGxpbmtNYXRjaFR5cGU7CisgICAgbmV3UHJvcGVydGllcy53aGl0ZWxpc3RUeXBl
ID0gcHJvcGVydHlXaGl0ZWxpc3RUeXBlOworICAgIG1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7
Cit9CisKK1N0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBi
b29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKKyAgICA6IG1fbWF0Y2hlZFByb3BlcnRpZXND
YWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCisgICAgLCBtX21hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGVTd2VlcFRpbWVyKHRoaXMsICZTdHlsZVJlc29sdmVyOjpzd2VlcE1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUpCisgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9tYXRjaEF1dGhv
ckFuZFVzZXJTdHlsZXMobWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQorICAgICwgbV9mb250U2Vs
ZWN0b3IoQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoZG9jdW1lbnQpKQorI2lmIEVOQUJMRShDU1Nf
REVWSUNFX0FEQVBUQVRJT04pCisgICAgLCBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlcihWaWV3cG9y
dFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZShkb2N1bWVudCkpCisjZW5kaWYKKyAgICAsIG1fZGVwcmVj
YXRlZFN0eWxlQnVpbGRlcihEZXByZWNhdGVkU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxk
ZXIoKSkKKyAgICAsIG1fc3R5bGVNYXAodGhpcykKK3sKKyAgICBFbGVtZW50KiByb290ID0gZG9j
dW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworCisgICAgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpp
bml0RGVmYXVsdFN0eWxlKHJvb3QpOworCisgICAgLy8gY29uc3RydWN0IGRvY3VtZW50IHJvb3Qg
ZWxlbWVudCBkZWZhdWx0IHN0eWxlLiB0aGlzIGlzIG5lZWRlZAorICAgIC8vIHRvIGV2YWx1YXRl
IG1lZGlhIHF1ZXJpZXMgdGhhdCBjb250YWluIHJlbGF0aXZlIGNvbnN0cmFpbnRzLCBsaWtlICJz
Y3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwZW0pIgorICAgIC8vIFRoaXMgaXMgaGVyZSBpbnN0ZWFk
IG9mIGNvbnN0cnVjdG9yLCBiZWNhdXNlIHdoZW4gY29uc3RydWN0b3IgaXMgcnVuLAorICAgIC8v
IGRvY3VtZW50IGRvZXNuJ3QgaGF2ZSBkb2N1bWVudEVsZW1lbnQKKyAgICAvLyBOT1RFOiB0aGlz
IGFzc3VtZXMgdGhhdCBlbGVtZW50IHRoYXQgZ2V0cyBwYXNzZWQgdG8gc3R5bGVGb3JFbGVtZW50
IC1jYWxsCisgICAgLy8gaXMgYWx3YXlzIGZyb20gdGhlIGRvY3VtZW50IHRoYXQgb3ducyB0aGUg
c3R5bGUgc2VsZWN0b3IKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVudC0+dmlldygpOwor
ICAgIGlmICh2aWV3KQorICAgICAgICBtX21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5
RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpKSk7CisgICAgZWxzZQorICAgICAgICBtX21lZGl1
bSA9IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKCJhbGwiKSk7CisKKyAgICBpZiAo
cm9vdCkKKyAgICAgICAgbV9yb290RGVmYXVsdFN0eWxlID0gc3R5bGVGb3JFbGVtZW50KHJvb3Qs
IDAsIERpc2FsbG93U3R5bGVTaGFyaW5nLCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcyk7CisKKyAg
ICBpZiAobV9yb290RGVmYXVsdFN0eWxlICYmIHZpZXcpCisgICAgICAgIG1fbWVkaXVtID0gYWRv
cHRQdHIobmV3IE1lZGlhUXVlcnlFdmFsdWF0b3Iodmlldy0+bWVkaWFUeXBlKCksIHZpZXctPmZy
YW1lKCksIG1fcm9vdERlZmF1bHRTdHlsZS5nZXQoKSkpOworCisgICAgbV9ydWxlU2V0cy5yZXNl
dEF1dGhvclN0eWxlKCk7CisKKyAgICBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uKiBzdHls
ZVNoZWV0Q29sbGVjdGlvbiA9IGRvY3VtZW50LT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpOworICAg
IG1fcnVsZVNldHMuaW5pdFVzZXJTdHlsZShzdHlsZVNoZWV0Q29sbGVjdGlvbiwgKm1fbWVkaXVt
LCAqdGhpcyk7CisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGlmIChkb2N1bWVudC0+c3Zn
RXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRm9udEZhY2VFbGVtZW50
Kj4mIHN2Z0ZvbnRGYWNlRWxlbWVudHMgPSBkb2N1bWVudC0+c3ZnRXh0ZW5zaW9ucygpLT5zdmdG
b250RmFjZUVsZW1lbnRzKCk7CisgICAgICAgIEhhc2hTZXQ8U1ZHRm9udEZhY2VFbGVtZW50Kj46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN2Z0ZvbnRGYWNlRWxlbWVudHMuZW5kKCk7CisgICAgICAg
IGZvciAoSGFzaFNldDxTVkdGb250RmFjZUVsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBz
dmdGb250RmFjZUVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAg
IGZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoKCppdCktPmZvbnRGYWNlUnVsZSgpKTsK
KyAgICB9CisjZW5kaWYKKworICAgIGFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKDAsIHN0eWxlU2hl
ZXRDb2xsZWN0aW9uLT5hY3RpdmVBdXRob3JTdHlsZVNoZWV0cygpKTsKK30KKwordm9pZCBTdHls
ZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29u
c3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiBzdHlsZVNoZWV0cykKK3sKKyAgICBt
X3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGZpcnN0TmV3LCBzdHlsZVNoZWV0cywg
bV9tZWRpdW0uZ2V0KCksIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVycywgZG9jdW1lbnQoKS0+aXNW
aWV3U291cmNlKCksIHRoaXMpOworICAgIGlmIChkb2N1bWVudCgpLT5yZW5kZXJlcigpICYmIGRv
Y3VtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCkpCisgICAgICAgIGRvY3VtZW50KCktPnJlbmRl
cmVyKCktPnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOworCisjaWYgRU5B
QkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKKyAgICB2aWV3cG9ydFN0eWxlUmVzb2x2ZXIoKS0+
cmVzb2x2ZSgpOworI2VuZGlmCit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6cHVzaFBhcmVudEVs
ZW1lbnQoRWxlbWVudCogcGFyZW50KQoreworICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVu
dHNQYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQoKTsKKworICAgIC8v
IFdlIGFyZSBub3QgYWx3YXlzIGludm9rZWQgY29uc2lzdGVudGx5LiBGb3IgZXhhbXBsZSwgc2Ny
aXB0IGV4ZWN1dGlvbiBjYW4gY2F1c2UgdXMgdG8gZW50ZXIKKyAgICAvLyBzdHlsZSByZWNhbGMg
aW4gdGhlIG1pZGRsZSBvZiB0cmVlIGJ1aWxkaW5nLiBXZSBtYXkgYWxzbyBiZSBpbnZva2VkIGZy
b20gc29tZXdoZXJlIHdpdGhpbiB0aGUgdHJlZS4KKyAgICAvLyBSZXNldCB0aGUgc3RhY2sgaW4g
dGhpcyBjYXNlLCBvciBpZiB3ZSBzZWUgYSBuZXcgcm9vdCBlbGVtZW50LgorICAgIC8vIE90aGVy
d2lzZSBqdXN0IHB1c2ggdGhlIG5ldyBwYXJlbnQuCisgICAgaWYgKCFwYXJlbnRzUGFyZW50IHx8
IG1fc2VsZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0VtcHR5KCkpCisgICAgICAgIG1fc2VsZWN0
b3JGaWx0ZXIuc2V0dXBQYXJlbnRTdGFjayhwYXJlbnQpOworICAgIGVsc2UKKyAgICAgICAgbV9z
ZWxlY3RvckZpbHRlci5wdXNoUGFyZW50KHBhcmVudCk7CisKKyAgICAvLyBOb3RlOiBXZSBtdXN0
bid0IHNraXAgU2hhZG93Um9vdCBub2RlcyBmb3IgdGhlIHNjb3BlIHN0YWNrLgorICAgIGlmICht
X3Njb3BlUmVzb2x2ZXIpCisgICAgICAgIG1fc2NvcGVSZXNvbHZlci0+cHVzaChwYXJlbnQsIHBh
cmVudC0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVy
Ojpwb3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqIHBhcmVudCkKK3sKKyAgICAvLyBOb3RlIHRoYXQg
d2UgbWF5IGdldCBpbnZva2VkIGZvciBzb21lIHJhbmRvbSBlbGVtZW50cyBpbiBzb21lIHdhY2t5
IGNhc2VzIGR1cmluZyBzdHlsZSByZXNvbHZlLgorICAgIC8vIFBhdXNlIG1haW50YWluaW5nIHRo
ZSBzdGFjayBpbiB0aGlzIGNhc2UuCisgICAgaWYgKG1fc2VsZWN0b3JGaWx0ZXIucGFyZW50U3Rh
Y2tJc0NvbnNpc3RlbnQocGFyZW50KSkKKyAgICAgICAgbV9zZWxlY3RvckZpbHRlci5wb3BQYXJl
bnQoKTsKKyAgICBpZiAobV9zY29wZVJlc29sdmVyKQorICAgICAgICBtX3Njb3BlUmVzb2x2ZXIt
PnBvcChwYXJlbnQpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRTaGFkb3dS
b290KGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCit7CisgICAgQVNTRVJUKHNoYWRvd1Jv
b3QtPmhvc3QoKSk7CisgICAgaWYgKG1fc2NvcGVSZXNvbHZlcikKKyAgICAgICAgbV9zY29wZVJl
c29sdmVyLT5wdXNoKHNoYWRvd1Jvb3QsIHNoYWRvd1Jvb3QtPmhvc3QoKSk7Cit9CisKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290KiBzaGFk
b3dSb290KQoreworICAgIEFTU0VSVChzaGFkb3dSb290LT5ob3N0KCkpOworICAgIGlmIChtX3Nj
b3BlUmVzb2x2ZXIpCisgICAgICAgIG1fc2NvcGVSZXNvbHZlci0+cG9wKHNoYWRvd1Jvb3QpOwor
fQorCisvLyBUaGlzIGlzIGEgc2ltcGxpZmllZCBzdHlsZSBzZXR0aW5nIGZ1bmN0aW9uIGZvciBr
ZXlmcmFtZSBzdHlsZXMKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkS2V5ZnJhbWVTdHlsZShQYXNz
UmVmUHRyPFN0eWxlUnVsZUtleWZyYW1lcz4gcnVsZSkKK3sKKyAgICBBdG9taWNTdHJpbmcgcyhy
dWxlLT5uYW1lKCkpOworICAgIG1fa2V5ZnJhbWVzUnVsZU1hcC5zZXQocy5pbXBsKCksIHJ1bGUp
OworfQorCitTdHlsZVJlc29sdmVyOjp+U3R5bGVSZXNvbHZlcigpCit7CisgICAgbV9mb250U2Vs
ZWN0b3ItPmNsZWFyRG9jdW1lbnQoKTsKKworI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJ
T04pCisgICAgbV92aWV3cG9ydFN0eWxlUmVzb2x2ZXItPmNsZWFyRG9jdW1lbnQoKTsKKyNlbmRp
ZgorfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShU
aW1lcjxTdHlsZVJlc29sdmVyPiopCit7CisgICAgLy8gTG9vayBmb3IgY2FjaGUgZW50cmllcyBj
b250YWluaW5nIGEgc3R5bGUgZGVjbGFyYXRpb24gd2l0aCBhIHNpbmdsZSByZWYgYW5kIHJlbW92
ZSB0aGVtLgorICAgIC8vIFRoaXMgbWF5IGhhcHBlbiB3aGVuIGFuIGVsZW1lbnQgYXR0cmlidXRl
IG11dGF0aW9uIGNhdXNlcyBpdCB0byBnZW5lcmF0ZSBhIG5ldyBpbmxpbmVTdHlsZSgpCisgICAg
Ly8gb3IgcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSwgcG90ZW50aWFsbHkgbGVhdmluZyB0
aGlzIGNhY2hlIHdpdGggdGhlIGxhc3QgcmVmIG9uIHRoZSBvbGQgb25lLgorICAgIFZlY3Rvcjx1
bnNpZ25lZCwgMTY+IHRvUmVtb3ZlOworICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJh
dG9yIGl0ID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmJlZ2luKCk7CisgICAgTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgZW5kID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVu
ZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVmVjdG9yPE1hdGNo
ZWRQcm9wZXJ0aWVzPiYgbWF0Y2hlZFByb3BlcnRpZXMgPSBpdC0+dmFsdWUubWF0Y2hlZFByb3Bl
cnRpZXM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaGVkUHJvcGVydGllc1tpXS5wcm9w
ZXJ0aWVzLT5oYXNPbmVSZWYoKSkgeworICAgICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChp
dC0+a2V5KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytp
KQorICAgICAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUucmVtb3ZlKHRvUmVtb3ZlW2ldKTsK
KworICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwID0g
MDsKK30KKworaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRl
TWF0Y2hlc0hvc3RSdWxlcygpCit7CisjaWYgRU5BQkxFKFNIQURPV19ET00pCisgICAgcmV0dXJu
IG1fc2NvcGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNIb3N0UnVsZXMobV9zdGF0ZS5lbGVtZW50KCkpOworI2Vsc2UKKyAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYKK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjpjbGFzc05hbWVzQWZmZWN0
ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMpIGNvbnN0Cit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNsYXNzTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKG1fcnVsZVNldHMuZmVhdHVyZXMoKS5jbGFzc2VzSW5SdWxlcy5jb250YWlucyhj
bGFzc05hbWVzW2ldLmltcGwoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6
aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKK3sKKyAgICBtX2VsZW1lbnQgPSBlOworICAgIG1fc3R5
bGVkRWxlbWVudCA9IGUgJiYgZS0+aXNTdHlsZWRFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTdHls
ZWRFbGVtZW50Kj4oZSkgOiAwOworICAgIG1fZWxlbWVudExpbmtTdGF0ZSA9IGUgPyBlLT5kb2N1
bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZShlKSA6IE5vdElu
c2lkZUxpbms7Cit9CisKK2lubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KEVs
ZW1lbnQqIGUpCit7CisgICAgaWYgKG1fc3RhdGUuZWxlbWVudCgpICE9IGUpIHsKKyAgICAgICAg
bV9zdGF0ZS5pbml0RWxlbWVudChlKTsKKyAgICAgICAgaWYgKGUgJiYgZSA9PSBlLT5kb2N1bWVu
dCgpLT5kb2N1bWVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0
RGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOworICAgICAgICAgICAgZS0+ZG9j
dW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2lubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0
Rm9yU3R5bGVSZXNvbHZlKERvY3VtZW50KiBkb2N1bWVudCwgRWxlbWVudCogZSwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlLCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcpCit7CisgICAg
bV9yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9uRm9yU3R5bGluZzsKKworICAgIGlmIChlKSB7Cisg
ICAgICAgIE5vZGVSZW5kZXJpbmdDb250ZXh0IGNvbnRleHQoZSk7CisgICAgICAgIG1fcGFyZW50
Tm9kZSA9IGNvbnRleHQucGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCk7CisgICAgICAg
IG1fcGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0U3R5bGVJbmhlcml0YW5jZSgpID8gMCA6Cisg
ICAgICAgICAgICBwYXJlbnRTdHlsZSA/IHBhcmVudFN0eWxlIDoKKyAgICAgICAgICAgIG1fcGFy
ZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDA7CisgICAgICAgIG1fZGlz
dHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gY29udGV4dC5pbnNlcnRpb25Qb2ludCgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIG1fcGFyZW50Tm9kZSA9IDA7CisgICAgICAgIG1fcGFyZW50U3R5
bGUgPSBwYXJlbnRTdHlsZTsKKyAgICAgICAgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQg
PSBmYWxzZTsKKyAgICB9CisKKyAgICBOb2RlKiBkb2NFbGVtZW50ID0gZSA/IGUtPmRvY3VtZW50
KCktPmRvY3VtZW50RWxlbWVudCgpIDogMDsKKyAgICBSZW5kZXJTdHlsZSogZG9jU3R5bGUgPSBk
b2N1bWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICBtX3Jvb3RFbGVtZW50U3R5bGUgPSBkb2NFbGVt
ZW50ICYmIGUgIT0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlclN0eWxlKCkgOiBkb2NT
dHlsZTsKKworICAgIG1fc3R5bGUgPSAwOworICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5j
bGVhcigpOworICAgIG1fZm9udERpcnR5ID0gZmFsc2U7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNp
Z25lZCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgPSAxMDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj
U3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCA9IDEwOworCitzdGF0aWMgaW5saW5lIGJvb2wgcGFy
ZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhjb25zdCBFbGVtZW50KiBwYXJlbnRFbGVtZW50KQor
eworICAgIGlmICghcGFyZW50RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBwYXJlbnRFbGVtZW50LT5oYXNGbGFnc1NldER1cmluZ1N0eWxpbmdPZkNoaWxkcmVuKCk7
Cit9CisKK05vZGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFy
ZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VudCkgY29uc3QKK3sKKyAgICBpZiAodmlzaXRl
ZE5vZGVDb3VudCA+PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgKiBjU3R5bGVTZWFyY2hMZXZlbFRo
cmVzaG9sZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+
aXNTdHlsZWRFbGVtZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChwYXJlbnQtPmhh
c1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIFN0eWxlZEVs
ZW1lbnQqIHAgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4ocGFyZW50KTsKKyAgICBpZiAo
cC0+aW5saW5lU3R5bGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisjaWYgRU5BQkxFKFNWRykKKyAg
ICBpZiAocC0+aXNTVkdFbGVtZW50KCkgJiYgdG9TVkdFbGVtZW50KHApLT5hbmltYXRlZFNNSUxT
dHlsZVByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICBpZiAocC0+
aGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5jb250YWlucyhwLT5p
ZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gcC0+cmVuZGVyU3R5bGUoKTsKKyAgICB1bnNpZ25l
ZCBzdWJjb3VudCA9IDA7CisgICAgTm9kZSogdGhpc0NvdXNpbiA9IHA7CisgICAgTm9kZSogY3Vy
cmVudE5vZGUgPSBwLT5wcmV2aW91c1NpYmxpbmcoKTsKKworICAgIC8vIFJlc2VydmUgdGhlIHRy
aWVzIGZvciB0aGlzIGxldmVsLiBUaGlzIGVmZmVjdGl2ZWx5IG1ha2VzIHN1cmUgdGhhdCB0aGUg
YWxnb3JpdGhtCisgICAgLy8gd2lsbCBuZXZlciBnbyBkZWVwZXIgdGhhbiBjU3R5bGVTZWFyY2hM
ZXZlbFRocmVzaG9sZCBsZXZlbHMgaW50byByZWN1cnNpb24uCisgICAgdmlzaXRlZE5vZGVDb3Vu
dCArPSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQ7CisgICAgd2hpbGUgKHRoaXNDb3VzaW4pIHsKKyAg
ICAgICAgd2hpbGUgKGN1cnJlbnROb2RlKSB7CisgICAgICAgICAgICArK3N1YmNvdW50OworICAg
ICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5yZW5kZXJTdHlsZSgpID09IHBhcmVudFN0eWxlICYm
IGN1cnJlbnROb2RlLT5sYXN0Q2hpbGQoKQorICAgICAgICAgICAgICAgICYmIGN1cnJlbnROb2Rl
LT5pc0VsZW1lbnROb2RlKCkgJiYgIXBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcodG9FbGVt
ZW50KGN1cnJlbnROb2RlKSkKKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKKyAgICAgICAgICAgICAg
ICAmJiAhdG9FbGVtZW50KGN1cnJlbnROb2RlKS0+c2hhZG93KCkKKyNlbmRpZgorICAgICAgICAg
ICAgICAgICkgeworICAgICAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgdW51c2VkIHJlc2VydmVk
IHRyaWVzLgorICAgICAgICAgICAgICAgIHZpc2l0ZWROb2RlQ291bnQgLT0gY1N0eWxlU2VhcmNo
VGhyZXNob2xkIC0gc3ViY291bnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnROb2Rl
LT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdWJjb3VudCA+
PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAg
ICAgICAgfQorICAgICAgICBjdXJyZW50Tm9kZSA9IGxvY2F0ZUNvdXNpbkxpc3QodGhpc0NvdXNp
bi0+cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNvdW50KTsKKyAgICAgICAgdGhpc0NvdXNp
biA9IGN1cnJlbnROb2RlOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitib29sIFN0eWxl
UmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqIHJ1
bGVTZXQpCit7CisgICAgaWYgKCFydWxlU2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IodGhpcywgbV9zdGF0ZSk7CisgICAgcmV0
dXJuIGNvbGxlY3Rvci5oYXNBbnlNYXRjaGluZ1J1bGVzKHJ1bGVTZXQpOworfQorCitib29sIFN0
eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KiBlbGVt
ZW50KSBjb25zdAoreworICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgSFRN
TElucHV0RWxlbWVudCogdGhpc0lucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50
KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSBzdGF0ZS5lbGVt
ZW50KCktPnRvSW5wdXRFbGVtZW50KCk7CisKKyAgICBpZiAoIXRoaXNJbnB1dEVsZW1lbnQgfHwg
IW90aGVySW5wdXRFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodGhp
c0lucHV0RWxlbWVudC0+ZWxlbWVudERhdGEoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+ZWxlbWVu
dERhdGEoKSkgeworICAgICAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0
ZSh0eXBlQXR0cikgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0
dHIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodGhpc0lucHV0RWxl
bWVudC0+ZmFzdEdldEF0dHJpYnV0ZShyZWFkb25seUF0dHIpICE9IG90aGVySW5wdXRFbGVtZW50
LT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPmlzQXV0b2ZpbGxlZCgpICE9
IG90aGVySW5wdXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCkgIT0gb3Ro
ZXJJbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJJbmRldGVybWluYXRl
KCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5pc1JlcXVpcmVk
KCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmlzUmVxdWlyZWQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKGVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICE9IHN0YXRl
LmVsZW1lbnQoKS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChlbGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0gc3RhdGUu
ZWxlbWVudCgpLT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChzdGF0ZS5kb2N1bWVudCgpLT5jb250YWluc1ZhbGlkaXR5U3R5bGVSdWxl
cygpKSB7CisgICAgICAgIGJvb2wgd2lsbFZhbGlkYXRlID0gZWxlbWVudC0+d2lsbFZhbGlkYXRl
KCk7CisKKyAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBzdGF0ZS5lbGVtZW50KCktPndpbGxW
YWxpZGF0ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICh3aWxs
VmFsaWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSAhPSBzdGF0
ZS5lbGVtZW50KCktPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGVsZW1lbnQtPmlzSW5SYW5nZSgpICE9IHN0YXRl
LmVsZW1lbnQoKS0+aXNJblJhbmdlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgaWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNP
dXRPZlJhbmdlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0
byhFbGVtZW50KiBlbGVtZW50KQoreworICAgIC8vIEZJWE1FOiBUaGlzIGxpbmUgaXMgc3VycHJp
c2luZ2x5IGhvdCwgd2UgbWF5IHdpc2ggdG8gaW5saW5lIGhhc0RpcmVjdGlvbkF1dG8gaW50byBT
dHlsZVJlc29sdmVyLgorICAgIHJldHVybiBlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgdG9I
VE1MRWxlbWVudChlbGVtZW50KS0+aGFzRGlyZWN0aW9uQXV0bygpOworfQorCitib29sIFN0eWxl
UmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJp
YnV0ZXMoU3R5bGVkRWxlbWVudCogc2hhcmluZ0NhbmRpZGF0ZSkgY29uc3QKK3sKKyAgICBjb25z
dCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmVsZW1l
bnREYXRhKCkgPT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZWxlbWVudERhdGEoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxO
YW1lczo6bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1M
TmFtZXM6OmxhbmdBdHRyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdGF0ZS5l
bGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUt
PmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIXN0YXRlLmVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcygpKSB7CisgICAgICAgIGlm
IChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNDbGFzcygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVs
ZXMoc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9IGVsc2UgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmhhc0NsYXNzKCkpIHsKKyNp
ZiBFTkFCTEUoU1ZHKQorICAgICAgICAvLyBTVkcgZWxlbWVudHMgcmVxdWlyZSBhIChzbG93ISkg
Z2V0QXR0cmlidXRlIGNvbXBhcmlzaW9uIGJlY2F1c2UgImNsYXNzIiBpcyBhbiBhbmltYXRhYmxl
IGF0dHJpYnV0ZSBmb3IgU1ZHLgorICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5pc1NWR0Vs
ZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRl
KGNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworI2VuZGlm
CisgICAgICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5jbGFzc05hbWVzKCkgIT0gc2hhcmlu
Z0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICB9CisjZW5kaWYKKyAgICB9IGVsc2UKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+cHJlc2VudGF0
aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5wcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoUFJPR1JF
U1NfRUxFTUVOVCkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5oYXNUYWdOYW1lKHByb2dyZXNz
VGFnKSkgeworICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5zaG91bGRBcHBlYXJJbmRldGVy
bWluYXRlKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0
YXRlOworCisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChz
dHlsZS0+dW5pcXVlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3R5bGUtPmhh
c1VuaXF1ZVBzZXVkb1N0eWxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxl
bWVudC0+dGFnUU5hbWUoKSAhPSBzdGF0ZS5lbGVtZW50KCktPnRhZ1FOYW1lKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxlbWVudC0+aW5saW5lU3R5bGUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LT5uZWVkc1N0eWxlUmVjYWxjKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyNpZiBFTkFCTEUoU1ZHKQorICAgIGlmIChlbGVtZW50LT5pc1NW
R0VsZW1lbnQoKSAmJiB0b1NWR0VsZW1lbnQoZWxlbWVudCktPmFuaW1hdGVkU01JTFN0eWxlUHJv
cGVydGllcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICBpZiAoZWxlbWVu
dC0+aXNMaW5rKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0xpbmsoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChlbGVtZW50LT5ob3ZlcmVkKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5o
b3ZlcmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxlbWVudC0+YWN0aXZl
KCkgIT0gc3RhdGUuZWxlbWVudCgpLT5hY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChlbGVtZW50LT5mb2N1c2VkKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5mb2N1c2VkKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxlbWVudC0+c2hhZG93UHNldWRvSWQo
KSAhPSBzdGF0ZS5lbGVtZW50KCktPnNoYWRvd1BzZXVkb0lkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghc2hhcmluZ0NhbmRpZGF0ZUhhc0lk
ZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhlbGVtZW50KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChlbGVtZW50LT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRl
U3R5bGUoKSAhPSBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmFkZGl0aW9uYWxQcmVzZW50YXRpb25B
dHRyaWJ1dGVTdHlsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZWxlbWVu
dC0+aGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5jb250YWlucyhl
bGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzaGFyZSBzdHlsZSBm
b3Igb3B0aW9uIGFuZCBvcHRncm91cCB3aGVuZXZlciBwb3NzaWJsZS4KKyAgICAvLyBCZWZvcmUg
ZG9pbmcgc28sIHdlIG5lZWQgdG8gcmVzb2x2ZSBpc3N1ZXMgaW4gSFRNTFNlbGVjdEVsZW1lbnQ6
OnJlY2FsY0xpc3RJdGVtcworICAgIC8vIGFuZCBSZW5kZXJNZW51TGlzdDo6c2V0VGV4dC4gU2Vl
IGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDA1CisgICAg
aWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgfHwgaXNIVE1MT3B0R3JvdXBFbGVtZW50
KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGlzQ29udHJvbCA9
IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CisKKyAgICBpZiAoaXNDb250cm9sICE9
IHN0YXRlLmVsZW1lbnQoKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKGlzQ29udHJvbCAmJiAhY2FuU2hhcmVTdHlsZVdpdGhDb250cm9s
KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc3R5bGUtPnRyYW5z
aXRpb25zKCkgfHwgc3R5bGUtPmFuaW1hdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIFR1cm4gb2ZmIHN0eWxl
IHNoYXJpbmcgZm9yIGVsZW1lbnRzIHRoYXQgY2FuIGdhaW4gbGF5ZXJzIGZvciByZWFzb25zIG91
dHNpZGUgb2YgdGhlIHN0eWxlIHN5c3RlbS4KKyAgICAvLyBTZWUgY29tbWVudHMgaW4gUmVuZGVy
T2JqZWN0OjpzZXRTdHlsZSgpLgorICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRh
ZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFt
ZShlbWJlZFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IGVsZW1lbnQt
Pmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGNhbnZhc1RhZykK
KyNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKKyAgICAgICAgLy8gV2l0aCBwcm94
eWluZywgdGhlIG1lZGlhIGVsZW1lbnRzIGFyZSBiYWNrZWQgYnkgYSBSZW5kZXJFbWJlZGRlZE9i
amVjdC4KKyAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgaXNIVE1M
QXVkaW9FbGVtZW50KGVsZW1lbnQpCisjZW5kaWYKKyAgICAgICAgKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYKKworICAgIGlmIChlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhlbGVtZW50
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICYm
IHN0YXRlLmVsZW1lbnRMaW5rU3RhdGUoKSAhPSBzdHlsZS0+aW5zaWRlTGluaygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgLy8gRGVueSBz
aGFyaW5nIHN0eWxlcyBiZXR3ZWVuIFdlYlZUVCBhbmQgbm9uLVdlYlZUVCBub2Rlcy4KKyAgICBp
ZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc1dlYlZU
VEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVsZW1lbnQtPmlz
V2ViVlRURWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQoKS0+aXNXZWJWVFRFbGVtZW50KCkgJiYg
dG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT5pc1Bhc3ROb2RlKCkgIT0gdG9XZWJWVFRFbGVtZW50
KHN0YXRlLmVsZW1lbnQoKSktPmlzUGFzdE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgaWYgKGVsZW1lbnQgPT0g
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkgfHwg
c3RhdGUuZWxlbWVudCgpID09IHN0YXRlLmRvY3VtZW50KCktPndlYmtpdEN1cnJlbnRGdWxsU2Ny
ZWVuRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworaW5saW5lIFN0eWxlZEVsZW1lbnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJs
aW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqIG5vZGUsIHVuc2lnbmVkJiBjb3VudCkgY29uc3QKK3sK
KyAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CisgICAg
ICAgIGlmICghbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChzdGF0aWNfY2FzdDxTdHlsZWRF
bGVtZW50Kj4obm9kZSkpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChjb3VudCsr
ID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpOworfQorCitSZW5k
ZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQoreworICAgIFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgaWYgKCFzdGF0ZS5zdHlsZWRFbGVtZW50KCkgfHwgIXN0
YXRlLnBhcmVudFN0eWxlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gSWYgdGhlIGVs
ZW1lbnQgaGFzIGlubGluZSBzdHlsZSBpdCBpcyBwcm9iYWJseSB1bmlxdWUuCisgICAgaWYgKHN0
YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKSkKKyAgICAgICAgcmV0dXJuIDA7Cisj
aWYgRU5BQkxFKFNWRykKKyAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc1NWR0VsZW1l
bnQoKSAmJiB0b1NWR0VsZW1lbnQoc3RhdGUuc3R5bGVkRWxlbWVudCgpKS0+YW5pbWF0ZWRTTUlM
U3R5bGVQcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiAwOworI2VuZGlmCisgICAgLy8gSWRz
IHN0b3Agc3R5bGUgc2hhcmluZyBpZiB0aGV5IHNob3cgdXAgaW4gdGhlIHN0eWxlc2hlZXRzLgor
ICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmhhc0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0
dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pZEZvclN0
eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChwYXJl
bnRFbGVtZW50UHJldmVudHNTaGFyaW5nKHN0YXRlLmVsZW1lbnQoKS0+cGFyZW50RWxlbWVudCgp
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aGFz
U2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHN0YXRl
LmVsZW1lbnQoKSA9PSBzdGF0ZS5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKHN0YXRlLmVsZW1lbnQoKSkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gQ2FjaGUgd2hldGhlciBzdGF0ZS5lbGVtZW50
IGlzIGFmZmVjdGVkIGJ5IGFueSBrbm93biBjbGFzcyBzZWxlY3RvcnMuCisgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkbid0IGJlIGEgbWVtYmVyIHZhcmlhYmxlLiBUaGUgc3R5bGUgc2hhcmluZyBj
b2RlIGNvdWxkIGJlIGZhY3RvcmVkIG91dCBvZiBTdHlsZVJlc29sdmVyLgorICAgIHN0YXRlLnNl
dEVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhzdGF0ZS5lbGVtZW50KCkgJiYgc3RhdGUuZWxl
bWVudCgpLT5oYXNDbGFzcygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoc3RhdGUuZWxl
bWVudCgpLT5jbGFzc05hbWVzKCkpKTsKKworICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdz
IGFuZCB0aGVpciBjb3VzaW5zLgorICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICB1bnNpZ25l
ZCB2aXNpdGVkTm9kZUNvdW50ID0gMDsKKyAgICBTdHlsZWRFbGVtZW50KiBzaGFyZUVsZW1lbnQg
PSAwOworICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPnByZXZp
b3VzU2libGluZygpOworICAgIHdoaWxlIChjb3VzaW5MaXN0KSB7CisgICAgICAgIHNoYXJlRWxl
bWVudCA9IGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvdXNpbkxpc3QsIGNvdW50KTsKKyAg
ICAgICAgaWYgKHNoYXJlRWxlbWVudCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjb3Vz
aW5MaXN0ID0gbG9jYXRlQ291c2luTGlzdChjb3VzaW5MaXN0LT5wYXJlbnRFbGVtZW50KCksIHZp
c2l0ZWROb2RlQ291bnQpOworICAgIH0KKworICAgIC8vIElmIHdlIGhhdmUgZXhoYXVzdGVkIGFs
bCBvdXIgYnVkZ2V0IG9yIG91ciBjb3VzaW5zLgorICAgIGlmICghc2hhcmVFbGVtZW50KQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIC8vIENhbid0IHNoYXJlIGlmIHNpYmxpbmcgcnVsZXMgYXBw
bHkuIFRoaXMgaXMgY2hlY2tlZCBhdCB0aGUgZW5kIGFzIGl0IHNob3VsZCByYXJlbHkgZmFpbC4K
KyAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQobV9ydWxlU2V0cy5z
aWJsaW5nKCkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBDYW4ndCBzaGFyZSBpZiBhdHRy
aWJ1dGUgcnVsZXMgYXBwbHkuCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNS
dWxlU2V0KG1fcnVsZVNldHMudW5jb21tb25BdHRyaWJ1dGUoKSkpCisgICAgICAgIHJldHVybiAw
OworICAgIC8vIENhbid0IHNoYXJlIGlmIEBob3N0IEAtcnVsZXMgYXBwbHkuCisgICAgaWYgKHN0
eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZvciBl
YWNoIG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBhYm92
ZS4KKyAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0ZS5lbGVtZW50KCkt
PnBhcmVudEVsZW1lbnQoKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzaGFyZUVs
ZW1lbnQtPnJlbmRlclN0eWxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGdldEZvbnRBbmRHbHlwaE9y
aWVudGF0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgRm9udE9yaWVudGF0aW9uJiBmb250
T3JpZW50YXRpb24sIE5vbkNKS0dseXBoT3JpZW50YXRpb24mIGdseXBoT3JpZW50YXRpb24pCit7
CisgICAgaWYgKHN0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAgICAgIGZv
bnRPcmllbnRhdGlvbiA9IEhvcml6b250YWw7CisgICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBO
b25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHN3aXRjaCAoc3R5bGUtPnRleHRPcmllbnRhdGlvbigpKSB7CisgICAgY2FzZSBU
ZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OgorICAgICAgICBmb250T3JpZW50YXRpb24gPSBW
ZXJ0aWNhbDsKKyAgICAgICAgZ2x5cGhPcmllbnRhdGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRp
b25WZXJ0aWNhbFJpZ2h0OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUZXh0T3JpZW50YXRp
b25VcHJpZ2h0OgorICAgICAgICBmb250T3JpZW50YXRpb24gPSBWZXJ0aWNhbDsKKyAgICAgICAg
Z2x5cGhPcmllbnRhdGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRpb25VcHJpZ2h0OworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBUZXh0T3JpZW50YXRpb25TaWRld2F5czoKKyAgICAgICAgaWYg
KHN0eWxlLT53cml0aW5nTW9kZSgpID09IExlZnRUb1JpZ2h0V3JpdGluZ01vZGUpIHsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBtYXAgdG8gc2lkZXdheXMtbGVmdCwgd2hpY2gg
aXMgbm90IHN1cHBvcnRlZCB5ZXQuCisgICAgICAgICAgICBmb250T3JpZW50YXRpb24gPSBWZXJ0
aWNhbDsKKyAgICAgICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0
aW9uVmVydGljYWxSaWdodDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBmb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsOworICAgICAgICBnbHlwaE9yaWVudGF0aW9u
ID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFRleHRPcmllbnRhdGlvblNpZGV3YXlzUmlnaHQ6CisgICAgICAgIGZvbnRPcmll
bnRhdGlvbiA9IEhvcml6b250YWw7CisgICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25DSktH
bHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodDsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBmb250T3JpZW50YXRp
b24gPSBIb3Jpem9udGFsOworICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5cGhP
cmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK1Bh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRG9jdW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50LCBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKK3sKKyAgICBG
cmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKworICAgIC8vIEhUTUw1IHN0YXRlcyB0
aGF0IHNlYW1sZXNzIGlmcmFtZXMgc2hvdWxkIHJlcGxhY2UgZGVmYXVsdCBDU1MgdmFsdWVzCisg
ICAgLy8gd2l0aCB2YWx1ZXMgaW5oZXJpdGVkIGZyb20gdGhlIGNvbnRhaW5pbmcgaWZyYW1lIGVs
ZW1lbnQuIEhvd2V2ZXIsCisgICAgLy8gc29tZSB2YWx1ZXMgKHN1Y2ggYXMgdGhlIGNhc2Ugb2Yg
ZGVzaWduTW9kZSA9ICJvbiIpIHN0aWxsIG5lZWQgdG8KKyAgICAvLyBiZSBzZXQgYnkgdGhpcyAi
ZG9jdW1lbnQgc3R5bGUiLgorICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHlsZSA9
IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBib29sIHNlYW1sZXNzV2l0aFBhcmVudCA9IGRv
Y3VtZW50LT5zaG91bGREaXNwbGF5U2VhbWxlc3NseVdpdGhQYXJlbnQoKTsKKyAgICBpZiAoc2Vh
bWxlc3NXaXRoUGFyZW50KSB7CisgICAgICAgIFJlbmRlclN0eWxlKiBpZnJhbWVTdHlsZSA9IGRv
Y3VtZW50LT5zZWFtbGVzc1BhcmVudElGcmFtZSgpLT5yZW5kZXJTdHlsZSgpOworICAgICAgICBp
ZiAoaWZyYW1lU3R5bGUpCisgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5pbmhlcml0RnJvbShp
ZnJhbWVTdHlsZSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHdoaWNo
IHZhbHVlcyBiZWxvdyB3ZSB3YW50IHRvIG92ZXJyaWRlIGluIHRoZSBzZWFtbGVzcyBjYXNlIQor
ICAgIGRvY3VtZW50U3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOworICAgIGlmICghc2VhbWxlc3NX
aXRoUGFyZW50KSB7CisgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFJUTE9yZGVyaW5nKGRvY3Vt
ZW50LT52aXN1YWxseU9yZGVyZWQoKSA/IFZpc3VhbE9yZGVyIDogTG9naWNhbE9yZGVyKTsKKyAg
ICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0Wm9vbShmcmFtZSAmJiAhZG9jdW1lbnQtPnByaW50aW5n
KCkgPyBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKSA6IDEpOworICAgICAgICBkb2N1bWVudFN0eWxl
LT5zZXRQYWdlU2NhbGVUcmFuc2Zvcm0oZnJhbWUgPyBmcmFtZS0+ZnJhbWVTY2FsZUZhY3Rvcigp
IDogMSk7CisgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldExvY2FsZShkb2N1bWVudC0+Y29udGVu
dExhbmd1YWdlKCkpOworICAgIH0KKyAgICAvLyBUaGlzIG92ZXJyaWRlcyBhbnkgLXdlYmtpdC11
c2VyLW1vZGlmeSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IGlmcmFtZS4KKyAgICBkb2N1bWVu
dFN0eWxlLT5zZXRVc2VyTW9kaWZ5KGRvY3VtZW50LT5pbkRlc2lnbk1vZGUoKSA/IFJFQURfV1JJ
VEUgOiBSRUFEX09OTFkpOworCisgICAgRWxlbWVudCogZG9jRWxlbWVudCA9IGRvY3VtZW50LT5k
b2N1bWVudEVsZW1lbnQoKTsKKyAgICBSZW5kZXJPYmplY3QqIGRvY0VsZW1lbnRSZW5kZXJlciA9
IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJlcigpIDogMDsKKyAgICBpZiAoZG9jRWxl
bWVudFJlbmRlcmVyKSB7CisgICAgICAgIC8vIFVzZSB0aGUgZGlyZWN0aW9uIGFuZCB3cml0aW5n
LW1vZGUgb2YgdGhlIGJvZHkgdG8gc2V0IHRoZQorICAgICAgICAvLyB2aWV3cG9ydCdzIGRpcmVj
dGlvbiBhbmQgd3JpdGluZy1tb2RlIHVubGVzcyB0aGUgcHJvcGVydHkgaXMgc2V0IG9uIHRoZSBk
b2N1bWVudCBlbGVtZW50LgorICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBib2R5LCB0aGVuIHVz
ZSB0aGUgZG9jdW1lbnQgZWxlbWVudC4KKyAgICAgICAgUmVuZGVyT2JqZWN0KiBib2R5UmVuZGVy
ZXIgPSBkb2N1bWVudC0+Ym9keSgpID8gZG9jdW1lbnQtPmJvZHkoKS0+cmVuZGVyZXIoKSA6IDA7
CisgICAgICAgIGlmIChib2R5UmVuZGVyZXIgJiYgIWRvY3VtZW50LT53cml0aW5nTW9kZVNldE9u
RG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRXcml0aW5n
TW9kZShib2R5UmVuZGVyZXItPnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRXcml0aW5nTW9kZShkb2NFbGVtZW50UmVu
ZGVyZXItPnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOworICAgICAgICBpZiAoYm9keVJlbmRlcmVy
ICYmICFkb2N1bWVudC0+ZGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAg
ICAgIGRvY3VtZW50U3R5bGUtPnNldERpcmVjdGlvbihib2R5UmVuZGVyZXItPnN0eWxlKCktPmRp
cmVjdGlvbigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0
RGlyZWN0aW9uKGRvY0VsZW1lbnRSZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpOworICAg
IH0KKworICAgIGlmIChmcmFtZSkgeworICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBmcmFtZS0+dmlldygpKSB7CisgICAgICAgICAgICBjb25zdCBQYWdpbmF0aW9uJiBwYWdpbmF0
aW9uID0gZnJhbWVWaWV3LT5wYWdpbmF0aW9uKCk7CisgICAgICAgICAgICBpZiAocGFnaW5hdGlv
bi5tb2RlICE9IFBhZ2luYXRpb246OlVucGFnaW5hdGVkKSB7CisgICAgICAgICAgICAgICAgZG9j
dW1lbnRTdHlsZS0+c2V0Q29sdW1uU3R5bGVzRnJvbVBhZ2luYXRpb25Nb2RlKHBhZ2luYXRpb24u
bW9kZSk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0Q29sdW1uR2FwKHBhZ2lu
YXRpb24uZ2FwKTsKKyAgICAgICAgICAgICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGRvY3Vt
ZW50LT5yZW5kZXJWaWV3KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXctPmhhc0Nv
bHVtbnMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpZXctPnVwZGF0ZUNvbHVtbkluZm9G
cm9tU3R5bGUoZG9jdW1lbnRTdHlsZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gU2VhbWxlc3MgaWZyYW1lcyB3YW50
IHRvIGluaGVyaXQgdGhlaXIgZm9udCBmcm9tIHRoZWlyIHBhcmVudCBpZnJhbWUsIHNvIGVhcmx5
IHJldHVybiBiZWZvcmUgc2V0dGluZyB0aGUgZm9udC4KKyAgICBpZiAoc2VhbWxlc3NXaXRoUGFy
ZW50KQorICAgICAgICByZXR1cm4gZG9jdW1lbnRTdHlsZS5yZWxlYXNlKCk7CisKKyAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3Jp
cHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihkb2N1bWVudFN0eWxlLT5sb2Nh
bGUoKSkpOworICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3Mo
KSkgeworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQt
PnByaW50aW5nKCkgfHwgIXNldHRpbmdzLT5zY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZCgp
KTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZv
bnRSZW5kZXJpbmdNb2RlKCkpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0YW5kYXJk
Rm9udCA9IHNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoZm9udERlc2NyaXB0aW9uLnNjcmlw
dCgpKTsKKyAgICAgICAgaWYgKCFzdGFuZGFyZEZvbnQuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlN0YW5k
YXJkRmFtaWx5KTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoc3Rh
bmRhcmRGb250KTsKKyAgICAgICAgfQorICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29y
ZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKKyAgICAgICAgaW50
IHNpemUgPSBTdHlsZVJlc29sdmVyOjpmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQsIENTU1Zh
bHVlTWVkaXVtLCBmYWxzZSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRT
aXplKHNpemUpOworICAgICAgICBib29sIHVzZVNWR1pvb21SdWxlcyA9IGRvY3VtZW50LT5pc1NW
R0RvY3VtZW50KCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5
bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQsIGRv
Y3VtZW50U3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXpl
LCB1c2VTVkdab29tUnVsZXMpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldFVzZVByaW50ZXJGb250KGRvY3VtZW50LT5wcmludGluZygpKTsKKworICAgIEZvbnRPcmll
bnRhdGlvbiBmb250T3JpZW50YXRpb247CisgICAgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBnbHlw
aE9yaWVudGF0aW9uOworICAgIGdldEZvbnRBbmRHbHlwaE9yaWVudGF0aW9uKGRvY3VtZW50U3R5
bGUuZ2V0KCksIGZvbnRPcmllbnRhdGlvbiwgZ2x5cGhPcmllbnRhdGlvbik7CisgICAgZm9udERl
c2NyaXB0aW9uLnNldE9yaWVudGF0aW9uKGZvbnRPcmllbnRhdGlvbik7CisgICAgZm9udERlc2Ny
aXB0aW9uLnNldE5vbkNKS0dseXBoT3JpZW50YXRpb24oZ2x5cGhPcmllbnRhdGlvbik7CisKKyAg
ICBkb2N1bWVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAg
ICBkb2N1bWVudFN0eWxlLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7CisKKyAgICByZXR1
cm4gZG9jdW1lbnRTdHlsZS5yZWxlYXNlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0F0
U2hhZG93Qm91bmRhcnkoY29uc3QgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAoIWVsZW1l
bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2Rl
ID0gZWxlbWVudC0+cGFyZW50Tm9kZSgpOworICAgIHJldHVybiBwYXJlbnROb2RlICYmIHBhcmVu
dE5vZGUtPmlzU2hhZG93Um9vdCgpOworfQorCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHls
ZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyU3R5bGUq
IGRlZmF1bHRQYXJlbnQsCisgICAgU3R5bGVTaGFyaW5nQmVoYXZpb3Igc2hhcmluZ0JlaGF2aW9y
LCBSdWxlTWF0Y2hpbmdCZWhhdmlvciBtYXRjaGluZ0JlaGF2aW9yLCBSZW5kZXJSZWdpb24qIHJl
Z2lvbkZvclN0eWxpbmcpCit7CisgICAgLy8gT25jZSBhbiBlbGVtZW50IGhhcyBhIHJlbmRlcmVy
LCB3ZSBkb24ndCB0cnkgdG8gZGVzdHJveSBpdCwgc2luY2Ugb3RoZXJ3aXNlIHRoZSByZW5kZXJl
cgorICAgIC8vIHdpbGwgdmFuaXNoIGlmIGEgc3R5bGUgcmVjYWxjIGhhcHBlbnMgZHVyaW5nIGxv
YWRpbmcuCisgICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBBbGxvd1N0eWxlU2hhcmluZyAmJiAh
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkgJiYgIWVsZW1lbnQt
PnJlbmRlcmVyKCkpIHsKKyAgICAgICAgaWYgKCFzX3N0eWxlTm90WWV0QXZhaWxhYmxlKSB7Cisg
ICAgICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgp
LmxlYWtSZWYoKTsKKyAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUtPnNldERpc3Bs
YXkoTk9ORSk7CisgICAgICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlLT5mb250KCkudXBk
YXRlKG1fZm9udFNlbGVjdG9yKTsKKyAgICAgICAgfQorICAgICAgICBlbGVtZW50LT5kb2N1bWVu
dCgpLT5zZXRIYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlKCk7CisgICAgICAgIHJldHVybiBz
X3N0eWxlTm90WWV0QXZhaWxhYmxlOworICAgIH0KKworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3Rh
dGU7CisgICAgaW5pdEVsZW1lbnQoZWxlbWVudCk7CisgICAgc3RhdGUuaW5pdEZvclN0eWxlUmVz
b2x2ZShkb2N1bWVudCgpLCBlbGVtZW50LCBkZWZhdWx0UGFyZW50LCByZWdpb25Gb3JTdHlsaW5n
KTsKKyAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5bGVTaGFyaW5nICYmICFzdGF0
ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoKSkgeworICAgICAgICBSZW5kZXJTdHlsZSog
c2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpOworICAgICAgICBpZiAoc2hhcmVkU3R5
bGUpIHsKKyAgICAgICAgICAgIHN0YXRlLmNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm4gc2hh
cmVkU3R5bGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3RhdGUucGFyZW50U3R5bGUo
KSkgeworICAgICAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShzdGF0ZS5wYXJlbnRTdHlsZSgpLCBpc0F0
U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJTdHlsZTo6QXRTaGFkb3dCb3VuZGFyeSA6
IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBzdGF0ZS5zZXRTdHlsZShkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCkpOworICAgICAgICBzdGF0
ZS5zZXRQYXJlbnRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmUoc3RhdGUuc3R5bGUoKSkpOworICAg
IH0KKyAgICAvLyBjb250ZW50ZWRpdGFibGUgYXR0cmlidXRlIChpbXBsZW1lbnRlZCBieSAtd2Vi
a2l0LXVzZXItbW9kaWZ5KSBzaG91bGQKKyAgICAvLyBiZSBwcm9wYWdhdGVkIGZyb20gc2hhZG93
IGhvc3QgdG8gZGlzdHJpYnV0ZWQgbm9kZS4KKyAgICBpZiAoc3RhdGUuZGlzdHJpYnV0ZWRUb0lu
c2VydGlvblBvaW50KCkpIHsKKyAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudCA9IGVsZW1lbnQt
PnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKFJlbmRlclN0eWxlKiBzdHlsZU9m
U2hhZG93SG9zdCA9IHBhcmVudC0+cmVuZGVyU3R5bGUoKSkKKyAgICAgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRVc2VyTW9kaWZ5KHN0eWxlT2ZTaGFkb3dIb3N0LT51c2VyTW9kaWZ5KCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKSB7CisgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldElzTGluayh0cnVlKTsKKyAgICAgICAgRUluc2lkZUxpbmsg
bGlua1N0YXRlID0gc3RhdGUuZWxlbWVudExpbmtTdGF0ZSgpOworICAgICAgICBpZiAobGlua1N0
YXRlICE9IE5vdEluc2lkZUxpbmspIHsKKyAgICAgICAgICAgIGJvb2wgZm9yY2VWaXNpdGVkID0g
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGVsZW1lbnQsIENTU1Nl
bGVjdG9yOjpQc2V1ZG9WaXNpdGVkKTsKKyAgICAgICAgICAgIGlmIChmb3JjZVZpc2l0ZWQpCisg
ICAgICAgICAgICAgICAgbGlua1N0YXRlID0gSW5zaWRlVmlzaXRlZExpbms7CisgICAgICAgIH0K
KyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdGUpOworICAgIH0K
KworICAgIGJvb2wgbmVlZHNDb2xsZWN0aW9uID0gZmFsc2U7CisgICAgQ1NTRGVmYXVsdFN0eWxl
U2hlZXRzOjplbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVtZW50KGVsZW1lbnQsIG5lZWRz
Q29sbGVjdGlvbik7CisgICAgaWYgKG5lZWRzQ29sbGVjdGlvbikKKyAgICAgICAgbV9ydWxlU2V0
cy5jb2xsZWN0RmVhdHVyZXMoZG9jdW1lbnQoKS0+aXNWaWV3U291cmNlKCksIG1fc2NvcGVSZXNv
bHZlci5nZXQoKSk7CisKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IodGhpcywg
c3RhdGUpOworICAgIGNvbGxlY3Rvci5zZXRSZWdpb25Gb3JTdHlsaW5nKHJlZ2lvbkZvclN0eWxp
bmcpOworICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0obV9tZWRpdW0uZ2V0KCkpOworCisgICAgaWYg
KG1hdGNoaW5nQmVoYXZpb3IgPT0gTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpCisgICAgICAgIGNv
bGxlY3Rvci5tYXRjaFVBUnVsZXMoKTsKKyAgICBlbHNlCisgICAgICAgIGNvbGxlY3Rvci5tYXRj
aEFsbFJ1bGVzKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzLCBtYXRjaGluZ0JlaGF2aW9yICE9
IE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdTTUlMKTsKKworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXMoY29sbGVjdG9yLm1hdGNoZWRSZXN1bHQoKSwgZWxlbWVudCk7CisKKyAgICAvLyBDbGVhbiB1
cCBvdXIgc3R5bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcg
b3RoZXIgZml4dXBzKS4KKyAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZS5zdHlsZSgpLCBzdGF0
ZS5wYXJlbnRTdHlsZSgpLCBlbGVtZW50KTsKKworICAgIHN0YXRlLmNsZWFyKCk7IC8vIENsZWFy
IG91dCBmb3IgdGhlIG5leHQgcmVzb2x2ZS4KKworICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0
eWxlUmVzb2x2ZXIoKTsKKworICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgorICAgIHJldHVy
biBzdGF0ZS50YWtlU3R5bGUoKTsKK30KKworUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVS
ZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxl
LCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwgS2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVW
YWx1ZSkKK3sKKyAgICBNYXRjaFJlc3VsdCByZXN1bHQ7CisgICAgaWYgKGtleWZyYW1lLT5wcm9w
ZXJ0aWVzKCkpCisgICAgICAgIHJlc3VsdC5hZGRNYXRjaGVkUHJvcGVydGllcyhrZXlmcmFtZS0+
cHJvcGVydGllcygpKTsKKworICAgIEFTU0VSVCghbV9zdGF0ZS5zdHlsZSgpKTsKKworICAgIFN0
YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisKKyAgICAvLyBDcmVhdGUgdGhlIHN0eWxlCisgICAgc3Rh
dGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lKGVsZW1lbnRTdHlsZSkpOworICAgIHN0YXRl
LnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKKworICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gYm90aGVy
IHdpdGggIWltcG9ydGFudC4gU2luY2UgdGhlcmUgaXMgb25seSBldmVyIG9uZQorICAgIC8vIGRl
Y2wsIHRoZXJlJ3Mgbm90aGluZyB0byBvdmVycmlkZS4gU28ganVzdCBhZGQgdGhlIGZpcnN0IHBy
b3BlcnRpZXMuCisgICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7CisgICAgaWYgKGtleWZy
YW1lLT5wcm9wZXJ0aWVzKCkpCisgICAgICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFBy
aW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworCisgICAgLy8gSWYgb3VyIGZvbnQgZ290
IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgorICAgIHVwZGF0ZUZvbnQoKTsK
KworICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQg
b24gdGhlIGZvbnQtc2l6ZQorICAgIGlmIChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKKyAgICAg
ICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRW
YWx1ZSgpKTsKKworICAgIC8vIE5vdyBkbyByZXN0IG9mIHRoZSBwcm9wZXJ0aWVzLgorICAgIGlm
IChrZXlmcmFtZS0+cHJvcGVydGllcygpKQorICAgICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworCisgICAgLy8gSWYgb3VyIGZv
bnQgZ290IGRpcnRpZWQgYnkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsCisg
ICAgLy8gZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBhIHNlY29uZCB0aW1lLgorICAgIHVwZGF0ZUZv
bnQoKTsKKworICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhp
cyBzdHlsZS4KKyAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOworICAgIAorICAgIC8vIEFkZCBh
bGwgdGhlIGFuaW1hdGluZyBwcm9wZXJ0aWVzIHRvIHRoZSBrZXlmcmFtZS4KKyAgICBpZiAoY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGVEZWNsYXJhdGlvbiA9IGtleWZyYW1lLT5wcm9wZXJ0
aWVzKCkpIHsKKyAgICAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHN0eWxlRGVjbGFyYXRp
b24tPnByb3BlcnR5Q291bnQoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBy
b3BlcnR5Q291bnQ7ICsraSkgeworICAgICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSA9
IHN0eWxlRGVjbGFyYXRpb24tPnByb3BlcnR5QXQoaSkuaWQoKTsKKyAgICAgICAgICAgIC8vIFRp
bWluZy1mdW5jdGlvbiB3aXRoaW4ga2V5ZnJhbWVzIGlzIHNwZWNpYWwsIGJlY2F1c2UgaXQgaXMg
bm90IGFuaW1hdGVkOyBpdCBqdXN0CisgICAgICAgICAgICAvLyBkZXNjcmliZXMgdGhlIHRpbWlu
ZyBmdW5jdGlvbiBiZXR3ZWVuIHRoaXMga2V5ZnJhbWUgYW5kIHRoZSBuZXh0LgorICAgICAgICAg
ICAgaWYgKHByb3BlcnR5ICE9IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rp
b24pCisgICAgICAgICAgICAgICAga2V5ZnJhbWVWYWx1ZS5hZGRQcm9wZXJ0eShwcm9wZXJ0eSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29s
dmVyKCk7CisKKyAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7Cit9CisKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgS2V5ZnJhbWVMaXN0JiBsaXN0KQoreworICAgIGxpc3Qu
Y2xlYXIoKTsKKworICAgIC8vIEdldCB0aGUga2V5ZnJhbWVzUnVsZSBmb3IgdGhpcyBuYW1lCisg
ICAgaWYgKCFlIHx8IGxpc3QuYW5pbWF0aW9uTmFtZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9rZXlmcmFtZXNSdWxlTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKworICAg
IEtleWZyYW1lc1J1bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXNSdWxlTWFwLmZpbmQo
bGlzdC5hbmltYXRpb25OYW1lKCkuaW1wbCgpKTsKKyAgICBpZiAoaXQgPT0gbV9rZXlmcmFtZXNS
dWxlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBTdHlsZVJ1bGVLZXlm
cmFtZXMqIGtleWZyYW1lc1J1bGUgPSBpdC0+dmFsdWUuZ2V0KCk7CisKKyAgICAvLyBDb25zdHJ1
Y3QgYW5kIHBvcHVsYXRlIHRoZSBzdHlsZSBmb3IgZWFjaCBrZXlmcmFtZQorICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U3R5bGVLZXlmcmFtZT4gPiYga2V5ZnJhbWVzID0ga2V5ZnJhbWVzUnVsZS0+
a2V5ZnJhbWVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXpl
KCk7ICsraSkgeworICAgICAgICAvLyBBcHBseSB0aGUgZGVjbGFyYXRpb24gdG8gdGhlIHN0eWxl
LiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRoZSBsb2dpYyBpbiBzdHlsZUZvckVs
ZW1lbnQKKyAgICAgICAgaW5pdEVsZW1lbnQoZSk7CisgICAgICAgIG1fc3RhdGUuaW5pdEZvclN0
eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlKTsKKworICAgICAgICBjb25zdCBTdHlsZUtleWZyYW1l
KiBrZXlmcmFtZSA9IGtleWZyYW1lc1tpXS5nZXQoKTsKKworICAgICAgICBLZXlmcmFtZVZhbHVl
IGtleWZyYW1lVmFsdWUoMCwgMCk7CisgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5
bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIGtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CisK
KyAgICAgICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgc3R5bGUgdG8gYWxsIHRoZSBpbmRpY2F0ZWQg
a2V5IHRpbWVzCisgICAgICAgIFZlY3RvcjxmbG9hdD4ga2V5czsKKyAgICAgICAga2V5ZnJhbWUt
PmdldEtleXMoa2V5cyk7CisgICAgICAgIGZvciAoc2l6ZV90IGtleUluZGV4ID0gMDsga2V5SW5k
ZXggPCBrZXlzLnNpemUoKTsgKytrZXlJbmRleCkgeworICAgICAgICAgICAga2V5ZnJhbWVWYWx1
ZS5zZXRLZXkoa2V5c1trZXlJbmRleF0pOworICAgICAgICAgICAgbGlzdC5pbnNlcnQoa2V5ZnJh
bWVWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB0aGUgMCUga2V5ZnJhbWUg
aXMgbWlzc2luZywgY3JlYXRlIGl0IChidXQgb25seSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUg
b3RoZXIga2V5ZnJhbWUpCisgICAgaW50IGluaXRpYWxMaXN0U2l6ZSA9IGxpc3Quc2l6ZSgpOwor
ICAgIGlmIChpbml0aWFsTGlzdFNpemUgPiAwICYmIGxpc3RbMF0ua2V5KCkpIHsKKyAgICAgICAg
c3RhdGljIFN0eWxlS2V5ZnJhbWUqIHplcm9QZXJjZW50S2V5ZnJhbWU7CisgICAgICAgIGlmICgh
emVyb1BlcmNlbnRLZXlmcmFtZSkgeworICAgICAgICAgICAgemVyb1BlcmNlbnRLZXlmcmFtZSA9
IFN0eWxlS2V5ZnJhbWU6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKKyAgICAgICAgICAgIHplcm9QZXJj
ZW50S2V5ZnJhbWUtPnNldEtleVRleHQoIjAlIik7CisgICAgICAgIH0KKyAgICAgICAgS2V5ZnJh
bWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDAsIDApOworICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0
eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCB6ZXJvUGVyY2VudEtleWZyYW1lLCBr
ZXlmcmFtZVZhbHVlKSk7CisgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOworICAg
IH0KKworICAgIC8vIElmIHRoZSAxMDAlIGtleWZyYW1lIGlzIG1pc3NpbmcsIGNyZWF0ZSBpdCAo
YnV0IG9ubHkgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG90aGVyIGtleWZyYW1lKQorICAgIGlm
IChpbml0aWFsTGlzdFNpemUgPiAwICYmIChsaXN0W2xpc3Quc2l6ZSgpIC0gMV0ua2V5KCkgIT0g
MSkpIHsKKyAgICAgICAgc3RhdGljIFN0eWxlS2V5ZnJhbWUqIGh1bmRyZWRQZXJjZW50S2V5ZnJh
bWU7CisgICAgICAgIGlmICghaHVuZHJlZFBlcmNlbnRLZXlmcmFtZSkgeworICAgICAgICAgICAg
aHVuZHJlZFBlcmNlbnRLZXlmcmFtZSA9IFN0eWxlS2V5ZnJhbWU6OmNyZWF0ZSgpLmxlYWtSZWYo
KTsKKyAgICAgICAgICAgIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUtPnNldEtleVRleHQoIjEwMCUi
KTsKKyAgICAgICAgfQorICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUoMSwgMCk7
CisgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50
U3R5bGUsIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAgICAgICAg
bGlzdC5pbnNlcnQoa2V5ZnJhbWVWYWx1ZSk7CisgICAgfQorfQorCitQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZSwg
Y29uc3QgUHNldWRvU3R5bGVSZXF1ZXN0JiBwc2V1ZG9TdHlsZVJlcXVlc3QsIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSkKK3sKKyAgICBBU1NFUlQocGFyZW50U3R5bGUpOworICAgIGlmICghZSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworCisgICAg
aW5pdEVsZW1lbnQoZSk7CisKKyAgICBzdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50
KCksIGUsIHBhcmVudFN0eWxlKTsKKworICAgIGlmIChtX3N0YXRlLnBhcmVudFN0eWxlKCkpIHsK
KyAgICAgICAgc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKKyAgICAgICAg
c3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20obV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBzdGF0ZS5zZXRTdHlsZShkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCkp
OworICAgICAgICBzdGF0ZS5zZXRQYXJlbnRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmUoc3RhdGUu
c3R5bGUoKSkpOworICAgIH0KKworICAgIC8vIFNpbmNlIHdlIGRvbid0IHVzZSBwc2V1ZG8tZWxl
bWVudHMgaW4gYW55IG9mIG91ciBxdWlyay9wcmludCB1c2VyIGFnZW50IHJ1bGVzLCBkb24ndCB3
YXN0ZSB0aW1lIHdhbGtpbmcKKyAgICAvLyB0aG9zZSBydWxlcy4KKworICAgIC8vIENoZWNrIFVB
LCB1c2VyIGFuZCBhdXRob3IgcnVsZXMuCisgICAgRWxlbWVudFJ1bGVDb2xsZWN0b3IgY29sbGVj
dG9yKHRoaXMsIHN0YXRlKTsKKyAgICBjb2xsZWN0b3Iuc2V0UHNldWRvU3R5bGVSZXF1ZXN0KHBz
ZXVkb1N0eWxlUmVxdWVzdCk7CisgICAgY29sbGVjdG9yLnNldE1lZGl1bShtX21lZGl1bS5nZXQo
KSk7CisgICAgY29sbGVjdG9yLm1hdGNoVUFSdWxlcygpOworCisgICAgaWYgKG1fbWF0Y2hBdXRo
b3JBbmRVc2VyU3R5bGVzKSB7CisgICAgICAgIGNvbGxlY3Rvci5tYXRjaFVzZXJSdWxlcyhmYWxz
ZSk7CisgICAgICAgIGNvbGxlY3Rvci5tYXRjaEF1dGhvclJ1bGVzKGZhbHNlKTsKKyAgICB9CisK
KyAgICBpZiAoY29sbGVjdG9yLm1hdGNoZWRSZXN1bHQoKS5tYXRjaGVkUHJvcGVydGllcy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgc3RhdGUuc3R5bGUoKS0+c2V0U3R5bGVU
eXBlKHBzZXVkb1N0eWxlUmVxdWVzdC5wc2V1ZG9JZCk7CisKKyAgICBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzKGNvbGxlY3Rvci5tYXRjaGVkUmVzdWx0KCksIGUpOworCisgICAgLy8gQ2xlYW4gdXAg
b3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90
aGVyIGZpeHVwcykuCisgICAgYWRqdXN0UmVuZGVyU3R5bGUoc3RhdGUuc3R5bGUoKSwgbV9zdGF0
ZS5wYXJlbnRTdHlsZSgpLCAwKTsKKworICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJl
ZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KKyAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOworCisg
ICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOworCisgICAgLy8gTm93IHJl
dHVybiB0aGUgc3R5bGUuCisgICAgcmV0dXJuIHN0YXRlLnRha2VTdHlsZSgpOworfQorCitQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJ
bmRleCkKK3sKKyAgICBtX3N0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZG9j
dW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpOyAvLyBtX3Jvb3RFbGVtZW50U3R5bGUgd2lsbCBi
ZSBzZXQgdG8gdGhlIGRvY3VtZW50IHN0eWxlLgorCisgICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5k
ZXJTdHlsZTo6Y3JlYXRlKCkpOworICAgIG1fc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZyb20obV9z
dGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOworCisgICAgUGFnZVJ1bGVDb2xsZWN0b3IgY29sbGVj
dG9yKG1fc3RhdGUsIG1fcnVsZVNldHMpOworICAgIGNvbGxlY3Rvci5tYXRjaEFsbFBhZ2VSdWxl
cyhwYWdlSW5kZXgpOworICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOworICAgIGJv
b2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOworCisgICAgTWF0Y2hSZXN1bHQmIHJlc3VsdCA9IGNv
bGxlY3Rvci5tYXRjaGVkUmVzdWx0KCk7CisjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCisgICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihyZXN1bHQsIGZhbHNl
LCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7
CisjZW5kaWYKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRp
ZXM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAx
LCBpbmhlcml0ZWRPbmx5KTsKKworICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBh
aGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KKyAgICB1cGRhdGVGb250KCk7CisKKyAgICAvLyBMaW5l
LWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNp
emUuCisgICAgaWYgKG1fc3RhdGUubGluZUhlaWdodFZhbHVlKCkpCisgICAgICAgIGFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX3N0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKTsK
KworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1
bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJp
dGVkT25seSk7CisKKyAgICAvLyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5
IHRoaXMgc3R5bGUuCisgICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKKworICAgIGRvY3VtZW50
KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKKworICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0
eWxlLgorICAgIHJldHVybiBtX3N0YXRlLnRha2VTdHlsZSgpOworfQorCitQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpkZWZhdWx0U3R5bGVGb3JFbGVtZW50KCkKK3sKKyAg
ICBtX3N0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7CisgICAgLy8gTWFrZSBz
dXJlIG91ciBmb250cyBhcmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZy
b20gb3VyIHBhcmVudCBzdHlsZS4KKyAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1l
bnRTZXR0aW5ncygpKSB7CisgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwor
ICAgICAgICBtX3N0YXRlLnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwor
ICAgIH0gZWxzZQorICAgICAgICBtX3N0YXRlLnN0eWxlKCktPmZvbnQoKS51cGRhdGUoMCk7CisK
KyAgICByZXR1cm4gbV9zdGF0ZS50YWtlU3R5bGUoKTsKK30KKworc3RhdGljIHZvaWQgYWRkSW50
cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSogc3R5bGUpCit7CisgICAgLy8gSW50cmluc2ljIG1h
cmdpbiB2YWx1ZS4KKyAgICBjb25zdCBpbnQgaW50cmluc2ljTWFyZ2luID0gMiAqIHN0eWxlLT5l
ZmZlY3RpdmVab29tKCk7CisKKyAgICAvLyBGSVhNRTogVXNpbmcgd2lkdGgvaGVpZ2h0IGFsb25l
IGFuZCBub3QgYWxzbyBkZWFsaW5nIHdpdGggbWluLXdpZHRoL21heC13aWR0aCBpcyBmbGF3ZWQu
CisgICAgLy8gRklYTUU6IFVzaW5nICJxdWlyayIgdG8gZGVjaWRlIHRoZSBtYXJnaW4gd2Fzbid0
IHNldCBpcyBraW5kIG9mIGxhbWUuCisgICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2lj
T3JBdXRvKCkpIHsKKyAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5MZWZ0KCkucXVpcmsoKSkKKyAg
ICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5MZWZ0KExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZp
eGVkKSk7CisgICAgICAgIGlmIChzdHlsZS0+bWFyZ2luUmlnaHQoKS5xdWlyaygpKQorICAgICAg
ICAgICAgc3R5bGUtPnNldE1hcmdpblJpZ2h0KExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVk
KSk7CisgICAgfQorCisgICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkgeworICAgICAg
ICBpZiAoc3R5bGUtPm1hcmdpblRvcCgpLnF1aXJrKCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0
TWFyZ2luVG9wKExlbmd0aChpbnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7CisgICAgICAgIGlmIChz
dHlsZS0+bWFyZ2luQm90dG9tKCkucXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJn
aW5Cb3R0b20oTGVuZ3RoKGludHJpbnNpY01hcmdpbiwgRml4ZWQpKTsKKyAgICB9Cit9CisKK3N0
YXRpYyBFRGlzcGxheSBlcXVpdmFsZW50QmxvY2tEaXNwbGF5KEVEaXNwbGF5IGRpc3BsYXksIGJv
b2wgaXNGbG9hdGluZywgYm9vbCBzdHJpY3RQYXJzaW5nKQoreworICAgIHN3aXRjaCAoZGlzcGxh
eSkgeworICAgIGNhc2UgQkxPQ0s6CisgICAgY2FzZSBUQUJMRToKKyAgICBjYXNlIEJPWDoKKyAg
ICBjYXNlIEZMRVg6CisgICAgY2FzZSBHUklEOgorICAgICAgICByZXR1cm4gZGlzcGxheTsKKwor
ICAgIGNhc2UgTElTVF9JVEVNOgorICAgICAgICAvLyBJdCBpcyBhIFdpbklFIGJ1ZyB0aGF0IGZs
b2F0ZWQgbGlzdCBpdGVtcyBsb3NlIHRoZWlyIGJ1bGxldHMsIHNvIHdlJ2xsIGVtdWxhdGUgdGhl
IHF1aXJrLCBidXQgb25seSBpbiBxdWlya3MgbW9kZS4KKyAgICAgICAgaWYgKCFzdHJpY3RQYXJz
aW5nICYmIGlzRmxvYXRpbmcpCisgICAgICAgICAgICByZXR1cm4gQkxPQ0s7CisgICAgICAgIHJl
dHVybiBkaXNwbGF5OworICAgIGNhc2UgSU5MSU5FX1RBQkxFOgorICAgICAgICByZXR1cm4gVEFC
TEU7CisgICAgY2FzZSBJTkxJTkVfQk9YOgorICAgICAgICByZXR1cm4gQk9YOworICAgIGNhc2Ug
SU5MSU5FX0ZMRVg6CisgICAgICAgIHJldHVybiBGTEVYOworICAgIGNhc2UgSU5MSU5FX0dSSUQ6
CisgICAgICAgIHJldHVybiBHUklEOworCisgICAgY2FzZSBJTkxJTkU6CisgICAgY2FzZSBSVU5f
SU46CisgICAgY2FzZSBDT01QQUNUOgorICAgIGNhc2UgSU5MSU5FX0JMT0NLOgorICAgIGNhc2Ug
VEFCTEVfUk9XX0dST1VQOgorICAgIGNhc2UgVEFCTEVfSEVBREVSX0dST1VQOgorICAgIGNhc2Ug
VEFCTEVfRk9PVEVSX0dST1VQOgorICAgIGNhc2UgVEFCTEVfUk9XOgorICAgIGNhc2UgVEFCTEVf
Q09MVU1OX0dST1VQOgorICAgIGNhc2UgVEFCTEVfQ09MVU1OOgorICAgIGNhc2UgVEFCTEVfQ0VM
TDoKKyAgICBjYXNlIFRBQkxFX0NBUFRJT046CisgICAgICAgIHJldHVybiBCTE9DSzsKKyAgICBj
YXNlIE5PTkU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
Tk9ORTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEJMT0NL
OworfQorCisvLyBDU1MgcmVxdWlyZXMgdGV4dC1kZWNvcmF0aW9uIHRvIGJlIHJlc2V0IGF0IGVh
Y2ggRE9NIGVsZW1lbnQgZm9yIHRhYmxlcywgCisvLyBpbmxpbmUgYmxvY2tzLCBpbmxpbmUgdGFi
bGVzLCBydW4taW5zLCBzaGFkb3cgRE9NIGNyb3NzaW5ncywgZmxvYXRpbmcgZWxlbWVudHMsCisv
LyBhbmQgYWJzb2x1dGUgb3IgcmVsYXRpdmVseSBwb3NpdGlvbmVkIGVsZW1lbnRzLgorc3RhdGlj
IGJvb2wgZG9lc05vdEluaGVyaXRUZXh0RGVjb3JhdGlvbihSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGUpCit7CisgICAgcmV0dXJuIHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEUgfHwgc3R5
bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkVfVEFCTEUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBSVU5f
SU4KKyAgICAgICAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkVfQkxPQ0sgfHwgc3R5bGUt
PmRpc3BsYXkoKSA9PSBJTkxJTkVfQk9YIHx8IGlzQXRTaGFkb3dCb3VuZGFyeShlKQorICAgICAg
ICB8fCBzdHlsZS0+aXNGbG9hdGluZygpIHx8IHN0eWxlLT5oYXNPdXRPZkZsb3dQb3NpdGlvbigp
OworfQorCitzdGF0aWMgYm9vbCBpc0Rpc3BsYXlGbGV4aWJsZUJveChFRGlzcGxheSBkaXNwbGF5
KQoreworICAgIHJldHVybiBkaXNwbGF5ID09IEZMRVggfHwgZGlzcGxheSA9PSBJTkxJTkVfRkxF
WDsKK30KKworI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCitzdGF0
aWMgYm9vbCBpc1Njcm9sbGFibGVPdmVyZmxvdyhFT3ZlcmZsb3cgb3ZlcmZsb3cpCit7CisgICAg
cmV0dXJuIG92ZXJmbG93ID09IE9TQ1JPTEwgfHwgb3ZlcmZsb3cgPT0gT0FVVE8gfHwgb3ZlcmZs
b3cgPT0gT09WRVJMQVk7Cit9CisjZW5kaWYKKwordm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RS
ZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwg
RWxlbWVudCAqZSkKK3sKKyAgICBBU1NFUlQocGFyZW50U3R5bGUpOworCisgICAgLy8gQ2FjaGUg
b3VyIG9yaWdpbmFsIGRpc3BsYXkuCisgICAgc3R5bGUtPnNldE9yaWdpbmFsRGlzcGxheShzdHls
ZS0+ZGlzcGxheSgpKTsKKworICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpICE9IE5PTkUpIHsKKyAg
ICAgICAgLy8gSWYgd2UgaGF2ZSBhIDx0ZD4gdGhhdCBzcGVjaWZpZXMgYSBmbG9hdCBwcm9wZXJ0
eSwgaW4gcXVpcmtzIG1vZGUgd2UganVzdCBkcm9wIHRoZSBmbG9hdAorICAgICAgICAvLyBwcm9w
ZXJ0eS4KKyAgICAgICAgLy8gU2l0ZXMgYWxzbyBjb21tb25seSB1c2UgZGlzcGxheTppbmxpbmUv
YmxvY2sgb24gPHRkPnMgYW5kIDx0YWJsZT5zLiBJbiBxdWlya3MgbW9kZSB3ZSBmb3JjZQorICAg
ICAgICAvLyB0aGVzZSB0YWdzIHRvIHJldGFpbiB0aGVpciBkaXNwbGF5IHR5cGVzLgorICAgICAg
ICBpZiAoZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkgJiYgZSkgeworICAgICAgICAgICAgaWYg
KGUtPmhhc1RhZ05hbWUodGRUYWcpKSB7CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldERpc3Bs
YXkoVEFCTEVfQ0VMTCk7CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldEZsb2F0aW5nKE5vRmxv
YXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0hUTUxUYWJsZUVsZW1lbnQoZSkpCisgICAg
ICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoc3R5bGUtPmlzRGlzcGxheUlubGluZVR5cGUo
KSA/IElOTElORV9UQUJMRSA6IFRBQkxFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlICYm
IChlLT5oYXNUYWdOYW1lKHRkVGFnKSB8fCBlLT5oYXNUYWdOYW1lKHRoVGFnKSkpIHsKKyAgICAg
ICAgICAgIGlmIChzdHlsZS0+d2hpdGVTcGFjZSgpID09IEtIVE1MX05PV1JBUCkgeworICAgICAg
ICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgYXJlIHJlYWxseSBub3dyYXBwaW5nIG9yIGlm
IHdlIHNob3VsZCBqdXN0CisgICAgICAgICAgICAgICAgLy8gdXNlIG5vcm1hbCBpbnN0ZWFkLiBJ
ZiB0aGUgd2lkdGggb2YgdGhlIGNlbGwgaXMgZml4ZWQsIHRoZW4KKyAgICAgICAgICAgICAgICAv
LyB3ZSBkb24ndCBhY3R1YWxseSB1c2UgTk9XUkFQLgorICAgICAgICAgICAgICAgIGlmIChzdHls
ZS0+d2lkdGgoKS5pc0ZpeGVkKCkpCisgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRXaGl0
ZVNwYWNlKE5PUk1BTCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBzdHlsZS0+c2V0V2hpdGVTcGFjZShOT1dSQVApOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gVGFibGVzIG5ldmVyIHN1cHBvcnQgdGhlIC13ZWJraXQtKiB2YWx1ZXMg
Zm9yIHRleHQtYWxpZ24gYW5kIHdpbGwgcmVzZXQgYmFjayB0byB0aGUgZGVmYXVsdC4KKyAgICAg
ICAgaWYgKGUgJiYgaXNIVE1MVGFibGVFbGVtZW50KGUpICYmIChzdHlsZS0+dGV4dEFsaWduKCkg
PT0gV0VCS0lUX0xFRlQgfHwgc3R5bGUtPnRleHRBbGlnbigpID09IFdFQktJVF9DRU5URVIgfHwg
c3R5bGUtPnRleHRBbGlnbigpID09IFdFQktJVF9SSUdIVCkpCisgICAgICAgICAgICBzdHlsZS0+
c2V0VGV4dEFsaWduKFRBU1RBUlQpOworCisgICAgICAgIC8vIEZyYW1lcyBhbmQgZnJhbWVzZXRz
IG5ldmVyIGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZlIG9yIHBvc2l0aW9uOmFic29sdXRlLiBUaGlz
IGlzIG5lY2Vzc2FyeSB0bworICAgICAgICAvLyBmaXggYSBjcmFzaCB3aGVyZSBhIHNpdGUgdHJp
ZXMgdG8gcG9zaXRpb24gdGhlc2Ugb2JqZWN0cy4gVGhleSBhbHNvIG5ldmVyIGhvbm9yIGRpc3Bs
YXkuCisgICAgICAgIGlmIChlICYmIChlLT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBlLT5oYXNU
YWdOYW1lKGZyYW1lc2V0VGFnKSkpIHsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRQb3NpdGlvbihT
dGF0aWNQb3NpdGlvbik7CisgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBSdWJ5IHRleHQgZG9lcyBub3Qgc3VwcG9ydCBmbG9hdCBv
ciBwb3NpdGlvbi4gVGhpcyBtaWdodCBjaGFuZ2Ugd2l0aCBldm9sdXRpb24gb2YgdGhlIHNwZWNp
ZmljYXRpb24uCisgICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUocnRUYWcpKSB7CisgICAg
ICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oU3RhdGljUG9zaXRpb24pOworICAgICAgICAgICAg
c3R5bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZG4ndCBiZSBvdmVycmlkaW5nIHN0YXJ0Ly13ZWJraXQtYXV0byBsaWtlIHRo
aXMuIERvIGl0IGluIGh0bWwuY3NzIGluc3RlYWQuCisgICAgICAgIC8vIFRhYmxlIGhlYWRlcnMg
d2l0aCBhIHRleHQtYWxpZ24gb2YgLXdlYmtpdC1hdXRvIHdpbGwgY2hhbmdlIHRoZSB0ZXh0LWFs
aWduIHRvIGNlbnRlci4KKyAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZSh0aFRhZykgJiYg
c3R5bGUtPnRleHRBbGlnbigpID09IFRBU1RBUlQpCisgICAgICAgICAgICBzdHlsZS0+c2V0VGV4
dEFsaWduKENFTlRFUik7CisKKyAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZShsZWdlbmRU
YWcpKQorICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOworCisgICAgICAgIC8v
IEFic29sdXRlL2ZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMsIGZsb2F0aW5nIGVsZW1lbnRzIGFu
ZCB0aGUgZG9jdW1lbnQgZWxlbWVudCBuZWVkIGJsb2NrLWxpa2Ugb3V0c2lkZSBkaXNwbGF5Lgor
ICAgICAgICBpZiAoc3R5bGUtPmhhc091dE9mRmxvd1Bvc2l0aW9uKCkgfHwgc3R5bGUtPmlzRmxv
YXRpbmcoKSB8fCAoZSAmJiBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSBlKSkK
KyAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoc3R5
bGUtPmRpc3BsYXkoKSwgc3R5bGUtPmlzRmxvYXRpbmcoKSwgIWRvY3VtZW50KCktPmluUXVpcmtz
TW9kZSgpKSk7CisKKyAgICAgICAgLy8gRklYTUU6IERvbid0IHN1cHBvcnQgdGhpcyBtdXRhdGlv
biBmb3IgcHNldWRvIHN0eWxlcyBsaWtlIGZpcnN0LWxldHRlciBvciBmaXJzdC1saW5lLCBzaW5j
ZSBpdCdzIG5vdCBjb21wbGV0ZWx5CisgICAgICAgIC8vIGNsZWFyIGhvdyB0aGF0IHNob3VsZCB3
b3JrLgorICAgICAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkUgJiYgc3R5bGUtPnN0
eWxlVHlwZSgpID09IE5PUFNFVURPICYmIHN0eWxlLT53cml0aW5nTW9kZSgpICE9IHBhcmVudFN0
eWxlLT53cml0aW5nTW9kZSgpKQorICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoSU5MSU5F
X0JMT0NLKTsKKworICAgICAgICAvLyBBZnRlciBwZXJmb3JtaW5nIHRoZSBkaXNwbGF5IG11dGF0
aW9uLCBjaGVjayB0YWJsZSByb3dzLiBXZSBkbyBub3QgaG9ub3IgcG9zaXRpb246cmVsYXRpdmUg
b3IgcG9zaXRpb246c3RpY2t5IG9uCisgICAgICAgIC8vIHRhYmxlIHJvd3Mgb3IgY2VsbHMuIFRo
aXMgaGFzIGJlZW4gZXN0YWJsaXNoZWQgZm9yIHBvc2l0aW9uOnJlbGF0aXZlIGluIENTUzIuMSAo
YW5kIGNhdXNlZCBhIGNyYXNoIGluIGNvbnRhaW5pbmdCbG9jaygpCisgICAgICAgIC8vIG9uIHNv
bWUgc2l0ZXMpLgorICAgICAgICBpZiAoKHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfSEVBREVS
X0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XX0dST1VQCisgICAgICAgICAg
ICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0ZPT1RFUl9HUk9VUCB8fCBzdHlsZS0+ZGlz
cGxheSgpID09IFRBQkxFX1JPVykKKyAgICAgICAgICAgICYmIHN0eWxlLT5oYXNJbkZsb3dQb3Np
dGlvbigpKQorICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsK
KworICAgICAgICAvLyB3cml0aW5nLW1vZGUgZG9lcyBub3QgYXBwbHkgdG8gdGFibGUgcm93IGdy
b3VwcywgdGFibGUgY29sdW1uIGdyb3VwcywgdGFibGUgcm93cywgYW5kIHRhYmxlIGNvbHVtbnMu
CisgICAgICAgIC8vIEZJWE1FOiBUYWJsZSBjZWxscyBzaG91bGQgYmUgYWxsb3dlZCB0byBiZSBw
ZXJwZW5kaWN1bGFyIG9yIGZsaXBwZWQgd2l0aCByZXNwZWN0IHRvIHRoZSB0YWJsZSwgdGhvdWdo
LgorICAgICAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9DT0xVTU4gfHwgc3R5bGUt
PmRpc3BsYXkoKSA9PSBUQUJMRV9DT0xVTU5fR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBU
QUJMRV9GT09URVJfR1JPVVAKKyAgICAgICAgICAgIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFC
TEVfSEVBREVSX0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XIHx8IHN0eWxl
LT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XX0dST1VQCisgICAgICAgICAgICB8fCBzdHlsZS0+ZGlz
cGxheSgpID09IFRBQkxFX0NFTEwpCisgICAgICAgICAgICBzdHlsZS0+c2V0V3JpdGluZ01vZGUo
cGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkpOworCisgICAgICAgIC8vIEZJWE1FOiBTaW5jZSB3
ZSBkb24ndCBzdXBwb3J0IGJsb2NrLWZsb3cgb24gZmxleGlibGUgYm94ZXMgeWV0LCBkaXNhbGxv
dyBzZXR0aW5nCisgICAgICAgIC8vIG9mIGJsb2NrLWZsb3cgdG8gYW55dGhpbmcgb3RoZXIgdGhh
biBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY0MTggLSBGbGV4aWJsZSBib3ggc3VwcG9ydC4KKyAgICAg
ICAgaWYgKHN0eWxlLT53cml0aW5nTW9kZSgpICE9IFRvcFRvQm90dG9tV3JpdGluZ01vZGUgJiYg
KHN0eWxlLT5kaXNwbGF5KCkgPT0gQk9YIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JP
WCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0V3JpdGluZ01vZGUoVG9wVG9Cb3R0b21Xcml0aW5n
TW9kZSk7CisKKyAgICAgICAgaWYgKGlzRGlzcGxheUZsZXhpYmxlQm94KHBhcmVudFN0eWxlLT5k
aXNwbGF5KCkpKSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0RmxvYXRpbmcoTm9GbG9hdCk7Cisg
ICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxl
LT5kaXNwbGF5KCksIHN0eWxlLT5pc0Zsb2F0aW5nKCksICFkb2N1bWVudCgpLT5pblF1aXJrc01v
ZGUoKSkpOworICAgICAgICB9CisKKyNpZiBFTkFCTEUoRElBTE9HX0VMRU1FTlQpCisgICAgICAg
IC8vIFBlciB0aGUgc3BlYywgcG9zaXRpb24gJ3N0YXRpYycgYW5kICdyZWxhdGl2ZScgaW4gdGhl
IHRvcCBsYXllciBjb21wdXRlIHRvICdhYnNvbHV0ZScuCisgICAgICAgIGlmIChlICYmIGUtPmlz
SW5Ub3BMYXllcigpICYmIChzdHlsZS0+cG9zaXRpb24oKSA9PSBTdGF0aWNQb3NpdGlvbiB8fCBz
dHlsZS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uKSkgeworICAgICAgICAgICAgc3R5
bGUtPnNldFBvc2l0aW9uKEFic29sdXRlUG9zaXRpb24pOworICAgICAgICAgICAgc3R5bGUtPnNl
dERpc3BsYXkoQkxPQ0spOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBNYWtl
IHN1cmUgb3VyIHotaW5kZXggdmFsdWUgaXMgb25seSBhcHBsaWVkIGlmIHRoZSBvYmplY3QgaXMg
cG9zaXRpb25lZC4KKyAgICBpZiAoc3R5bGUtPnBvc2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24g
JiYgIWlzRGlzcGxheUZsZXhpYmxlQm94KHBhcmVudFN0eWxlLT5kaXNwbGF5KCkpKQorICAgICAg
ICBzdHlsZS0+c2V0SGFzQXV0b1pJbmRleCgpOworCisgICAgLy8gQXV0byB6LWluZGV4IGJlY29t
ZXMgMCBmb3IgdGhlIHJvb3QgZWxlbWVudCBhbmQgdHJhbnNwYXJlbnQgb2JqZWN0cy4gVGhpcyBw
cmV2ZW50cworICAgIC8vIGNhc2VzIHdoZXJlIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgYmxlbmRl
ZCBhcyBhIHNpbmdsZSB1bml0IGVuZCB1cCB3aXRoIGEgbm9uLXRyYW5zcGFyZW50CisgICAgLy8g
b2JqZWN0IHdlZGdlZCBpbiBiZXR3ZWVuIHRoZW0uIEF1dG8gei1pbmRleCBhbHNvIGJlY29tZXMg
MCBmb3Igb2JqZWN0cyB0aGF0IHNwZWNpZnkgdHJhbnNmb3Jtcy9tYXNrcy9yZWZsZWN0aW9ucy4K
KyAgICBpZiAoc3R5bGUtPmhhc0F1dG9aSW5kZXgoKSAmJiAoKGUgJiYgZS0+ZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCkgPT0gZSkKKyAgICAgICAgfHwgc3R5bGUtPm9wYWNpdHkoKSA8IDEu
MGYKKyAgICAgICAgfHwgc3R5bGUtPmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpCisgICAg
ICAgIHx8IHN0eWxlLT5oYXNNYXNrKCkKKyAgICAgICAgfHwgc3R5bGUtPmNsaXBQYXRoKCkKKyAg
ICAgICAgfHwgc3R5bGUtPmJveFJlZmxlY3QoKQorICAgICAgICB8fCBzdHlsZS0+aGFzRmlsdGVy
KCkKKyAgICAgICAgfHwgc3R5bGUtPmhhc0JsZW5kTW9kZSgpCisgICAgICAgIHx8IHN0eWxlLT5w
b3NpdGlvbigpID09IFN0aWNreVBvc2l0aW9uCisgICAgICAgIHx8IChzdHlsZS0+cG9zaXRpb24o
KSA9PSBGaXhlZFBvc2l0aW9uICYmIGUgJiYgZS0+ZG9jdW1lbnQoKS0+cGFnZSgpICYmIGUtPmRv
Y3VtZW50KCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+Zml4ZWRQb3NpdGlvbkNyZWF0ZXNTdGFja2lu
Z0NvbnRleHQoKSkKKyNpZiBFTkFCTEUoRElBTE9HX0VMRU1FTlQpCisgICAgICAgIHx8IChlICYm
IGUtPmlzSW5Ub3BMYXllcigpKQorI2VuZGlmCisgICAgICAgICkpCisgICAgICAgIHN0eWxlLT5z
ZXRaSW5kZXgoMCk7CisKKyAgICAvLyBUZXh0YXJlYSBjb25zaWRlcnMgb3ZlcmZsb3cgdmlzaWJs
ZSBhcyBhdXRvLgorICAgIGlmIChlICYmIGlzSFRNTFRleHRBcmVhRWxlbWVudChlKSkgeworICAg
ICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBPVklTSUJMRSA/
IE9BVVRPIDogc3R5bGUtPm92ZXJmbG93WCgpKTsKKyAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93
WShzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1ZJU0lCTEUgPyBPQVVUTyA6IHN0eWxlLT5vdmVyZmxv
d1koKSk7CisgICAgfQorCisgICAgaWYgKGRvZXNOb3RJbmhlcml0VGV4dERlY29yYXRpb24oc3R5
bGUsIGUpKQorICAgICAgICBzdHlsZS0+c2V0VGV4dERlY29yYXRpb25zSW5FZmZlY3Qoc3R5bGUt
PnRleHREZWNvcmF0aW9uKCkpOworICAgIGVsc2UKKyAgICAgICAgc3R5bGUtPmFkZFRvVGV4dERl
Y29yYXRpb25zSW5FZmZlY3Qoc3R5bGUtPnRleHREZWNvcmF0aW9uKCkpOworCisgICAgLy8gSWYg
ZWl0aGVyIG92ZXJmbG93IHZhbHVlIGlzIG5vdCB2aXNpYmxlLCBjaGFuZ2UgdG8gYXV0by4KKyAg
ICBpZiAoc3R5bGUtPm92ZXJmbG93WCgpID09IE9NQVJRVUVFICYmIHN0eWxlLT5vdmVyZmxvd1ko
KSAhPSBPTUFSUVVFRSkKKyAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPTUFSUVVFRSk7Cisg
ICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WSgpID09IE9NQVJRVUVFICYmIHN0eWxlLT5vdmVy
Zmxvd1goKSAhPSBPTUFSUVVFRSkKKyAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPTUFSUVVF
RSk7CisgICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93WCgpID09IE9WSVNJQkxFICYmIHN0eWxl
LT5vdmVyZmxvd1koKSAhPSBPVklTSUJMRSkgeworICAgICAgICAvLyBGSVhNRTogT25jZSB3ZSBp
bXBsZW1lbnQgcGFnaW5hdGlvbiBjb250cm9scywgb3ZlcmZsb3cteCBzaG91bGQgZGVmYXVsdCB0
byBoaWRkZW4KKyAgICAgICAgLy8gaWYgb3ZlcmZsb3cteSBpcyBzZXQgdG8gLXdlYmtpdC1wYWdl
ZC14IG9yIC13ZWJraXQtcGFnZS15LiBGb3Igbm93LCB3ZSdsbCBsZXQgaXQKKyAgICAgICAgLy8g
ZGVmYXVsdCB0byBhdXRvIHNvIHdlIGNhbiBhdCBsZWFzdCBzY3JvbGwgdGhyb3VnaCB0aGUgcGFn
ZXMuCisgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goT0FVVE8pOworICAgIH0gZWxzZSBpZiAo
c3R5bGUtPm92ZXJmbG93WSgpID09IE9WSVNJQkxFICYmIHN0eWxlLT5vdmVyZmxvd1goKSAhPSBP
VklTSUJMRSkKKyAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPQVVUTyk7CisKKyAgICAvLyBD
YWxsIHNldFN0eWxlc0ZvclBhZ2luYXRpb25Nb2RlKCkgaWYgYSBwYWdpbmF0aW9uIG1vZGUgaXMg
c2V0IGZvciBhbnkgbm9uLXJvb3QgZWxlbWVudHMuIElmIHRoZXNlCisgICAgLy8gc3R5bGVzIGFy
ZSBzcGVjaWZpZWQgb24gYSByb290IGVsZW1lbnQsIHRoZW4gdGhleSB3aWxsIGJlIGluY29ycG9y
YXRlZCBpbgorICAgIC8vIFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRG9jdW1lbnQoKS4KKyAgICBp
ZiAoKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPUEFHRURYIHx8IHN0eWxlLT5vdmVyZmxvd1koKSA9
PSBPUEFHRURZKSAmJiAhKGUgJiYgKGUtPmhhc1RhZ05hbWUoaHRtbFRhZykgfHwgZS0+aGFzVGFn
TmFtZShib2R5VGFnKSkpKQorICAgICAgICBzdHlsZS0+c2V0Q29sdW1uU3R5bGVzRnJvbVBhZ2lu
YXRpb25Nb2RlKFdlYkNvcmU6OnBhZ2luYXRpb25Nb2RlRm9yUmVuZGVyU3R5bGUoc3R5bGUpKTsK
KworICAgIC8vIFRhYmxlIHJvd3MsIHNlY3Rpb25zIGFuZCB0aGUgdGFibGUgaXRzZWxmIHdpbGwg
c3VwcG9ydCBvdmVyZmxvdzpoaWRkZW4gYW5kIHdpbGwgaWdub3JlIHNjcm9sbC9hdXRvLgorICAg
IC8vIEZJWE1FOiBFdmVudHVhbGx5IHRhYmxlIHNlY3Rpb25zIHdpbGwgc3VwcG9ydCBhdXRvIGFu
ZCBzY3JvbGwuCisgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEUgfHwgc3R5bGUtPmRp
c3BsYXkoKSA9PSBJTkxJTkVfVEFCTEUKKyAgICAgICAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBU
QUJMRV9ST1dfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1cpIHsKKyAgICAg
ICAgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSAhPSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dY
KCkgIT0gT0hJRERFTikKKyAgICAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goT1ZJU0lCTEUp
OworICAgICAgICBpZiAoc3R5bGUtPm92ZXJmbG93WSgpICE9IE9WSVNJQkxFICYmIHN0eWxlLT5v
dmVyZmxvd1koKSAhPSBPSElEREVOKQorICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShP
VklTSUJMRSk7CisgICAgfQorCisgICAgLy8gTWVudWxpc3RzIHNob3VsZCBoYXZlIHZpc2libGUg
b3ZlcmZsb3cKKyAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpIHsK
KyAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPVklTSUJMRSk7CisgICAgICAgIHN0eWxlLT5z
ZXRPdmVyZmxvd1koT1ZJU0lCTEUpOworICAgIH0KKworI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF9P
VkVSRkxPV19TQ1JPTExJTkcpCisgICAgLy8gVG91Y2ggb3ZlcmZsb3cgc2Nyb2xsaW5nIGNyZWF0
ZXMgYSBzdGFja2luZyBjb250ZXh0LgorICAgIGlmIChzdHlsZS0+aGFzQXV0b1pJbmRleCgpICYm
IHN0eWxlLT51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgJiYgKGlzU2Nyb2xsYWJsZU92ZXJm
bG93KHN0eWxlLT5vdmVyZmxvd1goKSkgfHwgaXNTY3JvbGxhYmxlT3ZlcmZsb3coc3R5bGUtPm92
ZXJmbG93WSgpKSkpCisgICAgICAgIHN0eWxlLT5zZXRaSW5kZXgoMCk7CisjZW5kaWYKKworICAg
IC8vIEN1bGwgb3V0IGFueSB1c2VsZXNzIGxheWVycyBhbmQgYWxzbyByZXBlYXQgcGF0dGVybnMg
aW50byBhZGRpdGlvbmFsIGxheWVycy4KKyAgICBzdHlsZS0+YWRqdXN0QmFja2dyb3VuZExheWVy
cygpOworICAgIHN0eWxlLT5hZGp1c3RNYXNrTGF5ZXJzKCk7CisKKyAgICAvLyBEbyB0aGUgc2Ft
ZSBmb3IgYW5pbWF0aW9ucyBhbmQgdHJhbnNpdGlvbnMuCisgICAgc3R5bGUtPmFkanVzdEFuaW1h
dGlvbnMoKTsKKyAgICBzdHlsZS0+YWRqdXN0VHJhbnNpdGlvbnMoKTsKKworICAgIC8vIEltcG9y
dGFudDogSW50cmluc2ljIG1hcmdpbnMgZ2V0IGFkZGVkIHRvIGNvbnRyb2xzIGJlZm9yZSB0aGUg
dGhlbWUgaGFzIGFkanVzdGVkIHRoZSBzdHlsZSwgc2luY2UgdGhlIHRoZW1lIHdpbGwKKyAgICAv
LyBhbHRlciBmb250cyBhbmQgaGVpZ2h0cy93aWR0aHMuCisgICAgaWYgKGUgJiYgZS0+aXNGb3Jt
Q29udHJvbEVsZW1lbnQoKSAmJiBzdHlsZS0+Zm9udFNpemUoKSA+PSAxMSkgeworICAgICAgICAv
LyBEb24ndCBhcHBseSBpbnRyaW5zaWMgbWFyZ2lucyB0byBpbWFnZSBidXR0b25zLiBUaGUgZGVz
aWduZXIga25vd3MgaG93IGJpZyB0aGUgaW1hZ2VzIGFyZSwKKyAgICAgICAgLy8gc28gd2UgaGF2
ZSB0byB0cmVhdCBhbGwgaW1hZ2UgYnV0dG9ucyBhcyB0aG91Z2ggdGhleSB3ZXJlIGV4cGxpY2l0
bHkgc2l6ZWQuCisgICAgICAgIGlmICghaXNIVE1MSW5wdXRFbGVtZW50KGUpIHx8ICF0b0hUTUxJ
bnB1dEVsZW1lbnQoZSktPmlzSW1hZ2VCdXR0b24oKSkKKyAgICAgICAgICAgIGFkZEludHJpbnNp
Y01hcmdpbnMoc3R5bGUpOworICAgIH0KKworICAgIC8vIExldCB0aGUgdGhlbWUgYWxzbyBoYXZl
IGEgY3JhY2sgYXQgYWRqdXN0aW5nIHRoZSBzdHlsZS4KKyAgICBpZiAoc3R5bGUtPmhhc0FwcGVh
cmFuY2UoKSkKKyAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHls
ZSh0aGlzLCBzdHlsZSwgZSwgbV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2UoKSwgbV9zdGF0ZS5ib3Jk
ZXJEYXRhKCksIG1fc3RhdGUuYmFja2dyb3VuZERhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29s
b3IoKSk7CisKKyAgICAvLyBJZiB3ZSBoYXZlIGZpcnN0LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRv
IG5vdCBzaGFyZSB0aGlzIHN0eWxlLgorICAgIGlmIChzdHlsZS0+aGFzUHNldWRvU3R5bGUoRklS
U1RfTEVUVEVSKSkKKyAgICAgICAgc3R5bGUtPnNldFVuaXF1ZSgpOworCisgICAgLy8gRklYTUU6
IHdoZW4gZHJvcHBpbmcgdGhlIC13ZWJraXQgcHJlZml4IG9uIHRyYW5zZm9ybS1zdHlsZSwgd2Ug
c2hvdWxkIGFsc28gaGF2ZSBvcGFjaXR5IDwgMSBjYXVzZSBmbGF0dGVuaW5nLgorICAgIGlmIChz
dHlsZS0+cHJlc2VydmVzM0QoKSAmJiAoc3R5bGUtPm92ZXJmbG93WCgpICE9IE9WSVNJQkxFCisg
ICAgICAgIHx8IHN0eWxlLT5vdmVyZmxvd1koKSAhPSBPVklTSUJMRQorICAgICAgICB8fCBzdHls
ZS0+aGFzRmlsdGVyKCkpKQorICAgICAgICBzdHlsZS0+c2V0VHJhbnNmb3JtU3R5bGUzRChUcmFu
c2Zvcm1TdHlsZTNERmxhdCk7CisKKyAgICAvLyBTZWFtbGVzcyBpZnJhbWVzIGJlaGF2ZSBsaWtl
IGJsb2Nrcy4gTWFwIHRoZWlyIGRpc3BsYXkgdG8gaW5saW5lLWJsb2NrIHdoZW4gbWFya2VkIGlu
bGluZS4KKyAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykgJiYgc3R5bGUtPmRp
c3BsYXkoKSA9PSBJTkxJTkUgJiYgdG9IVE1MSUZyYW1lRWxlbWVudChlKS0+c2hvdWxkRGlzcGxh
eVNlYW1sZXNzbHkoKSkKKyAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoSU5MSU5FX0JMT0NLKTsK
KworICAgIGFkanVzdEdyaWRJdGVtUG9zaXRpb24oc3R5bGUpOworCisjaWYgRU5BQkxFKFNWRykK
KyAgICBpZiAoZSAmJiBlLT5pc1NWR0VsZW1lbnQoKSkgeworICAgICAgICAvLyBTcGVjOiBodHRw
Oi8vd3d3LnczLm9yZy9UUi9TVkcvbWFza2luZy5odG1sI092ZXJmbG93UHJvcGVydHkKKyAgICAg
ICAgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPU0NST0xMKQorICAgICAgICAgICAgc3R5bGUt
PnNldE92ZXJmbG93WShPSElEREVOKTsKKyAgICAgICAgZWxzZSBpZiAoc3R5bGUtPm92ZXJmbG93
WSgpID09IE9BVVRPKQorICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPVklTSUJMRSk7
CisKKyAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBPU0NST0xMKQorICAgICAgICAg
ICAgc3R5bGUtPnNldE92ZXJmbG93WChPSElEREVOKTsKKyAgICAgICAgZWxzZSBpZiAoc3R5bGUt
Pm92ZXJmbG93WCgpID09IE9BVVRPKQorICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChP
VklTSUJMRSk7CisKKyAgICAgICAgLy8gT25seSB0aGUgcm9vdCA8c3ZnPiBlbGVtZW50IGluIGFu
IFNWRyBkb2N1bWVudCBmcmFnbWVudCB0cmVlIGhvbm9ycyBjc3MgcG9zaXRpb24KKyAgICAgICAg
aWYgKCEoZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSAmJiBlLT5wYXJlbnROb2RlKCkg
JiYgIWUtPnBhcmVudE5vZGUoKS0+aXNTVkdFbGVtZW50KCkpKQorICAgICAgICAgICAgc3R5bGUt
PnNldFBvc2l0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsUG9zaXRpb24oKSk7CisKKyAgICAgICAg
Ly8gUmVuZGVyU1ZHUm9vdCBoYW5kbGVzIHpvb21pbmcgZm9yIHRoZSB3aG9sZSBTVkcgc3VidHJl
ZSwgc28gZm9yZWlnbk9iamVjdCBjb250ZW50IHNob3VsZAorICAgICAgICAvLyBub3QgYmUgc2Nh
bGVkIGFnYWluLgorICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6Zm9yZWlnbk9i
amVjdFRhZykpCisgICAgICAgICAgICBzdHlsZS0+c2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHls
ZTo6aW5pdGlhbFpvb20oKSk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6YWRqdXN0R3JpZEl0ZW1Qb3NpdGlvbihSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7Cisg
ICAgLy8gSWYgb3Bwb3NpbmcgZ3JpZC1wbGFjZW1lbnQgcHJvcGVydGllcyBib3RoIHNwZWNpZnkg
YSBncmlkIHNwYW4sIHRoZXkgYm90aCBjb21wdXRlIHRvIOKAmGF1dG/igJkuCisgICAgaWYgKHN0
eWxlLT5ncmlkSXRlbUNvbHVtblN0YXJ0KCkuaXNTcGFuKCkgJiYgc3R5bGUtPmdyaWRJdGVtQ29s
dW1uRW5kKCkuaXNTcGFuKCkpIHsKKyAgICAgICAgc3R5bGUtPnNldEdyaWRJdGVtQ29sdW1uU3Rh
cnQoR3JpZFBvc2l0aW9uKCkpOworICAgICAgICBzdHlsZS0+c2V0R3JpZEl0ZW1Db2x1bW5FbmQo
R3JpZFBvc2l0aW9uKCkpOworICAgIH0KKworICAgIGlmIChzdHlsZS0+Z3JpZEl0ZW1Sb3dTdGFy
dCgpLmlzU3BhbigpICYmIHN0eWxlLT5ncmlkSXRlbVJvd0VuZCgpLmlzU3BhbigpKSB7CisgICAg
ICAgIHN0eWxlLT5zZXRHcmlkSXRlbVJvd1N0YXJ0KEdyaWRQb3NpdGlvbigpKTsKKyAgICAgICAg
c3R5bGUtPnNldEdyaWRJdGVtUm93RW5kKEdyaWRQb3NpdGlvbigpKTsKKyAgICB9Cit9CisKK2Jv
b2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tSZWdpb25TdHlsZShFbGVtZW50KiByZWdpb25FbGVtZW50
KQoreworICAgIC8vIEZJWE1FIChCVUcgNzI0NzIpOiBXZSBkb24ndCBhZGQgQC13ZWJraXQtcmVn
aW9uIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQsCisgICAgLy8g
c28gYWxsIHJlZ2lvbiBydWxlcyBhcmUgZ2xvYmFsIGJ5IGRlZmF1bHQuIFZlcmlmeSB3aGV0aGVy
IHRoYXQgY2FuIHN0YW5kIG9yIG5lZWRzIGNoYW5naW5nLgorCisgICAgdW5zaWduZWQgcnVsZXNT
aXplID0gbV9ydWxlU2V0cy5hdXRob3JTdHlsZSgpLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVT
ZXRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZXNTaXplOyArK2kp
IHsKKyAgICAgICAgQVNTRVJUKG1fcnVsZVNldHMuYXV0aG9yU3R5bGUoKS0+bV9yZWdpb25TZWxl
Y3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpKTsKKyAgICAgICAgaWYgKGNoZWNr
UmVnaW9uU2VsZWN0b3IobV9ydWxlU2V0cy5hdXRob3JTdHlsZSgpLT5tX3JlZ2lvblNlbGVjdG9y
c0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yLCByZWdpb25FbGVtZW50KSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChtX3J1bGVTZXRzLnVzZXJTdHlsZSgpKSB7
CisgICAgICAgIHJ1bGVzU2l6ZSA9IG1fcnVsZVNldHMudXNlclN0eWxlKCktPm1fcmVnaW9uU2Vs
ZWN0b3JzQW5kUnVsZVNldHMuc2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcnVsZXNTaXplOyArK2kpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3J1bGVTZXRzLnVzZXJT
dHlsZSgpLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCkp
OworICAgICAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IobV9ydWxlU2V0cy51c2VyU3R5
bGUoKS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3RvciwgcmVnaW9u
RWxlbWVudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrRm9yT3JpZW50YXRp
b25DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlKQoreworICAgIEZvbnRPcmllbnRhdGlvbiBmb250
T3JpZW50YXRpb247CisgICAgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBnbHlwaE9yaWVudGF0aW9u
OworICAgIGdldEZvbnRBbmRHbHlwaE9yaWVudGF0aW9uKHN0eWxlLCBmb250T3JpZW50YXRpb24s
IGdseXBoT3JpZW50YXRpb24pOworCisgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24gPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgaWYgKGZvbnREZXNjcmlw
dGlvbi5vcmllbnRhdGlvbigpID09IGZvbnRPcmllbnRhdGlvbiAmJiBmb250RGVzY3JpcHRpb24u
bm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpID09IGdseXBoT3JpZW50YXRpb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKKyAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlv
bihnbHlwaE9yaWVudGF0aW9uKTsKKyAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0T3JpZW50YXRp
b24oZm9udE9yaWVudGF0aW9uKTsKKyAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0Zv
bnREZXNjcmlwdGlvbik7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCgpCit7
CisgICAgaWYgKCFtX3N0YXRlLmZvbnREaXJ0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBtX3N0YXRlLnN0eWxlKCk7CisgICAgY2hlY2tGb3JHZW5lcmlj
RmFtaWx5Q2hhbmdlKHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0eWxlKCkpOworICAgIGNoZWNrRm9y
Wm9vbUNoYW5nZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAgICBjaGVja0Zvck9y
aWVudGF0aW9uQ2hhbmdlKHN0eWxlKTsKKyAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRT
ZWxlY3Rvcik7CisgICAgbV9zdGF0ZS5zZXRGb250RGlydHkoZmFsc2UpOworfQorCitWZWN0b3I8
UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4gU3R5bGVSZXNvbHZlcjo6c3R5bGVSdWxlc0ZvckVsZW1l
bnQoRWxlbWVudCogZSwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUpCit7CisgICAgcmV0dXJuIHBz
ZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGUsIE5PUFNFVURPLCBydWxlc1RvSW5jbHVkZSk7Cit9
CisKK1ZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9T
dHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCBQc2V1ZG9JZCBwc2V1ZG9JZCwgdW5zaWdu
ZWQgcnVsZXNUb0luY2x1ZGUpCit7CisgICAgaWYgKCFlIHx8ICFlLT5kb2N1bWVudCgpLT5oYXZl
U3R5bGVzaGVldHNMb2FkZWQoKSkKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxSZWZQdHI8U3R5bGVS
dWxlQmFzZT4gPigpOworCisgICAgaW5pdEVsZW1lbnQoZSk7CisgICAgbV9zdGF0ZS5pbml0Rm9y
U3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUsIDApOworCisgICAgRWxlbWVudFJ1bGVDb2xsZWN0
b3IgY29sbGVjdG9yKHRoaXMsIG1fc3RhdGUpOworICAgIGNvbGxlY3Rvci5zZXRNb2RlKFNlbGVj
dG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKTsKKyAgICBjb2xsZWN0b3Iuc2V0UHNldWRvU3R5
bGVSZXF1ZXN0KFBzZXVkb1N0eWxlUmVxdWVzdChwc2V1ZG9JZCkpOworICAgIGNvbGxlY3Rvci5z
ZXRNZWRpdW0obV9tZWRpdW0uZ2V0KCkpOworCisgICAgaWYgKHJ1bGVzVG9JbmNsdWRlICYgVUFB
bmRVc2VyQ1NTUnVsZXMpIHsKKyAgICAgICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0
aGUgdXNlciBhZ2VudCBzaGVldC4KKyAgICAgICAgY29sbGVjdG9yLm1hdGNoVUFSdWxlcygpOwor
ICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMuCisgICAg
ICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKKyAgICAgICAgICAgIGNvbGxlY3Rv
ci5tYXRjaFVzZXJSdWxlcyhydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOworICAgIH0K
KworICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiAocnVsZXNUb0luY2x1ZGUg
JiBBdXRob3JDU1NSdWxlcykpIHsKKyAgICAgICAgY29sbGVjdG9yLnNldFNhbWVPcmlnaW5Pbmx5
KCEocnVsZXNUb0luY2x1ZGUgJiBDcm9zc09yaWdpbkNTU1J1bGVzKSk7CisKKyAgICAgICAgLy8g
Q2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMuCisgICAgICAgIGNvbGxlY3Rvci5tYXRj
aEF1dGhvclJ1bGVzKHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisgICAgfQorCisg
ICAgcmV0dXJuIGNvbGxlY3Rvci5tYXRjaGVkUnVsZUxpc3QoKTsKK30KKworLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gdGhpcyBpcyBtb3N0bHkgYm9yaW5nIHN0dWZmIG9uIGhv
dyB0byBhcHBseSBhIGNlcnRhaW4gcnVsZSB0byB0aGUgcmVuZGVyc3R5bGUuLi4KKworTGVuZ3Ro
IFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0ludExlbmd0aChjb25zdCBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVy
U3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIpCit7CisgICAgcmV0dXJuIHByaW1p
dGl2ZVZhbHVlID8gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJD
b252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IEZy
YWN0aW9uQ29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxlLCBy
b290U3R5bGUsIG11bHRpcGxpZXIpIDogTGVuZ3RoKFVuZGVmaW5lZCk7Cit9CisKK0xlbmd0aCBT
dHlsZVJlc29sdmVyOjpjb252ZXJ0VG9GbG9hdExlbmd0aChjb25zdCBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVy
U3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIpCit7CisgICAgcmV0dXJuIHByaW1p
dGl2ZVZhbHVlID8gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEZsb2F0Q29u
dmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBGcmFj
dGlvbkNvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZSwgcm9v
dFN0eWxlLCBtdWx0aXBsaWVyKSA6IExlbmd0aChVbmRlZmluZWQpOworfQorCit0ZW1wbGF0ZSA8
U3R5bGVSZXNvbHZlcjo6U3R5bGVBcHBsaWNhdGlvblBhc3MgcGFzcz4KK3ZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMs
IFN0eWxlUnVsZSogcnVsZSwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQ
cm9wZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVydHlXaGl0ZWxpc3RUeXBlKQoreworICAgIEFTU0VS
VCgocHJvcGVydHlXaGl0ZWxpc3RUeXBlICE9IFByb3BlcnR5V2hpdGVsaXN0UmVnaW9uKSB8fCBt
X3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Q29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFByb2Nlc3NSdWxl
KGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOworCisgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9
IHByb3BlcnRpZXMtPnByb3BlcnR5Q291bnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcHJvcGVydHlDb3VudDsgKytpKSB7CisgICAgICAgIFN0eWxlUHJvcGVydHlTZXQ6OlByb3Bl
cnR5UmVmZXJlbmNlIGN1cnJlbnQgPSBwcm9wZXJ0aWVzLT5wcm9wZXJ0eUF0KGkpOworICAgICAg
ICBpZiAoaXNJbXBvcnRhbnQgIT0gY3VycmVudC5pc0ltcG9ydGFudCgpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGlmIChpbmhlcml0ZWRPbmx5ICYmICFjdXJyZW50LmlzSW5oZXJp
dGVkKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBleHBsaWNp
dGx5IGluaGVyaXRlZCwgd2UgbmVlZCB0byBhcHBseSBmdXJ0aGVyIG5vbi1pbmhlcml0ZWQgcHJv
cGVydGllcworICAgICAgICAgICAgLy8gYXMgdGhleSBtaWdodCBvdmVycmlkZSB0aGUgdmFsdWUg
aW5oZXJpdGVkIGhlcmUuIEZvciB0aGlzIHJlYXNvbiB3ZSBkb24ndCBhbGxvdyBkZWNsYXJhdGlv
bnMgd2l0aAorICAgICAgICAgICAgLy8gZXhwbGljaXRseSBpbmhlcml0ZWQgcHJvcGVydGllcyB0
byBiZSBjYWNoZWQuCisgICAgICAgICAgICBBU1NFUlQoIWN1cnJlbnQudmFsdWUoKS0+aXNJbmhl
cml0ZWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IENTU1Byb3BlcnR5SUQgcHJvcGVydHkgPSBjdXJyZW50LmlkKCk7CisKKyAgICAgICAgaWYgKHBy
b3BlcnR5V2hpdGVsaXN0VHlwZSA9PSBQcm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbiAmJiAhU3R5bGVS
ZXNvbHZlcjo6aXNWYWxpZFJlZ2lvblN0eWxlUHJvcGVydHkocHJvcGVydHkpKQorICAgICAgICAg
ICAgY29udGludWU7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgICAgICBpZiAocHJvcGVy
dHlXaGl0ZWxpc3RUeXBlID09IFByb3BlcnR5V2hpdGVsaXN0Q3VlICYmICFTdHlsZVJlc29sdmVy
Ojppc1ZhbGlkQ3VlU3R5bGVQcm9wZXJ0eShwcm9wZXJ0eSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyNlbmRpZgorICAgICAgICBzd2l0Y2ggKHBhc3MpIHsKKyNpZiBFTkFCTEUoQ1NTX1ZBUklB
QkxFUykKKyAgICAgICAgY2FzZSBWYXJpYWJsZURlZmluaXRpb25zOgorICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoQ1NTUHJvcGVydHlWYXJpYWJsZSA8IGZpcnN0Q1NTUHJvcGVydHksIENTU192
YXJpYWJsZV9pc19iZWZvcmVfZmlyc3RfcHJvcGVydHkpOworICAgICAgICAgICAgaWYgKHByb3Bl
cnR5ID09IENTU1Byb3BlcnR5VmFyaWFibGUpCisgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0
eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyNl
bmRpZgorICAgICAgICBjYXNlIEhpZ2hQcmlvcml0eVByb3BlcnRpZXM6CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChmaXJzdENTU1Byb3BlcnR5ID09IENTU1Byb3BlcnR5Q29sb3IsIENTU19j
b2xvcl9pc19maXJzdF9wcm9wZXJ0eSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChDU1NQ
cm9wZXJ0eVpvb20gPT0gQ1NTUHJvcGVydHlDb2xvciArIDE3LCBDU1Nfem9vbV9pc19lbmRfb2Zf
Zmlyc3RfcHJvcF9yYW5nZSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChDU1NQcm9wZXJ0
eUxpbmVIZWlnaHQgPT0gQ1NTUHJvcGVydHlab29tICsgMSwgQ1NTX2xpbmVfaGVpZ2h0X2lzX2Fm
dGVyX3pvb20pOworI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQorICAgICAgICAgICAgaWYgKHBy
b3BlcnR5ID09IENTU1Byb3BlcnR5VmFyaWFibGUpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisjZW5kaWYKKyAgICAgICAgICAgIC8vIGdpdmUgc3BlY2lhbCBwcmlvcml0eSB0byBmb250LXh4
eCwgY29sb3IgcHJvcGVydGllcywgZXRjCisgICAgICAgICAgICBpZiAocHJvcGVydHkgPCBDU1NQ
cm9wZXJ0eUxpbmVIZWlnaHQpCisgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50
LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CisgICAgICAgICAgICAvLyB3ZSBhcHBseSBsaW5lLWhl
aWdodCBsYXRlcgorICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlM
aW5lSGVpZ2h0KQorICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGN1
cnJlbnQudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb3dQcmlv
cml0eVByb3BlcnRpZXM6CisgICAgICAgICAgICBpZiAocHJvcGVydHkgPiBDU1NQcm9wZXJ0eUxp
bmVIZWlnaHQpCisgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1
cnJlbnQudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRQcm9jZXNzUnVsZShjb29raWUpOworfQorCit0ZW1wbGF0ZSA8U3R5bGVSZXNv
bHZlcjo6U3R5bGVBcHBsaWNhdGlvblBhc3MgcGFzcz4KK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wg
aXNJbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVk
T25seSkKK3sKKyAgICBpZiAoc3RhcnRJbmRleCA9PSAtMSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBpZiAoc3RhdGUuc3R5bGUoKS0+aW5zaWRl
TGluaygpICE9IE5vdEluc2lkZUxpbmspIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5k
ZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgeworICAgICAgICAgICAgY29uc3QgTWF0Y2hlZFByb3Bl
cnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNb
aV07CisgICAgICAgICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gbWF0Y2hlZFByb3BlcnRp
ZXMubGlua01hdGNoVHlwZTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNl
ciB0byBwYXNzIHRoZXNlIGFzIGFyZ3VtZW50cyBidXQgdGhhdCByZXF1aXJlcyBjaGFuZ2VzIGlu
IG1hbnkgcGxhY2VzLgorICAgICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlKGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayk7CisgICAg
ICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGxpbmtNYXRj
aFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCk7CisKKyAgICAgICAgICAgIGFw
cGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBt
YXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBz
dGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRl
bGlzdFR5cGUpKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUodHJ1ZSk7CisgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50
IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKKyAgICAgICAgY29uc3QgTWF0
Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXNbaV07CisgICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVkUHJvcGVy
dGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1w
b3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+
KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUpKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVk
IFN0eWxlUmVzb2x2ZXI6OmNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2goY29uc3QgTWF0Y2hl
ZFByb3BlcnRpZXMqIHByb3BlcnRpZXMsIHVuc2lnbmVkIHNpemUpCit7CisgICAgCisgICAgcmV0
dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShwcm9wZXJ0aWVzLCBzaXplb2YoTWF0Y2hlZFBy
b3BlcnRpZXMpICogc2l6ZSk7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZVJlc29s
dmVyOjpNYXRjaFJhbmdlcyYgYSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGIp
Cit7CisgICAgcmV0dXJuIGEuZmlyc3RVQVJ1bGUgPT0gYi5maXJzdFVBUnVsZQorICAgICAgICAm
JiBhLmxhc3RVQVJ1bGUgPT0gYi5sYXN0VUFSdWxlCisgICAgICAgICYmIGEuZmlyc3RBdXRob3JS
dWxlID09IGIuZmlyc3RBdXRob3JSdWxlCisgICAgICAgICYmIGEubGFzdEF1dGhvclJ1bGUgPT0g
Yi5sYXN0QXV0aG9yUnVsZQorICAgICAgICAmJiBhLmZpcnN0VXNlclJ1bGUgPT0gYi5maXJzdFVz
ZXJSdWxlCisgICAgICAgICYmIGEubGFzdFVzZXJSdWxlID09IGIubGFzdFVzZXJSdWxlOworfQor
Citib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGEsIGNv
bnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBiKQoreworICAgIHJldHVybiAhKGEgPT0g
Yik7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJv
cGVydGllcyYgYSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGIpCit7
CisgICAgcmV0dXJuIGEucHJvcGVydGllcyA9PSBiLnByb3BlcnRpZXMgJiYgYS5saW5rTWF0Y2hU
eXBlID09IGIubGlua01hdGNoVHlwZTsKK30KKworYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxl
UmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBhLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRj
aGVkUHJvcGVydGllcyYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCitjb25zdCBT
dHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogU3R5bGVSZXNvbHZlcjo6
ZmluZEZyb21NYXRjaGVkUHJvcGVydGllc0NhY2hlKHVuc2lnbmVkIGhhc2gsIGNvbnN0IE1hdGNo
UmVzdWx0JiBtYXRjaFJlc3VsdCkKK3sKKyAgICBBU1NFUlQoaGFzaCk7CisKKyAgICBNYXRjaGVk
UHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBpdCA9IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5m
aW5kKGhhc2gpOworICAgIGlmIChpdCA9PSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZW5kKCkp
CisgICAgICAgIHJldHVybiAwOworICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtJiBjYWNo
ZUl0ZW0gPSBpdC0+dmFsdWU7CisKKyAgICBzaXplX3Qgc2l6ZSA9IG1hdGNoUmVzdWx0Lm1hdGNo
ZWRQcm9wZXJ0aWVzLnNpemUoKTsKKyAgICBpZiAoc2l6ZSAhPSBjYWNoZUl0ZW0ubWF0Y2hlZFBy
b3BlcnRpZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBpZiAobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3Bl
cnRpZXNbaV0gIT0gY2FjaGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVzW2ldKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIGlmIChjYWNoZUl0ZW0ucmFuZ2VzICE9IG1hdGNoUmVzdWx0
LnJhbmdlcykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuICZjYWNoZUl0ZW07Cit9CisK
K3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkVG9NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCB1bnNpZ25l
ZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQpCit7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1hdGNoZWREZWNsYXJhdGlvbkNhY2hlQWRkaXRpb25zQmV0d2VlblN3ZWVw
cyA9IDEwMDsKKyAgICBpZiAoKyttX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5j
ZUxhc3RTd2VlcCA+PSBtYXRjaGVkRGVjbGFyYXRpb25DYWNoZUFkZGl0aW9uc0JldHdlZW5Td2Vl
cHMKKyAgICAgICAgJiYgIW1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZVN3ZWVwVGltZXIuaXNBY3Rp
dmUoKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF0Y2hlZERlY2xhcmF0aW9u
Q2FjaGVTd2VlcFRpbWVJblNlY29uZHMgPSA2MDsKKyAgICAgICAgbV9tYXRjaGVkUHJvcGVydGll
c0NhY2hlU3dlZXBUaW1lci5zdGFydE9uZVNob3QobWF0Y2hlZERlY2xhcmF0aW9uQ2FjaGVTd2Vl
cFRpbWVJblNlY29uZHMpOworICAgIH0KKworICAgIEFTU0VSVChoYXNoKTsKKyAgICBNYXRjaGVk
UHJvcGVydGllc0NhY2hlSXRlbSBjYWNoZUl0ZW07CisgICAgY2FjaGVJdGVtLm1hdGNoZWRQcm9w
ZXJ0aWVzLmFwcGVuZFZlY3RvcihtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcyk7CisgICAg
Y2FjaGVJdGVtLnJhbmdlcyA9IG1hdGNoUmVzdWx0LnJhbmdlczsKKyAgICAvLyBOb3RlIHRoYXQg
d2UgZG9uJ3QgY2FjaGUgdGhlIG9yaWdpbmFsIFJlbmRlclN0eWxlIGluc3RhbmNlLiBJdCBtYXkg
YmUgZnVydGhlciBtb2RpZmllZC4KKyAgICAvLyBUaGUgUmVuZGVyU3R5bGUgaW4gdGhlIGNhY2hl
IGlzIHJlYWxseSBqdXN0IGEgaG9sZGVyIGZvciB0aGUgc3Vic3RydWN0dXJlcyBhbmQgbmV2ZXIg
dXNlZCBhcy1pcy4KKyAgICBjYWNoZUl0ZW0ucmVuZGVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xv
bmUoc3R5bGUpOworICAgIGNhY2hlSXRlbS5wYXJlbnRSZW5kZXJTdHlsZSA9IFJlbmRlclN0eWxl
OjpjbG9uZShwYXJlbnRTdHlsZSk7CisgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmFkZCho
YXNoLCBjYWNoZUl0ZW0pOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmludmFsaWRhdGVNYXRj
aGVkUHJvcGVydGllc0NhY2hlKCkKK3sKKyAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuY2xl
YXIoKTsKK30KKworc3RhdGljIGJvb2wgaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit7CisgICAgLy8gRklYTUU6IENTU1Byb3BlcnR5
V2Via2l0V3JpdGluZ01vZGUgbW9kaWZpZXMgc3RhdGUgd2hlbiBhcHBseWluZyB0byBkb2N1bWVu
dCBlbGVtZW50LiBXZSBjYW4ndCBza2lwIHRoZSBhcHBseWluZyBieSBjYWNoaW5nLgorICAgIGlm
IChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpICYmIGVs
ZW1lbnQtPmRvY3VtZW50KCktPndyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdHlsZS0+dW5pcXVlKCkgfHwgKHN0eWxlLT5z
dHlsZVR5cGUoKSAhPSBOT1BTRVVETyAmJiBwYXJlbnRTdHlsZS0+dW5pcXVlKCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0eWxlLT5oYXNBcHBlYXJhbmNlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3R5bGUtPnpvb20oKSAhPSBSZW5kZXJTdHlsZTo6aW5p
dGlhbFpvb20oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdHlsZS0+d3JpdGlu
Z01vZGUoKSAhPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAvLyBUaGUgY2FjaGUgYXNzdW1lcyBzdGF0aWMga25vd2xlZGdlIGFi
b3V0IHdoaWNoIHByb3BlcnRpZXMgYXJlIGluaGVyaXRlZC4KKyAgICBpZiAocGFyZW50U3R5bGUt
Pmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QgRWxlbWVu
dCogZWxlbWVudCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgU3RhdGUmIHN0YXRlID0g
bV9zdGF0ZTsKKyAgICB1bnNpZ25lZCBjYWNoZUhhc2ggPSBtYXRjaFJlc3VsdC5pc0NhY2hlYWJs
ZSA/IGNvbXB1dGVNYXRjaGVkUHJvcGVydGllc0hhc2gobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3Bl
cnRpZXMuZGF0YSgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkpIDogMDsK
KyAgICBib29sIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOworICAgIGNvbnN0IE1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGVJdGVtKiBjYWNoZUl0ZW0gPSAwOworICAgIGlmIChjYWNoZUhhc2ggJiYg
KGNhY2hlSXRlbSA9IGZpbmRGcm9tTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjYWNoZUhhc2gsIG1h
dGNoUmVzdWx0KSkpIHsKKyAgICAgICAgLy8gV2UgY2FuIGJ1aWxkIHVwIHRoZSBzdHlsZSBieSBj
b3B5aW5nIG5vbi1pbmhlcml0ZWQgcHJvcGVydGllcyBmcm9tIGFuIGVhcmxpZXIgc3R5bGUgb2Jq
ZWN0IGJ1aWx0IHVzaW5nIHRoZSBzYW1lIGV4YWN0CisgICAgICAgIC8vIHN0eWxlIGRlY2xhcmF0
aW9ucy4gV2UgdGhlbiBvbmx5IG5lZWQgdG8gYXBwbHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVz
LCBpZiBhbnksIGFzIHRoZWlyIHZhbHVlcyBjYW4gZGVwZW5kIG9uIHRoZSAKKyAgICAgICAgLy8g
ZWxlbWVudCBjb250ZXh0LiBUaGlzIGlzIGZhc3QgYW5kIHNhdmVzIG1lbW9yeSBieSByZXVzaW5n
IHRoZSBzdHlsZSBkYXRhIHN0cnVjdHVyZXMuCisgICAgICAgIHN0YXRlLnN0eWxlKCktPmNvcHlO
b25Jbmhlcml0ZWRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOworICAgICAgICBp
ZiAoc3RhdGUucGFyZW50U3R5bGUoKS0+aW5oZXJpdGVkRGF0YVNoYXJlZChjYWNoZUl0ZW0tPnBh
cmVudFJlbmRlclN0eWxlLmdldCgpKSAmJiAhaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpKSB7
CisgICAgICAgICAgICBFSW5zaWRlTGluayBsaW5rU3RhdHVzID0gc3RhdGUuc3R5bGUoKS0+aW5z
aWRlTGluaygpOworICAgICAgICAgICAgLy8gSWYgdGhlIGNhY2hlIGl0ZW0gcGFyZW50IHN0eWxl
IGhhcyBpZGVudGljYWwgaW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gdGhlIGN1cnJlbnQgcGFyZW50
IHN0eWxlIHRoZW4gdGhlCisgICAgICAgICAgICAvLyByZXN1bHRpbmcgc3R5bGUgd2lsbCBiZSBp
ZGVudGljYWwgdG9vLiBXZSBjb3B5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcyBvdmVyIGZyb20g
dGhlIGNhY2hlIGFuZCBhcmUgZG9uZS4KKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmluaGVy
aXRGcm9tKGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUuZ2V0KCkpOworCisgICAgICAgICAgICAvLyBV
bmZvcnR1bmF0ZWx5IHRoZSBsaW5rIHN0YXR1cyBpcyB0cmVhdGVkIGxpa2UgYW4gaW5oZXJpdGVk
IHByb3BlcnR5LiBXZSBuZWVkIHRvIGV4cGxpY2l0bHkgcmVzdG9yZSBpdC4KKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldEluc2lkZUxpbmsobGlua1N0YXR1cyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXBwbHlJbmhlcml0ZWRPbmx5ID0gdHJ1ZTsgCisg
ICAgfQorCisjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCisgICAgLy8gRmlyc3QgYXBwbHkgYWxs
IHZhcmlhYmxlIGRlZmluaXRpb25zLCBhcyB0aGV5IG1heSBiZSB1c2VkIGR1cmluZyBhcHBsaWNh
dGlvbiBvZiBsYXRlciBwcm9wZXJ0aWVzLgorICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFy
aWFibGVEZWZpbml0aW9ucz4obWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRj
aGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4obWF0Y2hSZXN1bHQsIHRydWUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5s
YXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxl
RGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RV
QVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkp
OworI2VuZGlmCisKKyAgICAvLyBOb3cgd2UgaGF2ZSBhbGwgb2YgdGhlIG1hdGNoZWQgcnVsZXMg
aW4gdGhlIGFwcHJvcHJpYXRlIG9yZGVyLiBXYWxrIHRoZSBydWxlcyBhbmQgYXBwbHkKKyAgICAv
LyBoaWdoLXByaW9yaXR5IHByb3BlcnRpZXMgZmlyc3QsIGkuZS4sIHRob3NlIHByb3BlcnRpZXMg
dGhhdCBvdGhlciBwcm9wZXJ0aWVzIGRlcGVuZCBvbi4KKyAgICAvLyBUaGUgb3JkZXIgaXMgKDEp
IGhpZ2gtcHJpb3JpdHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gtcHJpb3JpdHkgaW1wb3J0YW50
LCAoMykgbm9ybWFsIG5vdCBpbXBvcnRhbnQKKyAgICAvLyBhbmQgKDQpIG5vcm1hbCBpbXBvcnRh
bnQuCisgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOworICAgIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBt
YXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9u
bHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4o
bWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVz
dWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBt
YXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFS
dWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworCisgICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0
ZW0tPnJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gc3RhdGUuc3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpKSB7CisgICAgICAgIHN0YXRlLnNldEZvbnREaXJ0eSh0cnVlKTsKKyAgICAgICAg
YXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgb3VyIGZvbnQg
Z290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgorICAgIHVwZGF0ZUZvbnQo
KTsKKworICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lk
ZWQgb24gdGhlIGZvbnQtc2l6ZS4KKyAgICBpZiAoc3RhdGUubGluZUhlaWdodFZhbHVlKCkpCisg
ICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVp
Z2h0VmFsdWUoKSk7CisKKyAgICAvLyBNYW55IHByb3BlcnRpZXMgZGVwZW5kIG9uIHRoZSBmb250
LiBJZiBpdCBjaGFuZ2VzIHdlIGp1c3QgYXBwbHkgYWxsIHByb3BlcnRpZXMuCisgICAgaWYgKGNh
Y2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVzY3JpcHRpb24oKSAhPSBz
dGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKSkKKyAgICAgICAgYXBwbHlJbmhlcml0ZWRP
bmx5ID0gZmFsc2U7CisKKyAgICAvLyBOb3cgZG8gdGhlIG5vcm1hbCBwcmlvcml0eSBVQSBwcm9w
ZXJ0aWVzLgorICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVz
PihtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0
Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgCisg
ICAgLy8gQ2FjaGUgb3VyIGJvcmRlciBhbmQgYmFja2dyb3VuZCBzbyB0aGF0IHdlIGNhbiBleGFt
aW5lIHRoZW0gbGF0ZXIuCisgICAgc3RhdGUuY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7Cisg
ICAgCisgICAgLy8gTm93IGRvIHRoZSBhdXRob3IgYW5kIHVzZXIgbm9ybWFsIHByaW9yaXR5IHBy
b3BlcnRpZXMgYW5kIGFsbCB0aGUgIWltcG9ydGFudCBwcm9wZXJ0aWVzLgorICAgIGFwcGx5TWF0
Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2Us
IG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlICsgMSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0
QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0
LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBh
cHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3Jp
dHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0
VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKKyAgIAorICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhp
cyBzdHlsZS4KKyAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOworICAgIAorICAgIEFTU0VSVCgh
c3RhdGUuZm9udERpcnR5KCkpOworICAgIAorICAgIGlmIChjYWNoZUl0ZW0gfHwgIWNhY2hlSGFz
aCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNDYWNoZWFibGVJbk1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUoc3RhdGUuZWxlbWVudCgpLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRTdHls
ZSgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGFkZFRvTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShz
dGF0ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpLCBjYWNoZUhhc2gsIG1hdGNoUmVzdWx0
KTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICBp
bml0RWxlbWVudCgwKTsKKyAgICBtX3N0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQo
KSwgMCwgc3R5bGUpOworICAgIG1fc3RhdGUuc2V0U3R5bGUoc3R5bGUpOworICAgIGFwcGx5UHJv
cGVydHlUb0N1cnJlbnRTdHlsZShpZCwgdmFsdWUpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBhcHBseVByb3BlcnR5KGlkLCB2YWx1
ZSk7Cit9CisKK2lubGluZSBib29sIGlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQpCit7CisgICAgc3dpdGNoIChpZCkgeworICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcjoKKyAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyVG9wQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZUNvbG9y
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3I6CisjaWYgRU5BQkxF
KENTUzNfVEVYVCkKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25Db2xv
cjoKKyNlbmRpZiAvLyBDU1MzX1RFWFQKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVt
cGhhc2lzQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3I6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKKyNpZiBFTkFCTEUoU1ZH
KQorICAgIGNhc2UgQ1NTUHJvcGVydHlGaWxsOgorICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2U6
CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBodHRwOi8vZGV2LnczLm9y
Zy9jc3N3Zy9jc3MzLXJlZ2lvbnMvI3RoZS1hdC1yZWdpb24tc3R5bGUtcnVsZQorLy8gRklYTUU6
IGFkZCBpbmNyZW1lbnRhbCBzdXBwb3J0IGZvciBvdGhlciByZWdpb24gc3R5bGluZyBwcm9wZXJ0
aWVzLgoraW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6aXNWYWxpZFJlZ2lvblN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCkKK3sKKyAgICBzd2l0Y2ggKGlkKSB7CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKK2lubGluZSBi
b29sIFN0eWxlUmVzb2x2ZXI6OmlzVmFsaWRDdWVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQpCit7CisgICAgc3dpdGNoIChpZCkgeworICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5QmFja2dyb3VuZENsaXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
UG9zaXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblg6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRSZXBlYXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRY
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WToKKyAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZFNpemU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlGb250OgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OgorICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250U2l6ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0eWxl
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudDoKKyAgICBjYXNlIENTU1Byb3BlcnR5
Rm9udFdlaWdodDoKKyAgICBjYXNlIENTU1Byb3BlcnR5TGluZUhlaWdodDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5T3BhY2l0eToKKyAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZToKKyAgICBjYXNl
IENTU1Byb3BlcnR5T3V0bGluZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lT2Zm
c2V0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lU3R5bGU6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eU91dGxpbmVXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5VmlzaWJpbGl0eToKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2hpdGVTcGFjZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29y
YXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRTaGFkb3c6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlclN0eWxlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisvLyBTVkcg
aGFuZGxlcyB6b29taW5nIGluIGEgZGlmZmVyZW50IHdheSBjb21wYXJlZCB0byBDU1MuIFRoZSB3
aG9sZSBkb2N1bWVudCBpcyBzY2FsZWQgaW5zdGVhZAorLy8gb2YgZWFjaCBpbmRpdmlkdWFsIGxl
bmd0aCB2YWx1ZSBpbiB0aGUgcmVuZGVyIHN0eWxlIC8gdHJlZS4gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNvbXB1dGVMZW5ndGgqKCkKKy8vIG11bHRpcGxpZXMgZWFjaCByZXNvbHZlZCBsZW5ndGggd2l0
aCB0aGUgem9vbSBtdWx0aXBsaWVyIC0gc28gZm9yIFNWRyB3ZSBuZWVkIHRvIGRpc2FibGUgdGhh
dC4KKy8vIFRob3VnaCBhbGwgQ1NTIHZhbHVlcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG91dGVy
bW9zdCA8c3ZnPiBlbGVtZW50cyAod2lkdGgvaGVpZ2h0L2JvcmRlci9wYWRkaW5nLi4uKQorLy8g
bmVlZCB0byByZXNwZWN0IHRoZSBzY2FsaW5nLiBSZW5kZXJCb3ggKHRoZSBwYXJlbnQgY2xhc3Mg
b2YgUmVuZGVyU1ZHUm9vdCkgZ3JhYnMgdmFsdWVzIGxpa2UKKy8vIHdpZHRoL2hlaWdodC9ib3Jk
ZXIvcGFkZGluZy8uLi4gZnJvbSB0aGUgUmVuZGVyU3R5bGUgLT4gZm9yIFNWRyB0aGVzZSB2YWx1
ZXMgd291bGQgbmV2ZXIgc2NhbGUsCisvLyBpZiB3ZSdkIHBhc3MgYSAxLjAgem9vbSBmYWN0b3Ig
ZXZlcnlod2VyZS4gU28gd2Ugb25seSBwYXNzIGEgem9vbSBmYWN0b3Igb2YgMS4wIGZvciBzcGVj
aWZpYworLy8gcHJvcGVydGllcyB0aGF0IGFyZSBOT1QgYWxsb3dlZCB0byBzY2FsZSB3aXRoaW4g
YSB6b29tZWQgU1ZHIGRvY3VtZW50IChsZXR0ZXIvd29yZC1zcGFjaW5nL2ZvbnQtc2l6ZSkuCiti
b29sIFN0eWxlUmVzb2x2ZXI6OnVzZVNWR1pvb21SdWxlcygpCit7CisgICAgcmV0dXJuIG1fc3Rh
dGUuZWxlbWVudCgpICYmIG1fc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKTsKK30KKwor
c3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgTGVuZ3RoJiB3
b3JraW5nTGVuZ3RoKQoreworICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09
IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCkgeworICAgICAgICB3b3JraW5nTGVuZ3RoID0gTGVu
Z3RoKE1pbkNvbnRlbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1heENvbnRlbnQp
IHsKKyAgICAgICAgd29ya2luZ0xlbmd0aCA9IExlbmd0aChNYXhDb250ZW50KTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgd29ya2luZ0xlbmd0aCA9IHByaW1pdGl2ZVZhbHVl
LT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJz
aW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihzdGF0
ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKSk7CisgICAgaWYgKHdvcmtpbmdMZW5ndGguaXNVbmRlZmluZWQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQor
ICAgICAgICB3b3JraW5nTGVuZ3RoLnNldFF1aXJrKHByaW1pdGl2ZVZhbHVlLT5pc1F1aXJrVmFs
dWUoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRy
YWNrU2l6ZShDU1NWYWx1ZSogdmFsdWUsIEdyaWRUcmFja1NpemUmIHRyYWNrU2l6ZSwgY29uc3Qg
U3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQoreworICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZSk7CisgICAgUGFpciogbWluTWF4VHJhY2tCcmVhZHRoID0gcHJpbWl0aXZlVmFsdWUtPmdldFBh
aXJWYWx1ZSgpOworICAgIGlmICghbWluTWF4VHJhY2tCcmVhZHRoKSB7CisgICAgICAgIExlbmd0
aCB3b3JraW5nTGVuZ3RoOworICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgocHJp
bWl0aXZlVmFsdWUsIHN0YXRlLCB3b3JraW5nTGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICB0cmFja1NpemUuc2V0TGVuZ3RoKHdvcmtpbmdMZW5ndGgpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBMZW5ndGggbWluVHJhY2tCcmVhZHRoOwor
ICAgIExlbmd0aCBtYXhUcmFja0JyZWFkdGg7CisgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVh
ZHRoKG1pbk1heFRyYWNrQnJlYWR0aC0+Zmlyc3QoKSwgc3RhdGUsIG1pblRyYWNrQnJlYWR0aCkg
fHwgIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5zZWNvbmQoKSwg
c3RhdGUsIG1heFRyYWNrQnJlYWR0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHRy
YWNrU2l6ZS5zZXRNaW5NYXgobWluVHJhY2tCcmVhZHRoLCBtYXhUcmFja0JyZWFkdGgpOworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1Zh
bHVlKiB2YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVzLCBOYW1lZEdyaWRM
aW5lc01hcCYgbmFtZWRHcmlkTGluZXMsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSkKK3sKKyAgICAvLyBIYW5kbGUgJ25vbmUnLgorICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKSB7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAgICByZXR1cm4gcHJp
bWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7CisgICAgfQorCisgICAg
aWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
c2l6ZV90IGN1cnJlbnROYW1lZEdyaWRMaW5lID0gMDsKKyAgICBmb3IgKENTU1ZhbHVlTGlzdEl0
ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CisgICAgICAgIENT
U1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7CisgICAgICAgIGlmIChjdXJyVmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihjdXJyVmFsdWUpOwor
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1N0cmluZygpKSB7CisgICAgICAgICAg
ICAgICAgTmFtZWRHcmlkTGluZXNNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBuYW1lZEdyaWRMaW5l
cy5hZGQocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCksIFZlY3RvcjxzaXplX3Q+KCkp
OworICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGN1cnJlbnRO
YW1lZEdyaWRMaW5lKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgICsrY3VycmVudE5hbWVkR3JpZExpbmU7CisgICAgICAgIEdy
aWRUcmFja1NpemUgdHJhY2tTaXplOworICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja1NpemUo
Y3VyclZhbHVlLCB0cmFja1NpemUsIHN0YXRlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICB0cmFja1NpemVzLmFwcGVuZCh0cmFja1NpemUpOworICAgIH0KKworICAgIGlm
ICh0cmFja1NpemVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKKworc3RhdGljIGJvb2wgY3JlYXRlR3JpZFBvc2l0aW9uKENTU1ZhbHVl
KiB2YWx1ZSwgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAgICAvLyBGb3Igbm93LCB3ZSBv
bmx5IGFjY2VwdDogJ2F1dG8nIHwgPGludGVnZXI+IHwgc3BhbiAmJiA8aW50ZWdlcj4/CisgICAg
aWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVl
QXV0bykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlU3BhbikgeworICAgICAgICAgICAgLy8gSWYg
dGhlIDxpbnRlZ2VyPiBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byAnMScuCisgICAgICAgICAg
ICBwb3NpdGlvbi5zZXRTcGFuUG9zaXRpb24oMSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSk7
CisgICAgICAgIHBvc2l0aW9uLnNldEludGVnZXJQb3NpdGlvbihwcmltaXRpdmVWYWx1ZS0+Z2V0
SW50VmFsdWUoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEFTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKTsKKyAgICBDU1NW
YWx1ZUxpc3QqIHZhbHVlcyA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKKyAg
ICBBU1NFUlQodmFsdWVzLT5sZW5ndGgoKSA9PSAyKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTih2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSktPmlzUHJpbWl0
aXZlVmFsdWUoKSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIG51bWVyaWNWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDEpKTsKKyAgICBBU1NFUlQobnVtZXJpY1ZhbHVlLT5pc051bWJlcigpKTsKKyAgICBwb3NpdGlv
bi5zZXRTcGFuUG9zaXRpb24obnVtZXJpY1ZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQorc3RhdGljIGJvb2wgaGFz
VmFyaWFibGVSZWZlcmVuY2UoQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKSB7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAgICBy
ZXR1cm4gcHJpbWl0aXZlVmFsdWUtPmhhc1ZhcmlhYmxlUmVmZXJlbmNlKCk7CisgICAgfQorCisg
ICAgaWYgKHZhbHVlLT5pc0NhbGN1bGF0aW9uVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PENTU0NhbGNWYWx1ZSo+KHZhbHVlKS0+aGFzVmFyaWFibGVSZWZlcmVuY2UoKTsKKwor
ICAgIGlmICh2YWx1ZS0+aXNSZWZsZWN0VmFsdWUoKSkgeworICAgICAgICBDU1NSZWZsZWN0VmFs
dWUqIHJlZmxlY3RWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1JlZmxlY3RWYWx1ZSo+KHZhbHVlKTsK
KyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGRpcmVjdGlvbiA9IHJlZmxlY3RWYWx1ZS0+ZGly
ZWN0aW9uKCk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBvZmZzZXQgPSByZWZsZWN0VmFs
dWUtPm9mZnNldCgpOworICAgICAgICBDU1NWYWx1ZSogbWFzayA9IHJlZmxlY3RWYWx1ZS0+bWFz
aygpOworICAgICAgICByZXR1cm4gKGRpcmVjdGlvbiAmJiBoYXNWYXJpYWJsZVJlZmVyZW5jZShk
aXJlY3Rpb24pKSB8fCAob2Zmc2V0ICYmIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKG9mZnNldCkpIHx8
IChtYXNrICYmIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKG1hc2spKTsKKyAgICB9CisKKyAgICBmb3Ig
KENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgp
KSB7CisgICAgICAgIGlmIChoYXNWYXJpYWJsZVJlZmVyZW5jZShpLnZhbHVlKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlLCBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25v
d25FeHByZXNzaW9ucykKK3sKKyAgICBzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiBl
eHByZXNzaW9uKGlkLCB2YWx1ZS0+c2VyaWFsaXplUmVzb2x2aW5nVmFyaWFibGVzKCptX3N0YXRl
LnN0eWxlKCktPnZhcmlhYmxlcygpKSk7CisKKyAgICBpZiAoa25vd25FeHByZXNzaW9ucy5jb250
YWlucyhleHByZXNzaW9uKSkKKyAgICAgICAgcmV0dXJuOyAvLyBjeWNsZSBkZXRlY3RlZC4KKwor
ICAgIGtub3duRXhwcmVzc2lvbnMuYXBwZW5kKGV4cHJlc3Npb24pOworCisgICAgLy8gRklYTUU6
IEl0IHdvdWxkIGJlIGZhc3RlciBub3QgdG8gcmUtcGFyc2UgZnJvbSBzdHJpbmdzLCBidXQgZm9y
IG5vdyBDU1MgcHJvcGVydHkgdmFsaWRhdGlvbiBsaXZlcyBpbnNpZGUgdGhlIHBhcnNlciBzbyB3
ZSBkbyBpdCB0aGVyZS4KKyAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ+IHJlc3Vs
dFNldCA9IE11dGFibGVTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKKyAgICBpZiAoIUNTU1Bh
cnNlcjo6cGFyc2VWYWx1ZShyZXN1bHRTZXQuZ2V0KCksIGlkLCBleHByZXNzaW9uLnNlY29uZCwg
ZmFsc2UsIGRvY3VtZW50KCkpKQorICAgICAgICByZXR1cm47IC8vIGV4cHJlc3Npb24gZmFpbGVk
IHRvIHBhcnNlLgorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdFNldC0+cHJv
cGVydHlDb3VudCgpOyBpKyspIHsKKyAgICAgICAgU3R5bGVQcm9wZXJ0eVNldDo6UHJvcGVydHlS
ZWZlcmVuY2UgcHJvcGVydHkgPSByZXN1bHRTZXQtPnByb3BlcnR5QXQoaSk7CisgICAgICAgIGlm
IChwcm9wZXJ0eS5pZCgpICE9IENTU1Byb3BlcnR5VmFyaWFibGUgJiYgaGFzVmFyaWFibGVSZWZl
cmVuY2UocHJvcGVydHkudmFsdWUoKSkpCisgICAgICAgICAgICByZXNvbHZlVmFyaWFibGVzKHBy
b3BlcnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCksIGtub3duRXhwcmVzc2lvbnMpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5LmlkKCksIHByb3BlcnR5
LnZhbHVlKCkpOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQoreworI2lmIEVOQUJM
RShDU1NfVkFSSUFCTEVTKQorICAgIGlmIChpZCAhPSBDU1NQcm9wZXJ0eVZhcmlhYmxlICYmIGhh
c1ZhcmlhYmxlUmVmZXJlbmNlKHZhbHVlKSkgeworICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPENT
U1Byb3BlcnR5SUQsIFN0cmluZz4gPiBrbm93bkV4cHJlc3Npb25zOworICAgICAgICByZXNvbHZl
VmFyaWFibGVzKGlkLCB2YWx1ZSwga25vd25FeHByZXNzaW9ucyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKworICAgIC8vIENTUyB2YXJpYWJsZXMgZG9uJ3QgcmVzb2x2ZSBzaG9y
dGhhbmRzIGF0IHBhcnNpbmcgdGltZSwgc28gdGhpcyBzaG91bGQgYmUgKmFmdGVyKiBoYW5kbGlu
ZyB2YXJpYWJsZXMuCisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghaXNFeHBhbmRlZFNob3J0aGFu
ZChpZCksICJTaG9ydGhhbmQgcHJvcGVydHkgaWQgPSAlZCB3YXNuJ3QgZXhwYW5kZWQgYXQgcGFy
c2luZyB0aW1lIiwgaWQpOworCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBib29s
IGlzSW5oZXJpdCA9IHN0YXRlLnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1
ZSgpOworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgKCFz
dGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSk7CisKKyAgICBB
U1NFUlQoIWlzSW5oZXJpdCB8fCAhaXNJbml0aWFsKTsgLy8gaXNJbmhlcml0IC0+ICFpc0luaXRp
YWwgJiYgaXNJbml0aWFsIC0+ICFpc0luaGVyaXQKKyAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAo
c3RhdGUucGFyZW50Tm9kZSgpICYmIHN0YXRlLnBhcmVudFN0eWxlKCkpKTsgLy8gaXNJbmhlcml0
IC0+IChzdGF0ZS5wYXJlbnROb2RlKCkgJiYgc3RhdGUucGFyZW50U3R5bGUoKSkKKworICAgIGlm
ICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgJiYgKCFzdGF0ZS5hcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgfHwgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5
KGlkKSkpIHsKKyAgICAgICAgLy8gTGltaXQgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgYXBw
bGllZCB0byBvbmx5IHRoZSBvbmVzIGhvbm9yZWQgYnkgOnZpc2l0ZWQuCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoaXNJbmhlcml0ICYmICFzdGF0ZS5wYXJlbnRTdHlsZSgpLT5o
YXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhl
cml0ZWRQcm9wZXJ0eShpZCkpCisgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldEhhc0V4
cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxF
UykKKyAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlWYXJpYWJsZSkgeworICAgICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih2YWx1ZS0+aXNWYXJpYWJsZVZhbHVlKCkpOworICAg
ICAgICBDU1NWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PENTU1ZhcmlhYmxl
VmFsdWUqPih2YWx1ZSk7CisgICAgICAgIEFTU0VSVCghdmFyaWFibGUtPm5hbWUoKS5pc0VtcHR5
KCkpOworICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT52YWx1ZSgpLmlzRW1wdHkoKSk7CisgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldFZhcmlhYmxlKHZhcmlhYmxlLT5uYW1lKCksIHZhcmlhYmxl
LT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgLy8gQ2hl
Y2sgbG9va3VwIHRhYmxlIGZvciBpbXBsZW1lbnRhdGlvbnMgYW5kIHVzZSB3aGVuIGF2YWlsYWJs
ZS4KKyAgICBjb25zdCBQcm9wZXJ0eUhhbmRsZXImIGhhbmRsZXIgPSBtX2RlcHJlY2F0ZWRTdHls
ZUJ1aWxkZXIucHJvcGVydHlIYW5kbGVyKGlkKTsKKyAgICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgaWYgKGlzSW5oZXJpdCkKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbmhl
cml0VmFsdWUoaWQsIHRoaXMpOworICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwpCisgICAgICAg
ICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVlKGlkLCB0aGlzKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKGlkLCB0aGlzLCB2YWx1ZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpID8gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSkgOiAwOworCisgICAgZmxvYXQgem9vbUZhY3RvciA9IHN0YXRlLnN0eWxlKCkt
PmVmZmVjdGl2ZVpvb20oKTsKKworICAgIC8vIFdoYXQgZm9sbG93cyBpcyBhIGxpc3QgdGhhdCBt
YXBzIHRoZSBDU1MgcHJvcGVydGllcyBpbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZnJvbnQtZW5k
CisgICAgLy8gUmVuZGVyU3R5bGUgdmFsdWVzLgorICAgIHN3aXRjaCAoaWQpIHsKKyAgICAvLyBs
aXN0cworICAgIGNhc2UgQ1NTUHJvcGVydHlDb250ZW50OgorICAgICAgICAvLyBsaXN0IG9mIHN0
cmluZywgdXJpLCBjb3VudGVyLCBhdHRyLCBpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBJbiBDU1MzLCBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIGluaGVyaXQgY29udGVudC4gSW4g
Q1NTMiBpdCBpcyBub3QuIFRoaXMKKyAgICAgICAgICAgIC8vIG5vdGUgaXMgYSByZW1pbmRlciB0
aGF0IGV2ZW50dWFsbHkgImluaGVyaXQiIG5lZWRzIHRvIGJlIHN1cHBvcnRlZC4KKworICAgICAg
ICAgICAgaWYgKGlzSW5pdGlhbCkgeworICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmNs
ZWFyQ29udGVudCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIGJvb2wgZGlkU2V0ID0gZmFsc2U7CisgICAgICAgICAgICBm
b3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5j
ZSgpKSB7CisgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7CisgICAg
ICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpdGVtLT5pc0dyYWRpZW50VmFsdWUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
Y3JlYXRlKHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPihpdGVtKS0+Z3JhZGllbnRXaXRo
U3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0KCkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50
KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NJbWFnZUdlbmVyYXRv
clZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0
cnVlOworI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQorICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXRlbS0+aXNJbWFnZVNldFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0Q29udGVudChzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250
ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAg
ICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOworI2VuZGlmCisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VWYWx1ZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJv
bVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KGl0
ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1
ZSgpLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRyKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQg
Zm9yIGFuIGF0dHIoZm9vKT8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0eWxlKCkt
PnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldFVuaXF1ZSgpOworICAgICAg
ICAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+
Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRl
KGF0dHIpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHZh
bHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOworICAgICAg
ICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAvLyByZWdp
c3RlciB0aGUgZmFjdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYWZmZWN0cyB0aGUgc3R5bGUK
KyAgICAgICAgICAgICAgICAgICAgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmF0dHJzSW5SdWxlcy5h
ZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y29udGVudFZhbHVlLT5pc0NvdW50ZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBDb3VudGVy
KiBjb3VudGVyVmFsdWUgPSBjb250ZW50VmFsdWUtPmdldENvdW50ZXJWYWx1ZSgpOworICAgICAg
ICAgICAgICAgICAgICBFTGlzdFN0eWxlVHlwZSBsaXN0U3R5bGVUeXBlID0gTm9uZUxpc3RTdHls
ZTsKKyAgICAgICAgICAgICAgICAgICAgQ1NTVmFsdWVJRCBsaXN0U3R5bGVJZGVudCA9IGNvdW50
ZXJWYWx1ZS0+bGlzdFN0eWxlSWRlbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RT
dHlsZUlkZW50ICE9IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RT
dHlsZVR5cGUgPSBzdGF0aWNfY2FzdDxFTGlzdFN0eWxlVHlwZT4obGlzdFN0eWxlSWRlbnQgLSBD
U1NWYWx1ZURpc2MpOworICAgICAgICAgICAgICAgICAgICBPd25QdHI8Q291bnRlckNvbnRlbnQ+
IGNvdW50ZXIgPSBhZG9wdFB0cihuZXcgQ291bnRlckNvbnRlbnQoY291bnRlclZhbHVlLT5pZGVu
dGlmaWVyKCksIGxpc3RTdHlsZVR5cGUsIGNvdW50ZXJWYWx1ZS0+c2VwYXJhdG9yKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjb3VudGVyLnJlbGVh
c2UoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRW
YWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVP
cGVuUXVvdGU6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250
ZW50KE9QRU5fUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVDbG9zZVF1b3RlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Q29udGVudChDTE9TRV9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vT3BlblF1b3RlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChOT19PUEVOX1FVT1RF
LCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlTm9DbG9zZVF1b3RlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0Q29udGVudChOT19DTE9TRV9RVU9URSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vcm1h
bCBhbmQgbm9uZSBkbyBub3QgaGF2ZSBhbnkgZWZmZWN0LgorICAgICAgICAgICAgICAgICAgICAg
ICAgeyB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIWRpZFNldCkKKyAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5jbGVhckNvbnRlbnQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIGNhc2UgQ1NTUHJvcGVydHlRdW90ZXM6CisgICAgICAgIGlmIChpc0luaGVyaXQpIHsKKyAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT5x
dW90ZXMoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlz
SW5pdGlhbCkgeworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKDApOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxp
c3QoKSkgeworICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NT
VmFsdWVMaXN0Kj4odmFsdWUpOworICAgICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcs
IFN0cmluZz4gPiBxdW90ZXM7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxp
c3QtPmxlbmd0aCgpOyBpICs9IDIpIHsKKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSogZmlyc3Qg
PSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAgICAgIC8vIGl0
ZW0oKSByZXR1cm5zIG51bGwgaWYgb3V0IG9mIGJvdW5kcyBzbyB0aGlzIGlzIHNhZmUuCisgICAg
ICAgICAgICAgICAgQ1NTVmFsdWUqIHNlY29uZCA9IGxpc3QtPml0ZW0oaSArIDEpOworICAgICAg
ICAgICAgICAgIGlmICghc2Vjb25kKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihmaXJzdC0+aXNQ
cmltaXRpdmVWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihzZWNvbmQtPmlzUHJpbWl0aXZlVmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
U3RyaW5nIHN0YXJ0UXVvdGUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGZpcnN0
KS0+Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZW5kUXVvdGUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHNlY29uZCktPmdldFN0cmluZ1ZhbHVlKCk7
CisgICAgICAgICAgICAgICAgcXVvdGVzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihzdGFydFF1b3Rl
LCBlbmRRdW90ZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0UXVvdGVzKFF1b3Rlc0RhdGE6OmNyZWF0ZShxdW90ZXMpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpIHsKKyAgICAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90ZXMoUXVvdGVzRGF0YTo6Y3JlYXRlKFZl
Y3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4oKSkpOworICAgICAgICB9CisgICAgICAg
IHJldHVybjsKKyAgICAvLyBTaG9ydGhhbmQgcHJvcGVydGllcy4KKyAgICBjYXNlIENTU1Byb3Bl
cnR5Rm9udDoKKyAgICAgICAgaWYgKGlzSW5oZXJpdCkgeworICAgICAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlw
dGlvbigpOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChzdGF0ZS5w
YXJlbnRTdHlsZSgpLT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgc3RhdGUu
c2V0TGluZUhlaWdodFZhbHVlKDApOworICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7CisgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKSB7CisgICAgICAg
ICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudFNldHRpbmdzKCk7CisgICAgICAgICAg
ICBBU1NFUlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNvbHV0aW9uLCB0
aGlzIGRvY3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1cyBoYXZlIHNl
dHRpbmdzCisgICAgICAgICAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOworICAgICAgICB9
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICAgICAg
ICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKKworICAgICAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0
VGhlbWUoKS0+c3lzdGVtRm9udChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpLCBmb250RGVz
Y3JpcHRpb24pOworCisgICAgICAgICAgICAvLyBEb3VibGUtY2hlY2sgYW5kIHNlZSBpZiB0aGUg
dGhlbWUgZGlkIGFueXRoaW5nLiBJZiBub3QsIGRvbid0IGJvdGhlciB1cGRhdGluZyB0aGUgZm9u
dC4KKyAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSkgewor
ICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVuZGVyaW5nIG1vZGUgYW5kIHByaW50
ZXIgZm9udCBzZXR0aW5ncyBhcmUgdXBkYXRlZC4KKyAgICAgICAgICAgICAgICBTZXR0aW5ncyog
c2V0dGluZ3MgPSBkb2N1bWVudFNldHRpbmdzKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNl
dHRpbmdzKTsgLy8gSWYgd2UncmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwgdGhpcyBkb2N1bWVu
dCBzaG91bGQgYWx3YXlzIGJlIGluIGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBzZXR0aW5ncworICAg
ICAgICAgICAgICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5n
cy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7CisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldFVzZVByaW50ZXJGb250KGRvY3VtZW50KCktPnByaW50aW5nKCkgfHwgIXNldHRpbmdzLT5z
Y3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZCgpKTsKKworICAgICAgICAgICAgICAgIC8vIEhh
bmRsZSB0aGUgem9vbSBmYWN0b3IuCisgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgp
LCBzdGF0ZS5zdHlsZSgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERl
c2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKKyAgICAgICAg
ICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNGb250VmFsdWUoKSkgeworICAgICAgICAg
ICAgRm9udFZhbHVlKiBmb250ID0gc3RhdGljX2Nhc3Q8Rm9udFZhbHVlKj4odmFsdWUpOworICAg
ICAgICAgICAgaWYgKCFmb250LT5zdHlsZSB8fCAhZm9udC0+dmFyaWFudCB8fCAhZm9udC0+d2Vp
Z2h0CisgICAgICAgICAgICAgICAgfHwgIWZvbnQtPnNpemUgfHwgIWZvbnQtPmxpbmVIZWlnaHQg
fHwgIWZvbnQtPmZhbWlseSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBh
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7Cisg
ICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZh
cmlhbnQuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRX
ZWlnaHQsIGZvbnQtPndlaWdodC5nZXQoKSk7CisgICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMg
cHJvcGVydGllcyBjYW4gZGlydHkgb3VyIGZvbnQgYnV0IHRoZXkgZG9uJ3QgdHJ5IHRvIHJlYWQg
dGhlIGZvbnQncworICAgICAgICAgICAgLy8gcHJvcGVydGllcyBiYWNrLCB3aGljaCBpcyBzYWZl
LiBIb3dldmVyIGlmIGZvbnQtc2l6ZSBpcyB1c2luZyB0aGUgJ2V4JyB1bml0LCBpdCB3aWxsCisg
ICAgICAgICAgICAvLyBuZWVkIHF1ZXJ5IHRoZSBkaXJ0aWVkIGZvbnQncyB4LWhlaWdodCB0byBn
ZXQgdGhlIGNvbXB1dGVkIHNpemUuIFRvIGJlIHNhZmUgaW4gdGhpcworICAgICAgICAgICAgLy8g
Y2FzZSwgbGV0J3MganVzdCB1cGRhdGUgdGhlIGZvbnQgbm93LgorICAgICAgICAgICAgdXBkYXRl
Rm9udCgpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBm
b250LT5zaXplLmdldCgpKTsKKworICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVl
KGZvbnQtPmxpbmVIZWlnaHQuZ2V0KCkpOworCisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5Rm9udEZhbWlseSwgZm9udC0+ZmFtaWx5LmdldCgpKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kUmVwZWF0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXI6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckJvdHRvbToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29sb3I6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJMZWZ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSYWRpdXM6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlclJpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJTcGFjaW5nOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyVG9wOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJXaWR0aDoKKyAgICBjYXNlIENTU1By
b3BlcnR5TGlzdFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW46CisgICAgY2FzZSBD
U1NQcm9wZXJ0eU91dGxpbmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93OgorICAgIGNh
c2UgQ1NTUHJvcGVydHlQYWRkaW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJvcmRlckFmdGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZv
cmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZDoKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Qm9yZGVyU3RhcnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRl
clJhZGl1czoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uczoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rmxl
eDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleEZsb3c6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEdyaWRDb2x1bW46CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRSb3c6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkNvbGxhcHNlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXJxdWVlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb246CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tSZXBlYXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBo
YXNpczoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZToKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJh
bnNmb3JtT3JpZ2luOgorICAgICAgICBBU1NFUlQoaXNFeHBhbmRlZFNob3J0aGFuZChpZCkpOwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAvLyBD
U1MzIFByb3BlcnRpZXMKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRvdzoKKyAgICBjYXNl
IENTU1Byb3BlcnR5Qm94U2hhZG93OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFk
b3c6IHsKKyAgICAgICAgaWYgKGlzSW5oZXJpdCkgeworICAgICAgICAgICAgaWYgKGlkID09IENT
U1Byb3BlcnR5VGV4dFNoYWRvdykKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUo
KS0+c2V0VGV4dFNoYWRvdyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0U2hhZG93KCkgPyBhZG9w
dFB0cihuZXcgU2hhZG93RGF0YSgqc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dFNoYWRvdygpKSkg
OiBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFk
b3coc3RhdGUucGFyZW50U3R5bGUoKS0+Ym94U2hhZG93KCkgPyBhZG9wdFB0cihuZXcgU2hhZG93
RGF0YSgqc3RhdGUucGFyZW50U3R5bGUoKS0+Ym94U2hhZG93KCkpKSA6IG51bGxwdHIpOworICAg
ICAgICB9CisgICAgICAgIGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRp
YWwgfCBub25lCisgICAgICAgICAgICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93
ID8gc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKSA6IHN0YXRlLnN0eWxlKCkt
PnNldEJveFNoYWRvdyhudWxscHRyKTsKKworICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlz
dCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRl
cmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKKyAgICAgICAgICAg
IENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7CisgICAgICAgICAgICBpZiAoIWN1cnJW
YWx1ZS0+aXNTaGFkb3dWYWx1ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgU2hhZG93VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGN1cnJW
YWx1ZSk7CisgICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50Pihz
dGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOworICAg
ICAgICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUo
KSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGlu
dCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0
ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpIDogMDsKKyAg
ICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBpdGVtLT5zcHJlYWQtPmNvbXB1
dGVMZW5ndGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpv
b21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gaXRl
bS0+c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluc2V0ID8g
SW5zZXQgOiBOb3JtYWw7CisgICAgICAgICAgICBDb2xvciBjb2xvcjsKKyAgICAgICAgICAgIGlm
IChpdGVtLT5jb2xvcikKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0
eWxlKCkpCisgICAgICAgICAgICAgICAgY29sb3IgPSBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpOwor
CisgICAgICAgICAgICBPd25QdHI8U2hhZG93RGF0YT4gc2hhZG93RGF0YSA9IGFkb3B0UHRyKG5l
dyBTaGFkb3dEYXRhKEludFBvaW50KHgsIHkpLCBibHVyLCBzcHJlYWQsIHNoYWRvd1N0eWxlLCBp
ZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgY29sb3IuaXNWYWxpZCgpID8gY29sb3Ig
OiBDb2xvcjo6dHJhbnNwYXJlbnQpKTsKKyAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0
eVRleHRTaGFkb3cpCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dFNoYWRv
dyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwgaS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlm
IHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJveFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSwg
aS5pbmRleCgpKTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBl
bnRyeQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJ
QUwoYm94UmVmbGVjdCwgQm94UmVmbGVjdCkKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7
CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hSZWZsZWN0KFJlbmRlclN0eWxlOjpp
bml0aWFsQm94UmVmbGVjdCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghdmFsdWUtPmlzUmVmbGVjdFZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgQ1NTUmVmbGVjdFZhbHVlKiByZWZsZWN0VmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NSZWZsZWN0VmFsdWUqPih2YWx1ZSk7CisgICAgICAgIFJlZlB0cjxTdHlsZVJlZmxlY3Rpb24+
IHJlZmxlY3Rpb24gPSBTdHlsZVJlZmxlY3Rpb246OmNyZWF0ZSgpOworICAgICAgICByZWZsZWN0
aW9uLT5zZXREaXJlY3Rpb24oKnJlZmxlY3RWYWx1ZS0+ZGlyZWN0aW9uKCkpOworICAgICAgICBp
ZiAocmVmbGVjdFZhbHVlLT5vZmZzZXQoKSkKKyAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9m
ZnNldChyZWZsZWN0VmFsdWUtPm9mZnNldCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2Vy
Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikpOworICAg
ICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOworICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygp
OworICAgICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUt
Pm1hc2soKSwgbWFzayk7CisgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CisKKyAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVNyYzogLy8gT25s
eSB1c2VkIGluIEBmb250LWZhY2UgcnVsZXMuCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENT
U1Byb3BlcnR5VW5pY29kZVJhbmdlOiAvLyBPbmx5IHVzZWQgaW4gQGZvbnQtZmFjZSBydWxlcy4K
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMb2NhbGU6IHsKKyAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobG9jYWxlLCBMb2NhbGUpOworICAgICAg
ICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCisgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRMb2NhbGUobnVsbEF0b20pOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmlu
Z1ZhbHVlKCkpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3Rh
dGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihzdGF0ZS5zdHlsZSgp
LT5sb2NhbGUoKSkpOworICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdERhc2hib2FyZFJlZ2lvbjoKKyAgICB7CisgICAg
ICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGRhc2hib2FyZFJlZ2lvbnMsIERhc2hib2Fy
ZFJlZ2lvbnMpCisgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVOb25lKSB7CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREYXNoYm9hcmRSZWdpb25z
KFJlbmRlclN0eWxlOjpub25lRGFzaGJvYXJkUmVnaW9ucygpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIERhc2hib2FyZFJlZ2lvbiogcmVnaW9uID0gcHJpbWl0
aXZlVmFsdWUtPmdldERhc2hib2FyZFJlZ2lvblZhbHVlKCk7CisgICAgICAgIGlmICghcmVnaW9u
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIERhc2hib2FyZFJlZ2lvbiogZmlyc3Qg
PSByZWdpb247CisgICAgICAgIHdoaWxlIChyZWdpb24pIHsKKyAgICAgICAgICAgIExlbmd0aCB0
b3AgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT50b3AoKSwgc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZl
cnRUb0ludExlbmd0aChyZWdpb24tPnJpZ2h0KCksIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUoKSk7CisgICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvSW50
TGVuZ3RoKHJlZ2lvbi0+Ym90dG9tKCksIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSk7CisgICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0ludExlbmd0aChy
ZWdpb24tPmxlZnQoKSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsK
KworICAgICAgICAgICAgaWYgKHRvcC5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIHRv
cCA9IExlbmd0aCgpOworICAgICAgICAgICAgaWYgKHJpZ2h0LmlzVW5kZWZpbmVkKCkpCisgICAg
ICAgICAgICAgICAgcmlnaHQgPSBMZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChib3R0b20uaXNV
bmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICBib3R0b20gPSBMZW5ndGgoKTsKKyAgICAgICAg
ICAgIGlmIChsZWZ0LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgbGVmdCA9IExlbmd0
aCgpOworCisgICAgICAgICAgICBpZiAocmVnaW9uLT5tX2lzQ2lyY2xlKQorICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lv
bjo6Q2lyY2xlLCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVn
aW9uID09IGZpcnN0ID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lv
bi0+bV9pc1JlY3RhbmdsZSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREYXNo
Ym9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OlJlY3RhbmdsZSwgcmVnaW9uLT5tX2xh
YmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDog
dHJ1ZSk7CisgICAgICAgICAgICByZWdpb24gPSByZWdpb24tPm1fbmV4dC5nZXQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN0YXRlLmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnMo
dHJ1ZSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorI2lmIEVOQUJMRShEUkFH
R0FCTEVfUkVHSU9OKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBcHBSZWdpb246IHsKKyAg
ICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSB8fCAhcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RHJhZ2dh
YmxlUmVnaW9uTW9kZShwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRHJh
ZyA/IERyYWdnYWJsZVJlZ2lvbkRyYWcgOiBEcmFnZ2FibGVSZWdpb25Ob0RyYWcpOworICAgICAg
ICBzdGF0ZS5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRT
dHJva2VXaWR0aDogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0ZXh0U3Ry
b2tlV2lkdGgsIFRleHRTdHJva2VXaWR0aCkKKyAgICAgICAgZmxvYXQgd2lkdGggPSAwOworICAg
ICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgY2Fz
ZSBDU1NWYWx1ZVRoaW46CisgICAgICAgIGNhc2UgQ1NTVmFsdWVNZWRpdW06CisgICAgICAgIGNh
c2UgQ1NTVmFsdWVUaGljazogeworICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IDEuMCAvIDQ4
OworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVNZWRpdW0pCisgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDM7CisgICAgICAgICAgICBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlVGhpY2spCisgICAg
ICAgICAgICAgICAgcmVzdWx0ICo9IDU7CisgICAgICAgICAgICB3aWR0aCA9IENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUocmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyktPmNvbXB1
dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwg
em9vbUZhY3Rvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxm
bG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9y
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybTogeworICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTCh0cmFuc2Zvcm0sIFRyYW5zZm9ybSk7CisgICAgICAgIFRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICAgICAgdHJhbnNmb3Jtc0ZvclZhbHVlKHN0YXRlLnN0
eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgdmFsdWUsIG9wZXJhdGlvbnMpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlOiB7Cisg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHBlcnNwZWN0aXZlLCBQZXJzcGVjdGl2
ZSkKKworICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9u
ZSkgeworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGVyc3BlY3RpdmUoMCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBwZXJzcGVjdGl2ZVZh
bHVlOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCisgICAgICAgICAg
ICBwZXJzcGVjdGl2ZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+
KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7Cisg
ICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7CisgICAgICAgICAg
ICAvLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdHJlYXQgdmFsdWVsZXNzIG51bWJlcnMg
YXMgcHguCisgICAgICAgICAgICBwZXJzcGVjdGl2ZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QWCktPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJv
b3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmIChwZXJzcGVjdGl2ZVZhbHVlID49IDAuMGYpCisgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRQZXJzcGVjdGl2ZShwZXJzcGVjdGl2ZVZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogeworICAgICAgICBIQU5ETEVf
SU5IRVJJVF9BTkRfSU5JVElBTCh0YXBIaWdobGlnaHRDb2xvciwgVGFwSGlnaGxpZ2h0Q29sb3Ip
OworICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgQ29sb3IgY29sID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUp
OworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUYXBIaWdobGlnaHRDb2xvcihjb2wpOworICAg
ICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEX09WRVJG
TE9XX1NDUk9MTElORykKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0T3ZlcmZsb3dTY3JvbGxp
bmc6IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodXNlVG91Y2hPdmVyZmxv
d1Njcm9sbGluZywgVXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyk7CisgICAgICAgIGlmICghcHJp
bWl0aXZlVmFsdWUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0VXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZyhwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlVG91Y2gpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUludmFsaWQ6CisgICAgICAgIHJldHVybjsKKyAgICAvLyBEaXJlY3Rp
b25hbCBwcm9wZXJ0aWVzIGFyZSByZXNvbHZlZCBieSByZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9w
ZXJ0eSgpIGJlZm9yZSB0aGUgc3dpdGNoLgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3Jk
ZXJFbmRDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kU3R5bGU6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZFdpZHRoOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3JkZXJTdGFydENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
b3JkZXJTdGFydFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJTdGFydFdp
ZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmVDb2xvcjoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlU3R5bGU6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlckJlZm9yZVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
b3JkZXJBZnRlckNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJBZnRlclN0
eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJBZnRlcldpZHRoOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5FbmQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hcmdpblN0YXJ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5CZWZvcmU6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkFmdGVyOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXJnaW5CZWZvcmVDb2xsYXBzZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFyZ2luVG9wQ29sbGFwc2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkFmdGVy
Q29sbGFwc2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJvdHRvbUNvbGxhcHNl
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nRW5kOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRQYWRkaW5nU3RhcnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRp
bmdCZWZvcmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdBZnRlcjoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TG9naWNhbFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRMb2dpY2FsSGVpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNaW5Mb2dpY2Fs
V2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1pbkxvZ2ljYWxIZWlnaHQ6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxXaWR0aDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWF4TG9naWNhbEhlaWdodDoKKyAgICB7CisgICAgICAgIENTU1Byb3BlcnR5SUQg
bmV3SWQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQsIHN0
YXRlLnN0eWxlKCktPmRpcmVjdGlvbigpLCBzdGF0ZS5zdHlsZSgpLT53cml0aW5nTW9kZSgpKTsK
KyAgICAgICAgQVNTRVJUKG5ld0lkICE9IGlkKTsKKyAgICAgICAgcmV0dXJuIGFwcGx5UHJvcGVy
dHkobmV3SWQsIHZhbHVlKTsKKyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNo
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0TGlu
ZVRocm91Z2g6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaENvbG9yOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hNb2RlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlUZXh0TGluZVRocm91Z2hTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJv
dWdoV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZToKKyAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dE92ZXJsaW5lQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVy
bGluZU1vZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZVN0eWxlOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4
dFVuZGVybGluZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZUNvbG9yOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lTW9kZToKKyAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dFVuZGVybGluZVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lV2lk
dGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGE6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0OgorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBDU1MgVGV4dCBMYXlvdXQgTW9kdWxlIExldmVsIDM6IFZlcnRpY2FsIHdyaXRp
bmcgc3VwcG9ydAorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcml0aW5nTW9kZTogeworICAg
ICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh3cml0aW5nTW9kZSwgV3JpdGluZ01vZGUp
OworICAgICAgICAKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgc2V0
V3JpdGluZ01vZGUoKnByaW1pdGl2ZVZhbHVlKTsKKworICAgICAgICAvLyBGSVhNRTogSXQgaXMg
bm90IG9rIHRvIG1vZGlmeSBkb2N1bWVudCBzdGF0ZSB3aGlsZSBhcHBseWluZyBzdHlsZS4KKyAg
ICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9j
dW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICBzdGF0ZS5kb2N1bWVudCgp
LT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRPcmllbnRhdGlvbjog
eworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh0ZXh0T3JpZW50YXRpb24sIFRl
eHRPcmllbnRhdGlvbik7CisKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKQorICAgICAgICAg
ICAgc2V0VGV4dE9yaWVudGF0aW9uKCpwcmltaXRpdmVWYWx1ZSk7CisKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQm94Q29udGFpbjogewor
ICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsaW5lQm94Q29udGFpbiwgTGluZUJv
eENvbnRhaW4pCisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSAmJiBwcmltaXRpdmVWYWx1ZS0+
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkgeworICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0TGluZUJveENvbnRhaW4oTGluZUJveENvbnRhaW5Ob25lKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdmFsdWUtPmlzQ1NTTGluZUJveENvbnRh
aW5WYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENTU0xpbmVCb3hDb250
YWluVmFsdWUqIGxpbmVCb3hDb250YWluVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NMaW5lQm94Q29u
dGFpblZhbHVlKj4odmFsdWUpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lQm94Q29u
dGFpbihsaW5lQm94Q29udGFpblZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIENTUyBGb250cyBNb2R1bGUgTGV2ZWwgMworICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRGb250RmVhdHVyZVNldHRpbmdzOiB7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKSB7Cisg
ICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0
aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBDU1NWYWx1ZUxpc3Qq
IGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CisgICAgICAgIFJlZlB0
cjxGb250RmVhdHVyZVNldHRpbmdzPiBzZXR0aW5ncyA9IEZvbnRGZWF0dXJlU2V0dGluZ3M6OmNy
ZWF0ZSgpOworICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0g
bGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAgIGlmICghaXRlbS0+
aXNGb250RmVhdHVyZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBGb250RmVhdHVyZVZhbHVlKiBmZWF0dXJlID0gc3RhdGljX2Nhc3Q8Rm9udEZlYXR1cmVW
YWx1ZSo+KGl0ZW0pOworICAgICAgICAgICAgc2V0dGluZ3MtPmFwcGVuZChGb250RmVhdHVyZShm
ZWF0dXJlLT50YWcoKSwgZmVhdHVyZS0+dmFsdWUoKSkpOworICAgICAgICB9CisgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRGZWF0dXJlU2V0dGluZ3Moc2V0dGluZ3MucmVsZWFzZSgpKTsKKyAg
ICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEZpbHRlcjogeworICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChmaWx0
ZXIsIEZpbHRlcik7CisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICAg
ICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIHN0YXRlLnN0eWxlKCksIHN0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKSwgb3BlcmF0aW9ucykpCisgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRGaWx0ZXIob3BlcmF0aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k
aWYKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZEF1dG9Db2x1bW5zOiB7CisgICAgICAg
IEdyaWRUcmFja1NpemUgdHJhY2tTaXplOworICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja1Np
emUodmFsdWUsIHRyYWNrU2l6ZSwgc3RhdGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkQXV0b0NvbHVtbnModHJhY2tTaXplKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZEF1dG9Sb3dzOiB7
CisgICAgICAgIEdyaWRUcmFja1NpemUgdHJhY2tTaXplOworICAgICAgICBpZiAoIWNyZWF0ZUdy
aWRUcmFja1NpemUodmFsdWUsIHRyYWNrU2l6ZSwgc3RhdGUpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkQXV0b1Jvd3ModHJhY2tTaXplKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZERlZmlu
aXRpb25Db2x1bW5zOiB7CisgICAgICAgIFZlY3RvcjxHcmlkVHJhY2tTaXplPiB0cmFja1NpemVz
OworICAgICAgICBOYW1lZEdyaWRMaW5lc01hcCBuYW1lZEdyaWRMaW5lczsKKyAgICAgICAgaWYg
KCFjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCB0cmFja1NpemVzLCBuYW1lZEdyaWRMaW5lcywg
c3RhdGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRH
cmlkQ29sdW1ucyh0cmFja1NpemVzKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRH
cmlkQ29sdW1uTGluZXMobmFtZWRHcmlkTGluZXMpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkRGVmaW5pdGlvblJvd3M6IHsKKyAgICAgICAg
VmVjdG9yPEdyaWRUcmFja1NpemU+IHRyYWNrU2l6ZXM7CisgICAgICAgIE5hbWVkR3JpZExpbmVz
TWFwIG5hbWVkR3JpZExpbmVzOworICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFs
dWUsIHRyYWNrU2l6ZXMsIG5hbWVkR3JpZExpbmVzLCBzdGF0ZSkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRSb3dzKHRyYWNrU2l6ZXMpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRSb3dMaW5lcyhuYW1lZEdyaWRMaW5lcyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3Jp
ZENvbHVtblN0YXJ0OiB7CisgICAgICAgIEdyaWRQb3NpdGlvbiBjb2x1bW5TdGFydFBvc2l0aW9u
OworICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwgY29sdW1uU3RhcnRQb3Np
dGlvbikpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdy
aWRJdGVtQ29sdW1uU3RhcnQoY29sdW1uU3RhcnRQb3NpdGlvbik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRDb2x1bW5FbmQ6IHsKKyAgICAg
ICAgR3JpZFBvc2l0aW9uIGNvbHVtbkVuZFBvc2l0aW9uOworICAgICAgICBpZiAoIWNyZWF0ZUdy
aWRQb3NpdGlvbih2YWx1ZSwgY29sdW1uRW5kUG9zaXRpb24pKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkSXRlbUNvbHVtbkVuZChjb2x1bW5FbmRQ
b3NpdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0R3JpZFJvd1N0YXJ0OiB7CisgICAgICAgIEdyaWRQb3NpdGlvbiByb3dTdGFydFBvc2l0
aW9uOworICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwgcm93U3RhcnRQb3Np
dGlvbikpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdy
aWRJdGVtUm93U3RhcnQocm93U3RhcnRQb3NpdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRSb3dFbmQ6IHsKKyAgICAgICAgR3JpZFBv
c2l0aW9uIHJvd0VuZFBvc2l0aW9uOworICAgICAgICBpZiAoIWNyZWF0ZUdyaWRQb3NpdGlvbih2
YWx1ZSwgcm93RW5kUG9zaXRpb24pKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRHcmlkSXRlbVJvd0VuZChyb3dFbmRQb3NpdGlvbik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBhbGlhc2VkIGFuZCBE
ZXByZWNhdGVkU3R5bGVCdWlsZGVyIGFscmVhZHkgYXBwbGllZCB0aGUgcHJvcGVydHkgb24gdGhl
IHByZWZpeGVkIHZlcnNpb24uCisgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb25EZWxheToK
KyAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlvbkR1cmF0aW9uOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlUcmFuc2l0aW9uUHJvcGVydHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb25U
aW1pbmdGdW5jdGlvbjoKKyAgICAgICAgcmV0dXJuOworICAgIC8vIFRoZXNlIHByb3BlcnRpZXMg
YXJlIGltcGxlbWVudGVkIGluIHRoZSBEZXByZWNhdGVkU3R5bGVCdWlsZGVyIGxvb2t1cCB0YWJs
ZS4KKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQ6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZToKKyAgICBjYXNlIENT
U1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFBvc2l0aW9uWDoKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFg6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRSZXBlYXRZOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3I6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlckJvdHRvbUxlZnRSYWRpdXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbVJpZ2h0UmFkaXVzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21TdHlsZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGg6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlckNvbGxhcHNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZU91dHNl
dDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VSZXBlYXQ6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckltYWdlU2xpY2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdl
U291cmNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxl
ZnRTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJS
aWdodFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
VG9wTGVmdFJhZGl1czoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wUmlnaHRSYWRpdXM6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJUb3BXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm90dG9tOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3hTaXppbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNhcHRpb25TaWRlOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlDbGVhcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNy
ZW1lbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvdW50ZXJSZXNldDoKKyAgICBjYXNlIENTU1By
b3BlcnR5Q3Vyc29yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246CisgICAgY2FzZSBD
U1NQcm9wZXJ0eURpc3BsYXk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUVtcHR5Q2VsbHM6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUZsb2F0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U2l6ZToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFy
aWFudDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFdlaWdodDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5SGVpZ2h0OgorI2lmIEVOQUJMRShDU1NfSU1BR0VfT1JJRU5UQVRJT04pCisgICAgY2FzZSBD
U1NQcm9wZXJ0eUltYWdlT3JpZW50YXRpb246CisjZW5kaWYKKyAgICBjYXNlIENTU1Byb3BlcnR5
SW1hZ2VSZW5kZXJpbmc6CisjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKQorICAgIGNh
c2UgQ1NTUHJvcGVydHlJbWFnZVJlc29sdXRpb246CisjZW5kaWYKKyAgICBjYXNlIENTU1Byb3Bl
cnR5TGVmdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZzoKKyAgICBjYXNlIENT
U1Byb3BlcnR5TGluZUhlaWdodDoKKyAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZVBvc2l0aW9uOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlMaXN0U3R5bGVUeXBlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b206Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbkxlZnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdp
blJpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5Ub3A6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eU1heEhlaWdodDoKKyAgICBjYXNlIENTU1Byb3BlcnR5TWF4V2lkdGg6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eU1pbkhlaWdodDoKKyAgICBjYXNlIENTU1Byb3BlcnR5TWluV2lkdGg6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eU9wYWNpdHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU9ycGhhbnM6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3V0
bGluZU9mZnNldDoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVN0eWxlOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlPdXRsaW5lV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93V3Jh
cDoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dYOgorICAgIGNhc2UgQ1NTUHJvcGVydHlP
dmVyZmxvd1k6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b206CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVBhZGRpbmdMZWZ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQ6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdUb3A6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBh
Z2VCcmVha0FmdGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtCZWZvcmU6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0luc2lkZToKKyAgICBjYXNlIENTU1Byb3BlcnR5UG9p
bnRlckV2ZW50czoKKyAgICBjYXNlIENTU1Byb3BlcnR5UG9zaXRpb246CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVJlc2l6ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5UmlnaHQ6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVNpemU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVNwZWFrOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlUYWJTaXplOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUYWJsZUxheW91dDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5VGV4dEFsaWduOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlv
bjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEluZGVudDoKKyAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dE92ZXJmbG93OgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0UmVuZGVyaW5nOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlUZXh0VHJhbnNmb3JtOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUb3A6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpOgorI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVT
KQorICAgIGNhc2UgQ1NTUHJvcGVydHlWYXJpYWJsZToKKyNlbmRpZgorICAgIGNhc2UgQ1NTUHJv
cGVydHlWZXJ0aWNhbEFsaWduOgorICAgIGNhc2UgQ1NTUHJvcGVydHlWaXNpYmlsaXR5OgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EZWxheToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25EdXJhdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRmls
bE1vZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25OYW1lOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRBbmltYXRpb25QbGF5U3RhdGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRB
cHBlYXJhbmNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBc3BlY3RSYXRpbzoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCYWNrZ3JvdW5kQ2xpcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFj
a2dyb3VuZENvbXBvc2l0ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZE9y
aWdpbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNpemU6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRl
ckltYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmc6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEFsaWduOgorI2lmIEVOQUJMRShDU1NfQk9Y
X0RFQ09SQVRJT05fQlJFQUspCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveERlY29yYXRp
b25CcmVhazoKKyNlbmRpZgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hEaXJlY3Rpb246
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEZsZXg6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJveEZsZXhHcm91cDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94TGluZXM6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9yZGluYWxHcm91cDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm94T3JpZW50OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hQ
YWNrOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2xvckNvcnJlY3Rpb246CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkF4aXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtbkJyZWFrQWZ0ZXI6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFr
QmVmb3JlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0luc2lkZToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQ291bnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtbkdhcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUHJvZ3Jl
c3Npb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvcjoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRDb2x1bW5SdWxlV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVt
blNwYW46CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbldpZHRoOgorI2lmIEVOQUJM
RShDVVJTT1JfVklTSUJJTElUWSkKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q3Vyc29yVmlz
aWJpbGl0eToKKyNlbmRpZgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbGlnbkNvbnRlbnQ6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFsaWduSXRlbXM6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEFsaWduU2VsZjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleEJhc2lz
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4RGlyZWN0aW9uOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRGbGV4R3JvdzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleFNo
cmluazoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleFdyYXA6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEp1c3RpZnlDb250ZW50OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRP
cmRlcjoKKyNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEZsb3dGcm9tOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbG93SW50bzoKKyNlbmRpZgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGb250S2VybmluZzoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Rm9udFNtb290aGluZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFZh
cmlhbnRMaWdhdHVyZXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEhpZ2hsaWdodDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlQ2hhcmFjdGVyOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdEFmdGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRIeXBoZW5hdGVMaW1pdEJlZm9yZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlw
aGVuYXRlTGltaXRMaW5lczoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuczoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUFsaWduOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRMaW5lQnJlYWs6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVDbGFtcDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUdyaWQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdExpbmVTbmFwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlRGlyZWN0aW9u
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlSW5jcmVtZW50OgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXJxdWVlUmVwZXRpdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFycXVlZVNwZWVkOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3R5
bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZToKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlT3V0c2V0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrQm94SW1hZ2VSZXBlYXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tC
b3hJbWFnZVNsaWNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3Vy
Y2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVdpZHRoOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza0NvbXBvc2l0ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUG9zaXRpb25YOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRp
b25ZOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tTaXplOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXROYnNwTW9kZToKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmVPcmlnaW46CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFBlcnNwZWN0aXZlT3JpZ2luWDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGVyc3Bl
Y3RpdmVPcmlnaW5ZOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQcmludENvbG9yQWRqdXN0
OgorI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVn
aW9uQnJlYWtBZnRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtCZWZv
cmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrSW5zaWRlOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25GcmFnbWVudDoKKyNlbmRpZgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRSdGxPcmRlcmluZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UnVi
eVBvc2l0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0Q29tYmluZToKKyNpZiBF
TkFCTEUoQ1NTM19URVhUKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlv
bkxpbmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uU3R5bGU6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uQ29sb3I6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRleHRBbGlnbkxhc3Q6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRleHRKdXN0aWZ5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0VW5kZXJsaW5lUG9z
aXRpb246CisjZW5kaWYgLy8gQ1NTM19URVhUCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRFbXBoYXNpc0NvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNQ
b3NpdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzU3R5bGU6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3I6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRTZWN1cml0eToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0
cm9rZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5ZOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5aOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2Zvcm1TdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRl
bGF5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eToKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRVc2VyRHJhZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeToK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Q2xpcFBhdGg6CisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFNoYXBlTWFyZ2luOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFw
ZVBhZGRpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5zaWRlOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZU91dHNpZGU6CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NT
X0VYQ0xVU0lPTlMpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBGbG93OgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwVGhyb3VnaDoKKyNlbmRpZgorI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKKyAgICBjYXNlIENTU1Byb3BlcnR5TWl4OgorICAgIGNhc2UgQ1NTUHJvcGVydHlQ
YXJhbWV0ZXJzOgorI2VuZGlmCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdoaXRlU3BhY2U6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdpZG93czoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2lkdGg6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdvcmRCcmVhazoKKyAgICBjYXNlIENTU1Byb3BlcnR5V29yZFNwYWNp
bmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRXcmFwOgorICAgIGNhc2UgQ1NTUHJvcGVydHla
SW5kZXg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVpvb206CisjaWYgRU5BQkxFKENTU19ERVZJQ0Vf
QURBUFRBVElPTikKKyAgICBjYXNlIENTU1Byb3BlcnR5TWF4Wm9vbToKKyAgICBjYXNlIENTU1By
b3BlcnR5TWluWm9vbToKKyAgICBjYXNlIENTU1Byb3BlcnR5T3JpZW50YXRpb246CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVVzZXJab29tOgorI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyNpZiBFTkFCTEUoU1ZHKQorICAg
ICAgICAvLyBUcnkgdGhlIFNWRyBwcm9wZXJ0aWVzCisgICAgICAgIGFwcGx5U1ZHUHJvcGVydHko
aWQsIHZhbHVlKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorfQorCitQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+aXNJbWFnZVZhbHVl
KCkpCisgICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0
YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPih2YWx1ZSkpOworCisgICAgaWYgKHZhbHVlLT5pc0lt
YWdlR2VuZXJhdG9yVmFsdWUoKSkgeworICAgICAgICBpZiAodmFsdWUtPmlzR3JhZGllbnRWYWx1
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9w
ZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KHZhbHVlKS0+Z3JhZGllbnRXaXRo
U3R5bGVzUmVzb2x2ZWQodGhpcykuZ2V0KCkpOworICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQ
ZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZh
bHVlKj4odmFsdWUpKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKKyAgICBp
ZiAodmFsdWUtPmlzSW1hZ2VTZXRWYWx1ZSgpKQorICAgICAgICByZXR1cm4gc2V0T3JQZW5kaW5n
RnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4odmFsdWUp
KTsKKyNlbmRpZgorCisgICAgaWYgKHZhbHVlLT5pc0N1cnNvckltYWdlVmFsdWUoKSkKKyAgICAg
ICAgcmV0dXJuIGN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSo+KHZhbHVlKSk7CisKKyAgICByZXR1cm4gMDsKK30KKworUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VWYWx1ZSogdmFsdWUpCit7CisgICAg
UmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7
CisgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICBtX3N0
YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICBy
ZXR1cm4gaW1hZ2UucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxl
UmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5LCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlz
UGVuZGluZygpKSB7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNl
dChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICByZXR1cm4gU3R5bGVQZW5kaW5nSW1hZ2U6OmNy
ZWF0ZSh2YWx1ZSk7CisgICAgfQorICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVh
dGUodmFsdWUpOworfQorCisjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCitQYXNzUmVmUHRyPFN0
eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBDU1NJbWFnZVNldFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBSZWZQdHI8U3R5
bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQo
KSk7CisgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICBt
X3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAg
ICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOworfQorI2VuZGlmCisKK1Bhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6Y3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIENTU0N1cnNvckltYWdlVmFsdWUqIHZhbHVlKQoreworICAgIFJlZlB0cjxT
dHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZShkb2N1bWVudCgp
KTsKKyAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgIG1f
c3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAg
IHJldHVybiBpbWFnZS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tG
b3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KQoreworICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpID09IHBhcmVudFN0eWxlLT5lZmZl
Y3RpdmVab29tKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAgIEZvbnREZXNjcmlw
dGlvbiBuZXdGb250RGVzY3JpcHRpb24oY2hpbGRGb250KTsKKyAgICBzZXRGb250U2l6ZShuZXdG
b250RGVzY3JpcHRpb24sIGNoaWxkRm9udC5zcGVjaWZpZWRTaXplKCkpOworICAgIHN0eWxlLT5z
ZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKK30KKwordm9pZCBTdHlsZVJl
c29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit7CisgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBj
aGlsZEZvbnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisKKyAgICBpZiAoY2hpbGRGb250
LmlzQWJzb2x1dGVTaXplKCkgfHwgIXBhcmVudFN0eWxlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnQgPSBwYXJlbnRTdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCk7CisgICAgaWYgKGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkgPT0g
cGFyZW50Rm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIEZvciBub3csIGx1bXAgYWxsIGZhbWlsaWVzIGJ1dCBtb25vc3BhY2UgdG9nZXRoZXIuCisg
ICAgaWYgKGNoaWxkRm9udC5nZW5lcmljRmFtaWx5KCkgIT0gRm9udERlc2NyaXB0aW9uOjpNb25v
c3BhY2VGYW1pbHkKKyAgICAgICAgJiYgcGFyZW50Rm9udC5nZW5lcmljRmFtaWx5KCkgIT0gRm9u
dERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IFdlIGtub3cgdGhlIHBhcmVudCBpcyBtb25vc3BhY2Ugb3IgdGhlIGNoaWxkIGlzIG1vbm9zcGFj
ZSwgYW5kIHRoYXQgZm9udAorICAgIC8vIHNpemUgd2FzIHVuc3BlY2lmaWVkLiBXZSB3YW50IHRv
IHNjYWxlIG91ciBmb250IHNpemUgYXMgYXBwcm9wcmlhdGUuCisgICAgLy8gSWYgdGhlIGZvbnQg
dXNlcyBhIGtleXdvcmQgc2l6ZSwgdGhlbiB3ZSByZWZldGNoIGZyb20gdGhlIHRhYmxlIHJhdGhl
ciB0aGFuCisgICAgLy8gbXVsdGlwbHlpbmcgYnkgb3VyIHNjYWxlIGZhY3Rvci4KKyAgICBmbG9h
dCBzaXplOworICAgIGlmIChjaGlsZEZvbnQua2V5d29yZFNpemUoKSkKKyAgICAgICAgc2l6ZSA9
IGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBjaGlsZEZv
bnQua2V5d29yZFNpemUoKSAtIDEsIGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkpOwor
ICAgIGVsc2UgeworICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudFNldHRpbmdz
KCk7CisgICAgICAgIGZsb2F0IGZpeGVkU2NhbGVGYWN0b3IgPSAoc2V0dGluZ3MgJiYgc2V0dGlu
Z3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkgJiYgc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgp
KQorICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxmbG9hdD4oc2V0dGluZ3MtPmRlZmF1bHRGaXhl
ZEZvbnRTaXplKCkpIC8gc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpCisgICAgICAgICAgICA6
IDE7CisgICAgICAgIHNpemUgPSBwYXJlbnRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSA/Cisg
ICAgICAgICAgICAgICAgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSAvIGZpeGVkU2NhbGVGYWN0
b3IgOgorICAgICAgICAgICAgICAgIGNoaWxkRm9udC5zcGVjaWZpZWRTaXplKCkgKiBmaXhlZFNj
YWxlRmFjdG9yOworICAgIH0KKworICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRp
b24oY2hpbGRGb250KTsKKyAgICBzZXRGb250U2l6ZShuZXdGb250RGVzY3JpcHRpb24sIHNpemUp
OworICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKK30K
Kwordm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKFNldHRpbmdzKiBzZXR0
aW5ncykKK3sKKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1p
bHkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250
UmVuZGVyaW5nTW9kZSgpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQo
ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVlbkZvbnRTdWJzdGl0dXRp
b25FbmFibGVkKCkpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3RhbmRhcmRGb250RmFtaWx5
ID0gZG9jdW1lbnRTZXR0aW5ncygpLT5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKKyAgICBpZiAoIXN0
YW5kYXJkRm9udEZhbWlseS5pc0VtcHR5KCkpCisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRP
bmVGYW1pbHkoc3RhbmRhcmRGb250RmFtaWx5KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5
d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKKyAgICBzZXRG
b250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBD
U1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsKKyAgICBtX3N0YXRlLnN0eWxlKCktPnNldExpbmVIZWln
aHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIG1fc3RhdGUuc2V0TGlu
ZUhlaWdodFZhbHVlKDApOworICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQoreworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRT
cGVjaWZpZWRTaXplKHNpemUpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgbV9zdGF0ZS5zdHls
ZSgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1
bGVzKCkpKTsKK30KKworZmxvYXQgU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNw
ZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wg
aXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVz
KQoreworICAgIGZsb2F0IHpvb21GYWN0b3IgPSAxLjBmOworICAgIGlmICghdXNlU1ZHWm9vbVJ1
bGVzKSB7CisgICAgICAgIHpvb21GYWN0b3IgPSBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAg
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAgICAgICB6
b29tRmFjdG9yICo9IGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOworICAgIH0KKworICAgIHJldHVy
biBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVu
dCwgem9vbUZhY3RvciwgaXNBYnNvbHV0ZVNpemUsIHNwZWNpZmllZFNpemUpOworfQorCitmbG9h
dCBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVu
dCogZG9jdW1lbnQsIGZsb2F0IHpvb21GYWN0b3IsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0
IHNwZWNpZmllZFNpemUsIEVTbWFydE1pbmltdW1Gb3JGb250U2l6ZSB1c2VTbWFydE1pbmltdW1G
b3JGb250U2l6ZSkKK3sKKyAgICAvLyBUZXh0IHdpdGggYSAwcHggZm9udCBzaXplIHNob3VsZCBu
b3QgYmUgdmlzaWJsZSBhbmQgdGhlcmVmb3JlIG5lZWRzIHRvIGJlCisgICAgLy8gZXhlbXB0IGZy
b20gbWluaW11bSBmb250IHNpemUgcnVsZXMuIEFjaWQzIHJlbGllcyBvbiB0aGlzIGZvciBwaXhl
bC1wZXJmZWN0CisgICAgLy8gcmVuZGVyaW5nLiBUaGlzIGlzIGFsc28gY29tcGF0aWJsZSB3aXRo
IG90aGVyIGJyb3dzZXJzIHRoYXQgaGF2ZSBtaW5pbXVtCisgICAgLy8gZm9udCBzaXplIHNldHRp
bmdzIChlLmcuIEZpcmVmb3gpLgorICAgIGlmIChmYWJzZihzcGVjaWZpZWRTaXplKSA8IHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNpbG9uKCkpCisgICAgICAgIHJldHVybiAwLjBmOwor
CisgICAgLy8gV2Ugc3VwcG9ydCB0d28gdHlwZXMgb2YgbWluaW11bSBmb250IHNpemUuIFRoZSBm
aXJzdCBpcyBhIGhhcmQgb3ZlcnJpZGUgdGhhdCBhcHBsaWVzIHRvCisgICAgLy8gYWxsIGZvbnRz
LiBUaGlzIGlzICJtaW5TaXplLiIgVGhlIHNlY29uZCB0eXBlIG9mIG1pbmltdW0gZm9udCBzaXpl
IGlzIGEgInNtYXJ0IG1pbmltdW0iCisgICAgLy8gdGhhdCBpcyBhcHBsaWVkIG9ubHkgd2hlbiB0
aGUgV2ViIHBhZ2UgY2FuJ3Qga25vdyB3aGF0IHNpemUgaXQgcmVhbGx5IGFza2VkIGZvciwgZS5n
LiwKKyAgICAvLyB3aGVuIGl0IHVzZXMgbG9naWNhbCBzaXplcyBsaWtlICJzbWFsbCIgb3IgZXhw
cmVzc2VzIHRoZSBmb250LXNpemUgYXMgYSBwZXJjZW50YWdlIG9mCisgICAgLy8gdGhlIHVzZXIn
cyBkZWZhdWx0IGZvbnQgc2V0dGluZy4KKworICAgIC8vIFdpdGggdGhlIHNtYXJ0IG1pbmltdW0s
IHdlIG5ldmVyIHdhbnQgdG8gZ2V0IHNtYWxsZXIgdGhhbiB0aGUgbWluaW11bSBmb250IHNpemUg
dG8ga2VlcCBmb250cyByZWFkYWJsZS4KKyAgICAvLyBIb3dldmVyIHdlIGFsd2F5cyBhbGxvdyB0
aGUgcGFnZSB0byBzZXQgYW4gZXhwbGljaXQgcGl4ZWwgc2l6ZSB0aGF0IGlzIHNtYWxsZXIsCisg
ICAgLy8gc2luY2Ugc2l0ZXMgd2lsbCBtaXMtcmVuZGVyIG90aGVyd2lzZSAoZS5nLiwgaHR0cDov
L3d3dy5nYW1lc3BvdC5jb20gd2l0aCBhIDlweCBtaW5pbXVtKS4KKworICAgIFNldHRpbmdzKiBz
ZXR0aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MpCisgICAg
ICAgIHJldHVybiAxLjBmOworCisgICAgaW50IG1pblNpemUgPSBzZXR0aW5ncy0+bWluaW11bUZv
bnRTaXplKCk7CisgICAgaW50IG1pbkxvZ2ljYWxTaXplID0gc2V0dGluZ3MtPm1pbmltdW1Mb2dp
Y2FsRm9udFNpemUoKTsKKyAgICBmbG9hdCB6b29tZWRTaXplID0gc3BlY2lmaWVkU2l6ZSAqIHpv
b21GYWN0b3I7CisKKyAgICAvLyBBcHBseSB0aGUgaGFyZCBtaW5pbXVtIGZpcnN0LiBXZSBvbmx5
IGFwcGx5IHRoZSBoYXJkIG1pbmltdW0gaWYgYWZ0ZXIgem9vbWluZyB3ZSdyZSBzdGlsbCB0b28g
c21hbGwuCisgICAgaWYgKHpvb21lZFNpemUgPCBtaW5TaXplKQorICAgICAgICB6b29tZWRTaXpl
ID0gbWluU2l6ZTsKKworICAgIC8vIE5vdyBhcHBseSB0aGUgInNtYXJ0IG1pbmltdW0uIiBUaGlz
IG1pbmltdW0gaXMgYWxzbyBvbmx5IGFwcGxpZWQgaWYgd2UncmUgc3RpbGwgdG9vIHNtYWxsCisg
ICAgLy8gYWZ0ZXIgem9vbWluZy4gVGhlIGZvbnQgc2l6ZSBtdXN0IGVpdGhlciBiZSByZWxhdGl2
ZSB0byB0aGUgdXNlciBkZWZhdWx0IG9yIHRoZSBvcmlnaW5hbCBzaXplCisgICAgLy8gbXVzdCBo
YXZlIGJlZW4gYWNjZXB0YWJsZS4gSW4gb3RoZXIgd29yZHMsIHdlIG9ubHkgYXBwbHkgdGhlIHNt
YXJ0IG1pbmltdW0gd2hlbmV2ZXIgd2UncmUgcG9zaXRpdmUKKyAgICAvLyBkb2luZyBzbyB3b24n
dCBkaXNydXB0IHRoZSBsYXlvdXQuCisgICAgaWYgKHVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXpl
ICYmIHpvb21lZFNpemUgPCBtaW5Mb2dpY2FsU2l6ZSAmJiAoc3BlY2lmaWVkU2l6ZSA+PSBtaW5M
b2dpY2FsU2l6ZSB8fCAhaXNBYnNvbHV0ZVNpemUpKQorICAgICAgICB6b29tZWRTaXplID0gbWlu
TG9naWNhbFNpemU7CisKKyAgICAvLyBBbHNvIGNsYW1wIHRvIGEgcmVhc29uYWJsZSBtYXhpbXVt
IHRvIHByZXZlbnQgaW5zYW5lIGZvbnQgc2l6ZXMgZnJvbSBjYXVzaW5nIGNyYXNoZXMgb24gdmFy
aW91cworICAgIC8vIHBsYXRmb3JtcyAoSSdtIGxvb2tpbmcgYXQgeW91LCBXaW5kb3dzLikKKyAg
ICByZXR1cm4gbWluKG1heGltdW1BbGxvd2VkRm9udFNpemUsIHpvb21lZFNpemUpOworfQorCitj
b25zdCBpbnQgZm9udFNpemVUYWJsZU1heCA9IDE2OworY29uc3QgaW50IGZvbnRTaXplVGFibGVN
aW4gPSA5OworY29uc3QgaW50IHRvdGFsS2V5d29yZHMgPSA4OworCisvLyBXaW5JRS9OYXY0IHRh
YmxlIGZvciBmb250IHNpemVzLiBEZXNpZ25lZCB0byBtYXRjaCB0aGUgbGVnYWN5IGZvbnQgbWFw
cGluZyBzeXN0ZW0gb2YgSFRNTC4KK3N0YXRpYyBjb25zdCBpbnQgcXVpcmtzRm9udFNpemVUYWJs
ZVtmb250U2l6ZVRhYmxlTWF4IC0gZm9udFNpemVUYWJsZU1pbiArIDFdW3RvdGFsS2V5d29yZHNd
ID0KK3sKKyAgICAgIHsgOSwgICAgOSwgICAgIDksICAgICA5LCAgICAxMSwgICAgMTQsICAgIDE4
LCAgICAyOCB9LAorICAgICAgeyA5LCAgICA5LCAgICAgOSwgICAgMTAsICAgIDEyLCAgICAxNSwg
ICAgMjAsICAgIDMxIH0sCisgICAgICB7IDksICAgIDksICAgICA5LCAgICAxMSwgICAgMTMsICAg
IDE3LCAgICAyMiwgICAgMzQgfSwKKyAgICAgIHsgOSwgICAgOSwgICAgMTAsICAgIDEyLCAgICAx
NCwgICAgMTgsICAgIDI0LCAgICAzNyB9LAorICAgICAgeyA5LCAgICA5LCAgICAxMCwgICAgMTMs
ICAgIDE2LCAgICAyMCwgICAgMjYsICAgIDQwIH0sIC8vIGZpeGVkIGZvbnQgZGVmYXVsdCAoMTMp
CisgICAgICB7IDksICAgIDksICAgIDExLCAgICAxNCwgICAgMTcsICAgIDIxLCAgICAyOCwgICAg
NDIgfSwKKyAgICAgIHsgOSwgICAxMCwgICAgMTIsICAgIDE1LCAgICAxNywgICAgMjMsICAgIDMw
LCAgICA0NSB9LAorICAgICAgeyA5LCAgIDEwLCAgICAxMywgICAgMTYsICAgIDE4LCAgICAyNCwg
ICAgMzIsICAgIDQ4IH0gLy8gcHJvcG9ydGlvbmFsIGZvbnQgZGVmYXVsdCAoMTYpCit9OworLy8g
SFRNTCAgICAgICAxICAgICAgMiAgICAgIDMgICAgICA0ICAgICAgNSAgICAgIDYgICAgICA3Cisv
LyBDU1MgIHh4cyAgIHhzICAgICBzICAgICAgbSAgICAgIGwgICAgIHhsICAgICB4eGwKKy8vICAg
ICAgICAgICAgICAgICAgICAgICAgICB8CisvLyAgICAgICAgICAgICAgICAgICAgICB1c2VyIHBy
ZWYKKworLy8gU3RyaWN0IG1vZGUgdGFibGUgbWF0Y2hlcyBNYWNJRSBhbmQgTW96aWxsYSdzIHNl
dHRpbmdzIGV4YWN0bHkuCitzdGF0aWMgY29uc3QgaW50IHN0cmljdEZvbnRTaXplVGFibGVbZm9u
dFNpemVUYWJsZU1heCAtIGZvbnRTaXplVGFibGVNaW4gKyAxXVt0b3RhbEtleXdvcmRzXSA9Cit7
CisgICAgICB7IDksICAgIDksICAgICA5LCAgICAgOSwgICAgMTEsICAgIDE0LCAgICAxOCwgICAg
MjcgfSwKKyAgICAgIHsgOSwgICAgOSwgICAgIDksICAgIDEwLCAgICAxMiwgICAgMTUsICAgIDIw
LCAgICAzMCB9LAorICAgICAgeyA5LCAgICA5LCAgICAxMCwgICAgMTEsICAgIDEzLCAgICAxNywg
ICAgMjIsICAgIDMzIH0sCisgICAgICB7IDksICAgIDksICAgIDEwLCAgICAxMiwgICAgMTQsICAg
IDE4LCAgICAyNCwgICAgMzYgfSwKKyAgICAgIHsgOSwgICAxMCwgICAgMTIsICAgIDEzLCAgICAx
NiwgICAgMjAsICAgIDI2LCAgICAzOSB9LCAvLyBmaXhlZCBmb250IGRlZmF1bHQgKDEzKQorICAg
ICAgeyA5LCAgIDEwLCAgICAxMiwgICAgMTQsICAgIDE3LCAgICAyMSwgICAgMjgsICAgIDQyIH0s
CisgICAgICB7IDksICAgMTAsICAgIDEzLCAgICAxNSwgICAgMTgsICAgIDIzLCAgICAzMCwgICAg
NDUgfSwKKyAgICAgIHsgOSwgICAxMCwgICAgMTMsICAgIDE2LCAgICAxOCwgICAgMjQsICAgIDMy
LCAgICA0OCB9IC8vIHByb3BvcnRpb25hbCBmb250IGRlZmF1bHQgKDE2KQorfTsKKy8vIEhUTUwg
ICAgICAgMSAgICAgIDIgICAgICAzICAgICAgNCAgICAgIDUgICAgICA2ICAgICAgNworLy8gQ1NT
ICB4eHMgICB4cyAgICAgcyAgICAgIG0gICAgICBsICAgICB4bCAgICAgeHhsCisvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgfAorLy8gICAgICAgICAgICAgICAgICAgICAgdXNlciBwcmVmCisK
Ky8vIEZvciB2YWx1ZXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIHRhYmxlLCB3ZSB1c2UgVG9k
ZCBGYWhybmVyJ3Mgc3VnZ2VzdGVkIHNjYWxlCisvLyBmYWN0b3JzIGZvciBlYWNoIGtleXdvcmQg
dmFsdWUuCitzdGF0aWMgY29uc3QgZmxvYXQgZm9udFNpemVGYWN0b3JzW3RvdGFsS2V5d29yZHNd
ID0geyAwLjYwZiwgMC43NWYsIDAuODlmLCAxLjBmLCAxLjJmLCAxLjVmLCAyLjBmLCAzLjBmIH07
CisKK2Zsb2F0IFN0eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5d29yZChEb2N1bWVudCogZG9j
dW1lbnQsIGludCBrZXl3b3JkLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpCit7Cisg
ICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7CisgICAgaWYgKCFz
ZXR0aW5ncykKKyAgICAgICAgcmV0dXJuIDEuMGY7CisKKyAgICBib29sIHF1aXJrc01vZGUgPSBk
b2N1bWVudC0+aW5RdWlya3NNb2RlKCk7CisgICAgaW50IG1lZGl1bVNpemUgPSBzaG91bGRVc2VG
aXhlZERlZmF1bHRTaXplID8gc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkgOiBzZXR0
aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCk7CisgICAgaWYgKG1lZGl1bVNpemUgPj0gZm9udFNpemVU
YWJsZU1pbiAmJiBtZWRpdW1TaXplIDw9IGZvbnRTaXplVGFibGVNYXgpIHsKKyAgICAgICAgLy8g
TG9vayB1cCB0aGUgZW50cnkgaW4gdGhlIHRhYmxlLgorICAgICAgICBpbnQgcm93ID0gbWVkaXVt
U2l6ZSAtIGZvbnRTaXplVGFibGVNaW47CisgICAgICAgIGludCBjb2wgPSAoa2V5d29yZCAtIENT
U1ZhbHVlWHhTbWFsbCk7CisgICAgICAgIHJldHVybiBxdWlya3NNb2RlID8gcXVpcmtzRm9udFNp
emVUYWJsZVtyb3ddW2NvbF0gOiBzdHJpY3RGb250U2l6ZVRhYmxlW3Jvd11bY29sXTsKKyAgICB9
CisKKyAgICAvLyBWYWx1ZSBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgdGFibGUuIEFwcGx5
IHRoZSBzY2FsZSBmYWN0b3IgaW5zdGVhZC4KKyAgICBmbG9hdCBtaW5Mb2dpY2FsU2l6ZSA9IG1h
eChzZXR0aW5ncy0+bWluaW11bUxvZ2ljYWxGb250U2l6ZSgpLCAxKTsKKyAgICByZXR1cm4gbWF4
KGZvbnRTaXplRmFjdG9yc1trZXl3b3JkIC0gQ1NTVmFsdWVYeFNtYWxsXSptZWRpdW1TaXplLCBt
aW5Mb2dpY2FsU2l6ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW50IGZp
bmROZWFyZXN0TGVnYWN5Rm9udFNpemUoaW50IHBpeGVsRm9udFNpemUsIGNvbnN0IFQqIHRhYmxl
LCBpbnQgbXVsdGlwbGllcikKK3sKKyAgICAvLyBJZ25vcmUgdGFibGVbMF0gYmVjYXVzZSB4eC1z
bWFsbCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSBsZWdhY3kgZm9udCBzaXplLgorICAgIGZv
ciAoaW50IGkgPSAxOyBpIDwgdG90YWxLZXl3b3JkcyAtIDE7IGkrKykgeworICAgICAgICBpZiAo
cGl4ZWxGb250U2l6ZSAqIDIgPCAodGFibGVbaV0gKyB0YWJsZVtpICsgMV0pICogbXVsdGlwbGll
cikKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gdG90YWxLZXl3b3Jk
cyAtIDE7Cit9CisKK2ludCBTdHlsZVJlc29sdmVyOjpsZWdhY3lGb250U2l6ZShEb2N1bWVudCog
ZG9jdW1lbnQsIGludCBwaXhlbEZvbnRTaXplLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNp
emUpCit7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7Cisg
ICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBib29sIHF1aXJrc01v
ZGUgPSBkb2N1bWVudC0+aW5RdWlya3NNb2RlKCk7CisgICAgaW50IG1lZGl1bVNpemUgPSBzaG91
bGRVc2VGaXhlZERlZmF1bHRTaXplID8gc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkg
OiBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCk7CisgICAgaWYgKG1lZGl1bVNpemUgPj0gZm9u
dFNpemVUYWJsZU1pbiAmJiBtZWRpdW1TaXplIDw9IGZvbnRTaXplVGFibGVNYXgpIHsKKyAgICAg
ICAgaW50IHJvdyA9IG1lZGl1bVNpemUgLSBmb250U2l6ZVRhYmxlTWluOworICAgICAgICByZXR1
cm4gZmluZE5lYXJlc3RMZWdhY3lGb250U2l6ZTxpbnQ+KHBpeGVsRm9udFNpemUsIHF1aXJrc01v
ZGUgPyBxdWlya3NGb250U2l6ZVRhYmxlW3Jvd10gOiBzdHJpY3RGb250U2l6ZVRhYmxlW3Jvd10s
IDEpOworICAgIH0KKworICAgIHJldHVybiBmaW5kTmVhcmVzdExlZ2FjeUZvbnRTaXplPGZsb2F0
PihwaXhlbEZvbnRTaXplLCBmb250U2l6ZUZhY3RvcnMsIG1lZGl1bVNpemUpOworfQorCitzdGF0
aWMgQ29sb3IgY29sb3JGb3JDU1NWYWx1ZShDU1NWYWx1ZUlEIGNzc1ZhbHVlSWQpCit7CisgICAg
c3RydWN0IENvbG9yVmFsdWUgeworICAgICAgICBDU1NWYWx1ZUlEIGNzc1ZhbHVlSWQ7CisgICAg
ICAgIFJHQkEzMiBjb2xvcjsKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IENvbG9yVmFsdWUg
Y29sb3JWYWx1ZXNbXSA9IHsKKyAgICAgICAgeyBDU1NWYWx1ZUFxdWEsIDB4RkYwMEZGRkYgfSwK
KyAgICAgICAgeyBDU1NWYWx1ZUJsYWNrLCAweEZGMDAwMDAwIH0sCisgICAgICAgIHsgQ1NTVmFs
dWVCbHVlLCAweEZGMDAwMEZGIH0sCisgICAgICAgIHsgQ1NTVmFsdWVGdWNoc2lhLCAweEZGRkYw
MEZGIH0sCisgICAgICAgIHsgQ1NTVmFsdWVHcmF5LCAweEZGODA4MDgwIH0sCisgICAgICAgIHsg
Q1NTVmFsdWVHcmVlbiwgMHhGRjAwODAwMCAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZUdyZXksIDB4
RkY4MDgwODAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZUxpbWUsIDB4RkYwMEZGMDAgfSwKKyAgICAg
ICAgeyBDU1NWYWx1ZU1hcm9vbiwgMHhGRjgwMDAwMCB9LAorICAgICAgICB7IENTU1ZhbHVlTmF2
eSwgMHhGRjAwMDA4MCB9LAorICAgICAgICB7IENTU1ZhbHVlT2xpdmUsIDB4RkY4MDgwMDAgIH0s
CisgICAgICAgIHsgQ1NTVmFsdWVPcmFuZ2UsIDB4RkZGRkE1MDAgfSwKKyAgICAgICAgeyBDU1NW
YWx1ZVB1cnBsZSwgMHhGRjgwMDA4MCB9LAorICAgICAgICB7IENTU1ZhbHVlUmVkLCAweEZGRkYw
MDAwIH0sCisgICAgICAgIHsgQ1NTVmFsdWVTaWx2ZXIsIDB4RkZDMEMwQzAgfSwKKyAgICAgICAg
eyBDU1NWYWx1ZVRlYWwsIDB4RkYwMDgwODAgIH0sCisgICAgICAgIHsgQ1NTVmFsdWVUcmFuc3Bh
cmVudCwgMHgwMDAwMDAwMCB9LAorICAgICAgICB7IENTU1ZhbHVlV2hpdGUsIDB4RkZGRkZGRkYg
fSwKKyAgICAgICAgeyBDU1NWYWx1ZVllbGxvdywgMHhGRkZGRkYwMCB9LAorICAgICAgICB7IENT
U1ZhbHVlSW52YWxpZCwgQ1NTVmFsdWVJbnZhbGlkIH0KKyAgICB9OworCisgICAgZm9yIChjb25z
dCBDb2xvclZhbHVlKiBjb2wgPSBjb2xvclZhbHVlczsgY29sLT5jc3NWYWx1ZUlkOyArK2NvbCkg
eworICAgICAgICBpZiAoY29sLT5jc3NWYWx1ZUlkID09IGNzc1ZhbHVlSWQpCisgICAgICAgICAg
ICByZXR1cm4gY29sLT5jb2xvcjsKKyAgICB9CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpkZWZh
dWx0VGhlbWUoKS0+c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7Cit9CisKK2Jvb2wgU3R5bGVSZXNv
bHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9tRWxlbWVudChDU1NQcmlt
aXRpdmVWYWx1ZSogdmFsdWUpCit7CisgICAgaW50IGlkZW50ID0gdmFsdWUtPmdldFZhbHVlSUQo
KTsKKyAgICBzd2l0Y2ggKGlkZW50KSB7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFRleHQ6Cisg
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExpbms6CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEFjdGl2
ZWxpbms6CisgICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworQ29s
b3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFs
dWUqIHZhbHVlLCBib29sIGZvclZpc2l0ZWRMaW5rKSBjb25zdAoreworICAgIGlmICh2YWx1ZS0+
aXNSR0JDb2xvcigpKQorICAgICAgICByZXR1cm4gQ29sb3IodmFsdWUtPmdldFJHQkEzMlZhbHVl
KCkpOworCisgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKyAgICBDU1NWYWx1ZUlE
IGlkZW50ID0gdmFsdWUtPmdldFZhbHVlSUQoKTsKKyAgICBzd2l0Y2ggKGlkZW50KSB7CisgICAg
Y2FzZSAwOgorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0
VGV4dDoKKyAgICAgICAgcmV0dXJuIHN0YXRlLmRvY3VtZW50KCktPnRleHRDb2xvcigpOworICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRMaW5rOgorICAgICAgICByZXR1cm4gKHN0YXRlLmVsZW1lbnQo
KS0+aXNMaW5rKCkgJiYgZm9yVmlzaXRlZExpbmspID8gc3RhdGUuZG9jdW1lbnQoKS0+dmlzaXRl
ZExpbmtDb2xvcigpIDogc3RhdGUuZG9jdW1lbnQoKS0+bGlua0NvbG9yKCk7CisgICAgY2FzZSBD
U1NWYWx1ZVdlYmtpdEFjdGl2ZWxpbms6CisgICAgICAgIHJldHVybiBzdGF0ZS5kb2N1bWVudCgp
LT5hY3RpdmVMaW5rQ29sb3IoKTsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29s
b3I6CisgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6Zm9jdXNSaW5nQ29sb3IoKTsKKyAgICBj
YXNlIENTU1ZhbHVlQ3VycmVudGNvbG9yOgorICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUoKS0+
Y29sb3IoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gY29sb3JGb3JDU1NWYWx1ZShp
ZGVudCk7CisgICAgfQorfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkZFZpZXdwb3J0RGVwZW5k
ZW50TWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwKiBleHByLCBib29sIHJlc3Vs
dCkKK3sKKyAgICBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuYXBwZW5kKGFk
b3B0UHRyKG5ldyBNZWRpYVF1ZXJ5UmVzdWx0KCpleHByLCByZXN1bHQpKSk7Cit9CisKK2Jvb2wg
U3R5bGVSZXNvbHZlcjo6YWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKCkgY29uc3QKK3sKKyAgICB1
bnNpZ25lZCBzID0gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLnNpemUoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgczsgaSsrKSB7CisgICAgICAgIGlmIChtX21l
ZGl1bS0+ZXZhbCgmbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLT5tX2V4
cHJlc3Npb24pICE9IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0c1tpXS0+bV9y
ZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorc3RhdGljIEZpbHRlck9wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZSBmaWx0ZXJPcGVyYXRpb25Gb3JUeXBlKFdlYktpdENTU0ZpbHRlclZhbHVl
OjpGaWx0ZXJPcGVyYXRpb25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOgorICAg
ICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U7CisgICAgY2FzZSBXZWJLaXRD
U1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmlsdGVyT3BlcmF0aW9uOgorICAgICAgICByZXR1cm4g
RmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU7CisgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6U2VwaWFGaWx0ZXJPcGVyYXRpb246CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246
OlNFUElBOworICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNhdHVyYXRlRmlsdGVyT3Bl
cmF0aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTsKKyAgICBj
YXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpIdWVSb3RhdGVGaWx0ZXJPcGVyYXRpb246CisgICAg
ICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU7CisgICAgY2FzZSBXZWJLaXRD
U1NGaWx0ZXJWYWx1ZTo6SW52ZXJ0RmlsdGVyT3BlcmF0aW9uOgorICAgICAgICByZXR1cm4gRmls
dGVyT3BlcmF0aW9uOjpJTlZFUlQ7CisgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6T3Bh
Y2l0eUZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6T1BB
Q0lUWTsKKyAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmlnaHRuZXNzRmlsdGVyT3Bl
cmF0aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOworICAg
IGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkNvbnRyYXN0RmlsdGVyT3BlcmF0aW9uOgorICAg
ICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDsKKyAgICBjYXNlIFdlYktpdENT
U0ZpbHRlclZhbHVlOjpCbHVyRmlsdGVyT3BlcmF0aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVy
T3BlcmF0aW9uOjpCTFVSOworICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkRyb3BTaGFk
b3dGaWx0ZXJPcGVyYXRpb246CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkRST1Bf
U0hBRE9XOworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBjYXNlIFdlYktpdENTU0ZpbHRl
clZhbHVlOjpDdXN0b21GaWx0ZXJPcGVyYXRpb246CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVy
YXRpb246OkNVU1RPTTsKKyNlbmRpZgorICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlVu
a25vd25GaWx0ZXJPcGVyYXRpb246CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246Ok5P
TkU7CisgICAgfQorICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246Ok5PTkU7Cit9CisKKyNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Omxv
YWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCkKK3sKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwor
CisgICAgLy8gQ3Jhc2ggcmVwb3J0cyBpbmRpY2F0ZSB0aGF0IHdlJ3ZlIHNlZW4gY2FsbHMgdG8g
dGhpcyBmdW5jdGlvbiB3aGVuIG91cgorICAgIC8vIHN0eWxlIGlzIE5VTEwuIFdlIGRvbid0IGtu
b3cgZXhhY3RseSB3aHkgdGhpcyBoYXBwZW5zLiBPdXIgZ3Vlc3MgaXMKKyAgICAvLyByZWVudGVy
aW5nIHN0eWxlRm9yRWxlbWVudCgpLgorICAgIEFTU0VSVChzdGF0ZS5zdHlsZSgpKTsKKyAgICBp
ZiAoIXN0YXRlLnN0eWxlKCkgfHwgIXN0YXRlLnN0eWxlKCktPmhhc0ZpbHRlcigpIHx8IHN0YXRl
LnBlbmRpbmdTVkdEb2N1bWVudHMoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IHN0YXRlLmRvY3Vt
ZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJP
cGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBzdGF0ZS5zdHlsZSgpLT5tdXRhYmxlRmls
dGVyKCkub3BlcmF0aW9ucygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJP
cGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+
IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQoaSk7CisgICAgICAgIGlmIChm
aWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJPcGVyYXRpb246OlJF
RkVSRU5DRSkgeworICAgICAgICAgICAgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKiByZWZlcmVu
Y2VGaWx0ZXIgPSBzdGF0aWNfY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJP
cGVyYXRpb24uZ2V0KCkpOworCisgICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVl
KiB2YWx1ZSA9IHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5nZXQocmVmZXJlbmNlRmlsdGVy
KTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBDYWNoZWRTVkdEb2N1bWVudCogY2FjaGVkRG9jdW1lbnQgPSB2YWx1ZS0+bG9h
ZChjYWNoZWRSZXNvdXJjZUxvYWRlcik7CisgICAgICAgICAgICBpZiAoIWNhY2hlZERvY3VtZW50
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyBTdGFzaCB0aGUg
Q2FjaGVkU1ZHRG9jdW1lbnQgb24gdGhlIHJlZmVyZW5jZSBmaWx0ZXIuCisgICAgICAgICAgICBy
ZWZlcmVuY2VGaWx0ZXItPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFkb3B0UHRyKG5l
dyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShjYWNoZWREb2N1bWVudCkpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuY2xlYXIoKTsKK30KKyNl
bmRpZgorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2
ZXI6OnN0eWxlU2hhZGVyKENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzV2Vi
S2l0Q1NTU2hhZGVyVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ1N0eWxl
U2hhZGVyRnJvbVZhbHVlKHN0YXRpY19jYXN0PFdlYktpdENTU1NoYWRlclZhbHVlKj4odmFsdWUp
KTsKKyAgICByZXR1cm4gMDsKK30KKworU3R5bGVTaGFkZXIqIFN0eWxlUmVzb2x2ZXI6OmNhY2hl
ZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFdlYktpdENTU1NoYWRlclZhbHVlKiB2YWx1
ZSkKK3sKKyAgICBTdHlsZVNoYWRlciogc2hhZGVyID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ1No
YWRlcigpOworICAgIGlmIChzaGFkZXIgJiYgc2hhZGVyLT5pc1BlbmRpbmdTaGFkZXIoKSkKKyAg
ICAgICAgbV9zdGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyh0cnVlKTsKKyAgICByZXR1cm4gc2hh
ZGVyOworfQorCitQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclByb2dyYW0+IFN0eWxlUmVzb2x2ZXI6
Omxvb2t1cEN1c3RvbUZpbHRlclByb2dyYW0oV2ViS2l0Q1NTU2hhZGVyVmFsdWUqIHZlcnRleFNo
YWRlciwgV2ViS2l0Q1NTU2hhZGVyVmFsdWUqIGZyYWdtZW50U2hhZGVyLCAKKyAgICBDdXN0b21G
aWx0ZXJQcm9ncmFtVHlwZSBwcm9ncmFtVHlwZSwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbU1p
eFNldHRpbmdzJiBtaXhTZXR0aW5ncywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUpCit7
CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0
ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworICAgIEtVUkwgdmVydGV4U2hh
ZGVyVVJMID0gdmVydGV4U2hhZGVyID8gdmVydGV4U2hhZGVyLT5jb21wbGV0ZVVSTChjYWNoZWRS
ZXNvdXJjZUxvYWRlcikgOiBLVVJMKCk7CisgICAgS1VSTCBmcmFnbWVudFNoYWRlclVSTCA9IGZy
YWdtZW50U2hhZGVyID8gZnJhZ21lbnRTaGFkZXItPmNvbXBsZXRlVVJMKGNhY2hlZFJlc291cmNl
TG9hZGVyKSA6IEtVUkwoKTsKKyAgICBSZWZQdHI8U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtPiBw
cm9ncmFtOworICAgIGlmIChtX2N1c3RvbUZpbHRlclByb2dyYW1DYWNoZSkKKyAgICAgICAgcHJv
Z3JhbSA9IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hlLT5sb29rdXAoQ3VzdG9tRmlsdGVyUHJv
Z3JhbUluZm8odmVydGV4U2hhZGVyVVJMLCBmcmFnbWVudFNoYWRlclVSTCwgcHJvZ3JhbVR5cGUs
IG1peFNldHRpbmdzLCBtZXNoVHlwZSkpOworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICAv
LyBDcmVhdGUgYSBuZXcgU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtIHRoYXQgd2lsbCBiZSByZXNv
bHZlZCBkdXJpbmcgdGhlIGxvYWRQZW5kaW5nU2hhZGVycyBhbmQgYWRkZWQgdG8gdGhlIGNhY2hl
LgorICAgICAgICBwcm9ncmFtID0gU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUodmVy
dGV4U2hhZGVyVVJMLCB2ZXJ0ZXhTaGFkZXIgPyBzdHlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpIDog
MCwgCisgICAgICAgICAgICBmcmFnbWVudFNoYWRlclVSTCwgZnJhZ21lbnRTaGFkZXIgPyBzdHls
ZVNoYWRlcihmcmFnbWVudFNoYWRlcikgOiAwLCBwcm9ncmFtVHlwZSwgbWl4U2V0dGluZ3MsIG1l
c2hUeXBlKTsKKyAgICB9CisgICAgcmV0dXJuIHByb2dyYW0ucmVsZWFzZSgpOworfQorCit2b2lk
IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCit7CisgICAgLy8gRklYTUU6IFdl
IHNob3VsZG4ndCBoYXZlIHRvIGNoZWNrIHRoYXQgc3R5bGUgaXMgbm9uLW51bGwuIFRoaXMgaXMg
YSBzcGVjdWxhdGl2ZSBmaXggZm9yOgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTc2NjUKKyAgICBpZiAoIW1fc3RhdGUuaGFzUGVuZGluZ1NoYWRlcnMo
KSB8fCAhbV9zdGF0ZS5zdHlsZSgpIHx8ICFtX3N0YXRlLnN0eWxlKCktPmhhc0ZpbHRlcigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIgPSBtX3N0YXRlLmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisK
KyAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9
IG1fc3RhdGUuc3R5bGUoKS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAg
ICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVy
YXRpb25zLmF0KGkpOworICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25U
eXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKKyAgICAgICAgICAgIEN1c3RvbUZp
bHRlck9wZXJhdGlvbiogY3VzdG9tRmlsdGVyID0gc3RhdGljX2Nhc3Q8Q3VzdG9tRmlsdGVyT3Bl
cmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uLmdldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChjdXN0
b21GaWx0ZXItPnByb2dyYW0oKSk7CisgICAgICAgICAgICBTdHlsZUN1c3RvbUZpbHRlclByb2dy
YW0qIHByb2dyYW0gPSBzdGF0aWNfY2FzdDxTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0qPihjdXN0
b21GaWx0ZXItPnByb2dyYW0oKSk7CisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIFN0eWxl
UGVuZGluZ1NoYWRlcnMgY291bGQgYmUgYWxyZWFkeSByZXNvbHZlZCB0byBTdHlsZUNhY2hlZFNo
YWRlcnMuIFRoYXQncyBiZWNhdXNlIHRoZSBydWxlIHdhcyBtYXRjaGVkIGJlZm9yZS4KKyAgICAg
ICAgICAgIC8vIEhvd2V2ZXIsIHRoZSBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0gdGhhdCB3YXMg
aW5pdGlhbGx5IGNyZWF0ZWQgY291bGQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUg
aW4gdGhlIG1lYW53aGlsZSwKKyAgICAgICAgICAgIC8vIG1lYW5pbmcgdGhhdCB3ZSBnZXQgYSBu
ZXcgU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtIGhlcmUgdGhhdCBpcyBub3QgeWV0IGluIHRoZSBj
YWNoZSwgYnV0IGFscmVhZHkgaGFzIGxvYWRlZCBTdHlsZVNoYWRlcnMuCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW0tPmhhc1BlbmRpbmdTaGFkZXJzKCkgJiYgcHJvZ3JhbS0+aW5DYWNoZSgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFtX2N1c3RvbUZpbHRl
clByb2dyYW1DYWNoZSkKKyAgICAgICAgICAgICAgICBtX2N1c3RvbUZpbHRlclByb2dyYW1DYWNo
ZSA9IGFkb3B0UHRyKG5ldyBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW1DYWNoZSgpKTsKKyAgICAg
ICAgICAgIFJlZlB0cjxTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0+IHN0eWxlUHJvZ3JhbSA9IG1f
Y3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hlLT5sb29rdXAocHJvZ3JhbSk7CisgICAgICAgICAgICBp
ZiAoc3R5bGVQcm9ncmFtLmdldCgpKQorICAgICAgICAgICAgICAgIGN1c3RvbUZpbHRlci0+c2V0
UHJvZ3JhbShzdHlsZVByb2dyYW0ucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGlmIChwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKSAmJiBwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS0+aXNQZW5kaW5nU2hhZGVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgV2Vi
S2l0Q1NTU2hhZGVyVmFsdWUqIHNoYWRlclZhbHVlID0gc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5n
U2hhZGVyKj4ocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkpLT5jc3NTaGFkZXJWYWx1ZSgpOworICAg
ICAgICAgICAgICAgICAgICBwcm9ncmFtLT5zZXRWZXJ0ZXhTaGFkZXIoc2hhZGVyVmFsdWUtPmNh
Y2hlZFNoYWRlcihjYWNoZWRSZXNvdXJjZUxvYWRlcikpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKSAmJiBwcm9ncmFtLT5m
cmFnbWVudFNoYWRlcigpLT5pc1BlbmRpbmdTaGFkZXIoKSkgeworICAgICAgICAgICAgICAgICAg
ICBXZWJLaXRDU1NTaGFkZXJWYWx1ZSogc2hhZGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxTdHlsZVBl
bmRpbmdTaGFkZXIqPihwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpKS0+Y3NzU2hhZGVyVmFsdWUo
KTsKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+c2V0RnJhZ21lbnRTaGFkZXIoc2hhZGVy
VmFsdWUtPmNhY2hlZFNoYWRlcihjYWNoZWRSZXNvdXJjZUxvYWRlcikpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBtX2N1c3RvbUZpbHRlclByb2dyYW1DYWNoZS0+YWRkKHBy
b2dyYW0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIG1fc3RhdGUuc2V0
SGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpOworfQorCitzdGF0aWMgYm9vbCBzb3J0UGFyYW1ldGVy
c0J5TmFtZUNvbXBhcmF0b3IoY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGEs
IGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBiKQoreworICAgIHJldHVybiBj
b2RlUG9pbnRDb21wYXJlTGVzc1RoYW4oYS0+bmFtZSgpLCBiLT5uYW1lKCkpOworfQorCitQYXNz
UmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21G
aWx0ZXJBcnJheVBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCogdmFs
dWVzLCBib29sIGlzQXJyYXkpCit7CisgICAgUmVmUHRyPEN1c3RvbUZpbHRlckFycmF5UGFyYW1l
dGVyPiBhcnJheVBhcmFtZXRlciA9IEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyOjpjcmVhdGUo
bmFtZSwgaXNBcnJheSA/IEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyOjpBUlJBWSA6IEN1c3Rv
bUZpbHRlckFycmF5UGFyYW1ldGVyOjpNQVRSSVgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDAs
IGxlbmd0aCA9IHZhbHVlcy0+bGVuZ3RoKCk7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBD
U1NWYWx1ZSogdmFsdWUgPSB2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAg
ICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5wcmltaXRpdmVUeXBlKCkgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgYXJyYXlQYXJhbWV0ZXItPmFkZFZhbHVlKHByaW1p
dGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIGFycmF5UGFy
YW1ldGVyLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+
IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyQ29sb3JQYXJhbWV0ZXIoY29uc3QgU3Ry
aW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqIHZhbHVlcykKK3sKKyAgICBBU1NFUlQodmFsdWVzLT5s
ZW5ndGgoKSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0UHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjaygwKSk7CisgICAgUmVmUHRyPEN1c3RvbUZpbHRlckNvbG9yUGFyYW1ldGVyPiBjb2xvclBh
cmFtZXRlciA9IEN1c3RvbUZpbHRlckNvbG9yUGFyYW1ldGVyOjpjcmVhdGUobmFtZSk7CisgICAg
Y29sb3JQYXJhbWV0ZXItPnNldENvbG9yKENvbG9yKGZpcnN0UHJpbWl0aXZlVmFsdWUtPmdldFJH
QkEzMlZhbHVlKCkpKTsKKyAgICByZXR1cm4gY29sb3JQYXJhbWV0ZXIucmVsZWFzZSgpOworfQor
CitQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VD
dXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxp
c3QqIHZhbHVlcykKK3sKKyAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyPiBu
dW1iZXJQYXJhbWV0ZXIgPSBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXI6OmNyZWF0ZShuYW1l
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLT5sZW5ndGgoKTsgKytpKSB7
CisgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
ayhpKTsKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBudW1iZXJQYXJhbWV0ZXItPmFk
ZFZhbHVlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpKTsKKyAgICB9CisgICAgcmV0
dXJuIG51bWJlclBhcmFtZXRlci5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBh
cmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCogdmFsdWVzKQoreworICAg
IFJlZlB0cjxDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI+IHRyYW5zZm9ybVBhcmFtZXRl
ciA9IEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOworICAgIFRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICB0cmFuc2Zvcm1zRm9yVmFsdWUobV9z
dGF0ZS5zdHlsZSgpLCBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgdmFsdWVzLCBvcGVyYXRp
b25zKTsKKyAgICB0cmFuc2Zvcm1QYXJhbWV0ZXItPnNldE9wZXJhdGlvbnMob3BlcmF0aW9ucyk7
CisgICAgcmV0dXJuIHRyYW5zZm9ybVBhcmFtZXRlci5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRl
clBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlKiBwYXJhbWV0ZXJWYWx1ZSkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhcmFtZXRlcnMgdHlwZXMgcGFyc2lu
Zy4KKyAgICAvLyB0ZXh0dXJlczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcxNDQyCisgICAgLy8gbWF0MiwgbWF0MywgbWF0NDogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcxNDQ0CisgICAgLy8gTnVtYmVyIHBhcmFtZXRlcnMgYXJlIHdy
YXBwZWQgaW5zaWRlIGEgQ1NTVmFsdWVMaXN0IGFuZCBhbGwKKyAgICAvLyB0aGUgb3RoZXIgZnVu
Y3Rpb25zIHZhbHVlcyBpbmhlcml0IGZyb20gQ1NTVmFsdWVMaXN0LgorICAgIGlmICghcGFyYW1l
dGVyVmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ1NTVmFs
dWVMaXN0KiB2YWx1ZXMgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihwYXJhbWV0ZXJWYWx1
ZSk7CisgICAgaWYgKCF2YWx1ZXMtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGlmIChwYXJhbWV0ZXJWYWx1ZS0+aXNXZWJLaXRDU1NBcnJheUZ1bmN0aW9uVmFsdWUoKSkKKyAg
ICAgICAgcmV0dXJuIHBhcnNlQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIobmFtZSwgdmFsdWVz
LCB0cnVlKTsKKworICAgIGlmIChwYXJhbWV0ZXJWYWx1ZS0+aXNXZWJLaXRDU1NNYXRGdW5jdGlv
blZhbHVlKCkpCisgICAgICAgIHJldHVybiBwYXJzZUN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVy
KG5hbWUsIHZhbHVlcywgZmFsc2UpOworCisgICAgLy8gSWYgdGhlIGZpcnN0IHZhbHVlIG9mIHRo
ZSBsaXN0IGlzIGEgdHJhbnNmb3JtIGZ1bmN0aW9uLAorICAgIC8vIHRoZW4gd2UgY291bGQgc2Fm
ZWx5IGFzc3VtZSB0aGF0IGFsbCB0aGUgcmVtYWluaW5nIGl0ZW1zCisgICAgLy8gYXJlIHRyYW5z
Zm9ybXMuIHBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyIHdpbGwKKyAgICAvLyBy
ZXR1cm4gMCBpZiB0aGF0IGFzc3VtcHRpb24gaXMgaW5jb3JyZWN0LgorICAgIGlmICh2YWx1ZXMt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCktPmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSkK
KyAgICAgICAgcmV0dXJuIHBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKG5hbWUs
IHZhbHVlcyk7CisKKyAgICAvLyBXZSBjYW4gb25seSBoYXZlIGFycmF5cyBvZiBjb2xvcnMgb3Ig
bnVtYmVycywgc28gdXNlIHRoZSBmaXJzdCB2YWx1ZSB0byBjaG9vc2UgYmV0d2VlbiB0aG9zZSB0
d28uCisgICAgLy8gV2UgbmVlZCB1cCB0byA0IHZhbHVlcyAoYWxsIGJvb2xlYW5zIG9yIGFsbCBu
dW1iZXJzKS4KKyAgICBpZiAoIXZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKS0+aXNQ
cmltaXRpdmVWYWx1ZSgpIHx8IHZhbHVlcy0+bGVuZ3RoKCkgPiA0KQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RQcmltaXRpdmVWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDApKTsKKyAgICBpZiAoZmlyc3RQcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQorICAgICAgICByZXR1cm4gcGFyc2VDdXN0
b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIobmFtZSwgdmFsdWVzKTsKKworICAgIGlmIChmaXJzdFBy
aW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19S
R0JDT0xPUikKKyAgICAgICAgcmV0dXJuIHBhcnNlQ3VzdG9tRmlsdGVyQ29sb3JQYXJhbWV0ZXIo
bmFtZSwgdmFsdWVzKTsKKworICAgIHJldHVybiAwOworfQorCitib29sIFN0eWxlUmVzb2x2ZXI6
OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChDU1NWYWx1ZSogcGFyYW1ldGVyc1ZhbHVl
LCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJMaXN0KQoreworICAgIEhhc2hT
ZXQ8U3RyaW5nPiBrbm93blBhcmFtZXRlck5hbWVzOworICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9y
IHBhcmFtZXRlckl0ZXJhdG9yKHBhcmFtZXRlcnNWYWx1ZSk7CisgICAgZm9yICg7IHBhcmFtZXRl
ckl0ZXJhdG9yLmhhc01vcmUoKTsgcGFyYW1ldGVySXRlcmF0b3IuYWR2YW5jZSgpKSB7CisgICAg
ICAgIGlmICghcGFyYW1ldGVySXRlcmF0b3IudmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXRlcmF0
b3IocGFyYW1ldGVySXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAgIGlmICghaXRlcmF0b3IuaXNQ
cmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPnBy
aW1pdGl2ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBuYW1lID0gcHJpbWl0
aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAgIC8vIERvIG5vdCBhbGxvdyBkdXBs
aWNhdGUgcGFyYW1ldGVyIG5hbWVzLgorICAgICAgICBpZiAoa25vd25QYXJhbWV0ZXJOYW1lcy5j
b250YWlucyhuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAga25vd25Q
YXJhbWV0ZXJOYW1lcy5hZGQobmFtZSk7CisgICAgICAgIAorICAgICAgICBpdGVyYXRvci5hZHZh
bmNlKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWl0ZXJhdG9yLmhhc01vcmUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxDdXN0b21GaWx0
ZXJQYXJhbWV0ZXI+IHBhcmFtZXRlciA9IHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKG5hbWUs
IGl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICBpZiAoIXBhcmFtZXRlcikKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcGFyYW1ldGVyTGlzdC5hcHBlbmQocGFyYW1ldGVyLnJl
bGVhc2UoKSk7CisgICAgfQorICAgIAorICAgIC8vIE1ha2Ugc3VyZSB3ZSBzb3J0IHRoZSBwYXJh
bWV0ZXJzIGJlZm9yZSBwYXNzaW5nIHRoZW0gZG93biB0byB0aGUgQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uLgorICAgIHN0ZDo6c29ydChwYXJhbWV0ZXJMaXN0LmJlZ2luKCksIHBhcmFtZXRlckxpc3Qu
ZW5kKCksIHNvcnRQYXJhbWV0ZXJzQnlOYW1lQ29tcGFyYXRvcik7CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29s
dmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoQXRSdWxlUmVmZXJlbmNlU3ludGF4
KFdlYktpdENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSkKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHN0eWxlIHJlc29sdXRpb24gZm9yIHRoZSBjdXN0b20gZmlsdGVyIGF0LXJ1bGUgcmVm
ZXJlbmNlIHN5bnRheC4KKyAgICBVTlVTRURfUEFSQU0oZmlsdGVyVmFsdWUpOworICAgIHJldHVy
biAwOworfQorCitQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZl
cjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aElubGluZVN5bnRheChXZWJLaXRDU1NG
aWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUpCit7CisgICAgQ1NTVmFsdWUqIHNoYWRlcnNWYWx1ZSA9
IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOworICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHNoYWRlcnNWYWx1ZS0+aXNWYWx1ZUxpc3QoKSk7CisgICAg
Q1NTVmFsdWVMaXN0KiBzaGFkZXJzTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHNo
YWRlcnNWYWx1ZSk7CisKKyAgICB1bnNpZ25lZCBzaGFkZXJzTGlzdExlbmd0aCA9IHNoYWRlcnNM
aXN0LT5sZW5ndGgoKTsKKyAgICBBU1NFUlQoc2hhZGVyc0xpc3RMZW5ndGgpOworCisgICAgV2Vi
S2l0Q1NTU2hhZGVyVmFsdWUqIHZlcnRleFNoYWRlciA9IHRvV2ViS2l0Q1NTU2hhZGVyVmFsdWUo
c2hhZGVyc0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgIFdlYktpdENTU1No
YWRlclZhbHVlKiBmcmFnbWVudFNoYWRlciA9IDA7CisgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5
cGUgcHJvZ3JhbVR5cGUgPSBQUk9HUkFNX1RZUEVfQkxFTkRTX0VMRU1FTlRfVEVYVFVSRTsKKyAg
ICBDdXN0b21GaWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3MgbWl4U2V0dGluZ3M7CisKKyAgICBpZiAo
c2hhZGVyc0xpc3RMZW5ndGggPiAxKSB7CisgICAgICAgIENTU1ZhbHVlKiBmcmFnbWVudFNoYWRl
ck9yTWl4RnVuY3Rpb24gPSBzaGFkZXJzTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKTsK
KyAgICAgICAgaWYgKGZyYWdtZW50U2hhZGVyT3JNaXhGdW5jdGlvbi0+aXNXZWJLaXRDU1NNaXhG
dW5jdGlvblZhbHVlKCkpIHsKKyAgICAgICAgICAgIFdlYktpdENTU01peEZ1bmN0aW9uVmFsdWUq
IG1peEZ1bmN0aW9uID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTTWl4RnVuY3Rpb25WYWx1ZSo+KGZy
YWdtZW50U2hhZGVyT3JNaXhGdW5jdGlvbik7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3RJdGVy
YXRvciBpdGVyYXRvcihtaXhGdW5jdGlvbik7CisKKyAgICAgICAgICAgIEFTU0VSVChtaXhGdW5j
dGlvbi0+bGVuZ3RoKCkpOworICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSB0b1dlYktpdENT
U1NoYWRlclZhbHVlKGl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICAgICAgaXRlcmF0b3IuYWR2
YW5jZSgpOworCisgICAgICAgICAgICBBU1NFUlQobWl4RnVuY3Rpb24tPmxlbmd0aCgpIDw9IDMp
OworICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc01vcmUoKSkgeworICAgICAgICAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgaWYgKENT
U1BhcnNlcjo6aXNCbGVuZE1vZGUocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSkpCisgICAg
ICAgICAgICAgICAgICAgIG1peFNldHRpbmdzLmJsZW5kTW9kZSA9ICpwcmltaXRpdmVWYWx1ZTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChDU1NQYXJzZXI6OmlzQ29tcG9zaXRlT3BlcmF0b3Io
cHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSkpCisgICAgICAgICAgICAgICAgICAgIG1peFNl
dHRpbmdzLmNvbXBvc2l0ZU9wZXJhdG9yID0gKnByaW1pdGl2ZVZhbHVlOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgcHJvZ3JhbVR5cGUgPSBQUk9HUkFNX1RZUEVfTk9fRUxFTUVO
VF9URVhUVVJFOworICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSB0b1dlYktpdENTU1NoYWRl
clZhbHVlKGZyYWdtZW50U2hhZGVyT3JNaXhGdW5jdGlvbik7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoIXZlcnRleFNoYWRlciAmJiAhZnJhZ21lbnRTaGFkZXIpCisgICAgICAgIHJldHVy
biAwOworICAgIAorICAgIHVuc2lnbmVkIG1lc2hSb3dzID0gMTsKKyAgICB1bnNpZ25lZCBtZXNo
Q29sdW1ucyA9IDE7CisgICAgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUgPSBNZXNoVHlw
ZUF0dGFjaGVkOworICAgIAorICAgIENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUgPSAwOworICAg
IAorICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7CisgICAgICAgIENTU1ZhbHVl
TGlzdEl0ZXJhdG9yIGl0ZXJhdG9yKGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDEpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBzZWNvbmQgdmFsdWUgbWlnaHQgYmUgdGhl
IG1lc2ggYm94IG9yIHRoZSBsaXN0IG9mIHBhcmFtZXRlcnM6CisgICAgICAgIC8vIElmIGl0IHN0
YXJ0cyB3aXRoIGEgbnVtYmVyIG9yIGFueSBvZiB0aGUgbWVzaC1ib3ggaWRlbnRpZmllcnMgaXQg
aXMgCisgICAgICAgIC8vIHRoZSBtZXNoLWJveCBsaXN0LCBpZiBub3QgaXQgbWVhbnMgaXQgaXMg
dGhlIHBhcmFtZXRlcnMgbGlzdC4KKworICAgICAgICBpZiAoaXRlcmF0b3IuaGFzTW9yZSgpICYm
IGl0ZXJhdG9yLmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihp
dGVyYXRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1i
ZXIoKSkgeworICAgICAgICAgICAgICAgIC8vIElmIG9ubHkgb25lIGludGVnZXIgdmFsdWUgaXMg
c3BlY2lmaWVkLCBpdCB3aWxsIHNldCBib3RoCisgICAgICAgICAgICAgICAgLy8gdGhlIHJvd3Mg
YW5kIHRoZSBjb2x1bW5zLgorICAgICAgICAgICAgICAgIG1lc2hDb2x1bW5zID0gbWVzaFJvd3Mg
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpdGVyYXRv
ci5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVHJ5IHRv
IG1hdGNoIGFub3RoZXIgbnVtYmVyIGZvciB0aGUgcm93cy4KKyAgICAgICAgICAgICAgICBpZiAo
aXRlcmF0b3IuaGFzTW9yZSgpICYmIGl0ZXJhdG9yLmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAg
ICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1lc2hSb3dzID0gcHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmIChpdGVyYXRvci5oYXNNb3JlKCkgJiYgaXRlcmF0b3IuaXNQcmlt
aXRpdmVWYWx1ZSgpKSB7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkp
OworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVEZXRhY2hlZCkgeworICAgICAgICAgICAgICAgIG1lc2hUeXBlID0gTWVzaFR5cGVEZXRhY2hl
ZDsKKyAgICAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghaXRlcmF0b3IuaW5kZXgoKSkgeworICAg
ICAgICAgICAgLy8gSWYgbm8gdmFsdWUgd2FzIGNvbnN1bWVkIGZyb20gdGhlIG1lc2ggdmFsdWUs
IHRoZW4gaXQgaXMganVzdCBhIHBhcmFtZXRlciBsaXN0LCBtZWFuaW5nIHRoYXQgd2UgZW5kIHVw
CisgICAgICAgICAgICAvLyBoYXZpbmcganVzdCB0d28gQ1NTTGlzdFZhbHVlczogbGlzdCBvZiBz
aGFkZXJzIGFuZCBsaXN0IG9mIHBhcmFtZXRlcnMuCisgICAgICAgICAgICBBU1NFUlQoZmlsdGVy
VmFsdWUtPmxlbmd0aCgpID09IDIpOworICAgICAgICAgICAgcGFyYW1ldGVyc1ZhbHVlID0gZmls
dGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA+IDIgJiYgIXBhcmFtZXRlcnNWYWx1
ZSkKKyAgICAgICAgcGFyYW1ldGVyc1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMik7CisgICAgCisgICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBwYXJhbWV0
ZXJMaXN0OworICAgIGlmIChwYXJhbWV0ZXJzVmFsdWUgJiYgIXBhcnNlQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdChwYXJhbWV0ZXJzVmFsdWUsIHBhcmFtZXRlckxpc3QpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gbG9va3Vw
Q3VzdG9tRmlsdGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyLCBwcm9ncmFt
VHlwZSwgbWl4U2V0dGluZ3MsIG1lc2hUeXBlKTsKKyAgICByZXR1cm4gQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uOjpjcmVhdGUocHJvZ3JhbS5yZWxlYXNlKCksIHBhcmFtZXRlckxpc3QsIG1lc2hSb3dz
LCBtZXNoQ29sdW1ucyk7Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBT
dHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oV2ViS2l0Q1NTRmlsdGVy
VmFsdWUqIGZpbHRlclZhbHVlKQoreworICAgIEFTU0VSVChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkp
OworICAgIGJvb2wgaXNBdFJ1bGVSZWZlcmVuY2VTeW50YXggPSBmaWx0ZXJWYWx1ZS0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygwKS0+aXNQcmltaXRpdmVWYWx1ZSgpOworICAgIHJldHVybiBpc0F0
UnVsZVJlZmVyZW5jZVN5bnRheCA/IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGhBdFJ1
bGVSZWZlcmVuY2VTeW50YXgoZmlsdGVyVmFsdWUpIDogY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uV2l0aElubGluZVN5bnRheChmaWx0ZXJWYWx1ZSk7Cit9CisKKyNlbmRpZgorCitib29sIFN0
eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJl
bmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9u
cyYgb3V0T3BlcmF0aW9ucykKK3sKKyAgICBBU1NFUlQob3V0T3BlcmF0aW9ucy5pc0VtcHR5KCkp
OworICAgIAorICAgIGlmICghaW5WYWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIGlmIChpblZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
PihpblZhbHVlKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb25lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IGlmICghaW5WYWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgZmxvYXQgem9vbUZhY3RvciA9IHN0eWxlID8gc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA6IDE7
CisgICAgRmlsdGVyT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIGZvciAoQ1NTVmFsdWVMaXN0
SXRlcmF0b3IgaSA9IGluVmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAg
ICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgpOworICAgICAgICBpZiAoIWN1cnJWYWx1
ZS0+aXNXZWJLaXRDU1NGaWx0ZXJWYWx1ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8V2Vi
S2l0Q1NTRmlsdGVyVmFsdWUqPihpLnZhbHVlKCkpOworICAgICAgICBGaWx0ZXJPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSA9IGZpbHRlck9wZXJhdGlvbkZvclR5cGUoZmls
dGVyVmFsdWUtPm9wZXJhdGlvblR5cGUoKSk7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisg
ICAgICAgIGlmIChvcGVyYXRpb25UeXBlID09IEZpbHRlck9wZXJhdGlvbjo6VkFMSURBVEVEX0NV
U1RPTSkgeworICAgICAgICAgICAgLy8gVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uIGlz
IG5vdCBzdXBwb3NlZCB0byBlbmQgdXAgaW4gdGhlIFJlbmRlclN0eWxlLgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgewor
ICAgICAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gY3Jl
YXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKGZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGlmICgh
b3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKG9wZXJhdGlvbik7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmIChvcGVy
YXRpb25UeXBlID09IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7CisjaWYgRU5BQkxFKFNW
RykKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgIT0gMSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBhcmd1bWVudCA9IGZpbHRl
clZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOworCisgICAgICAgICAgICBpZiAoIWFy
Z3VtZW50LT5pc1dlYktpdENTU1NWR0RvY3VtZW50VmFsdWUoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSogc3ZnRG9j
dW1lbnRWYWx1ZSA9IHN0YXRpY19jYXN0PFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqPihhcmd1
bWVudCk7CisgICAgICAgICAgICBLVVJMIHVybCA9IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCkpOworCisgICAgICAgICAgICBSZWZQdHI8UmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRp
b246OmNyZWF0ZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwgdXJsLmZyYWdtZW50SWRlbnRpZmll
cigpLCBvcGVyYXRpb25UeXBlKTsKKyAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6Omlz
RXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIG1fc3RhdGUuZG9j
dW1lbnQoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN2Z0RvY3VtZW50VmFsdWUtPmxvYWRS
ZXF1ZXN0ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5wZW5kaW5nU1ZHRG9jdW1l
bnRzKCkuc2V0KG9wZXJhdGlvbi5nZXQoKSwgc3ZnRG9jdW1lbnRWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoc3ZnRG9jdW1lbnRWYWx1ZS0+Y2FjaGVkU1ZHRG9jdW1lbnQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLT5zZXRDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5j
ZShhZG9wdFB0cihuZXcgQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1
ZS0+Y2FjaGVkU1ZHRG9jdW1lbnQoKSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24pOworI2VuZGlmCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIHRoYXQgYWxsIHBh
cmFtZXRlcnMgYXJlIHByaW1pdGl2ZSB2YWx1ZXMsIHdpdGggdGhlCisgICAgICAgIC8vIGV4Y2Vw
dGlvbiBvZiBkcm9wIHNoYWRvdyB3aGljaCBoYXMgYSBTaGFkb3dWYWx1ZSBwYXJhbWV0ZXIuCisg
ICAgICAgIGlmIChvcGVyYXRpb25UeXBlICE9IEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1cp
IHsKKyAgICAgICAgICAgIGJvb2wgaGF2ZU5vblByaW1pdGl2ZVZhbHVlID0gZmFsc2U7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgZmlsdGVyVmFsdWUtPmxlbmd0aCgpOyAr
K2opIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGopLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaGF2
ZU5vblByaW1pdGl2ZVZhbHVlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGhhdmVOb25Q
cmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gZmlsdGVyVmFsdWUtPmxlbmd0
aCgpID8gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihmaWx0ZXJWYWx1ZS0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygwKSkgOiAwOworICAgICAgICBzd2l0Y2ggKGZpbHRlclZhbHVlLT5v
cGVyYXRpb25UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3Jh
eXNjYWxlRmlsdGVyT3BlcmF0aW9uOgorICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVl
OjpTZXBpYUZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6U2F0dXJhdGVGaWx0ZXJPcGVyYXRpb246IHsKKyAgICAgICAgICAgIGRvdWJsZSBhbW91bnQg
PSAxOworICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9PSAxKSB7CisgICAg
ICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgICAgICAg
ICAgICAgIGFtb3VudCAvPSAxMDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9wZXJh
dGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9u
OjpjcmVhdGUoYW1vdW50LCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpIdWVSb3RhdGVGaWx0
ZXJPcGVyYXRpb246IHsKKyAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IDA7CisgICAgICAgICAg
ICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID09IDEpCisgICAgICAgICAgICAgICAgYW5nbGUg
PSBmaXJzdFZhbHVlLT5jb21wdXRlRGVncmVlcygpOworCisgICAgICAgICAgICBvcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3Jl
YXRlKGFuZ2xlLCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpJbnZlcnRGaWx0ZXJPcGVyYXRp
b246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJP
cGVyYXRpb246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkNvbnRyYXN0Rmls
dGVyT3BlcmF0aW9uOgorICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpPcGFjaXR5
RmlsdGVyT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBkb3VibGUgYW1vdW50ID0gKGZpbHRlclZh
bHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5lc3NG
aWx0ZXJPcGVyYXRpb24pID8gMCA6IDE7CisgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxl
bmd0aCgpID09IDEpIHsKKyAgICAgICAgICAgICAgICBhbW91bnQgPSBmaXJzdFZhbHVlLT5nZXRE
b3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5pc1BlcmNlbnRh
Z2UoKSkKKyAgICAgICAgICAgICAgICAgICAgYW1vdW50IC89IDEwMDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShhbW91bnQsIG9wZXJhdGlvblR5cGUp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NT
RmlsdGVyVmFsdWU6OkJsdXJGaWx0ZXJPcGVyYXRpb246IHsKKyAgICAgICAgICAgIExlbmd0aCBz
dGREZXZpYXRpb24gPSBMZW5ndGgoMCwgRml4ZWQpOworICAgICAgICAgICAgaWYgKGZpbHRlclZh
bHVlLT5sZW5ndGgoKSA+PSAxKQorICAgICAgICAgICAgICAgIHN0ZERldmlhdGlvbiA9IGNvbnZl
cnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3Ip
OworICAgICAgICAgICAgaWYgKHN0ZERldmlhdGlvbi5pc1VuZGVmaW5lZCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25z
KCkuYXBwZW5kKEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShzdGREZXZpYXRpb24sIG9wZXJh
dGlvblR5cGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246IHsKKyAgICAg
ICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgIT0gMSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIENTU1ZhbHVlKiBjc3NWYWx1ZSA9IGZpbHRlclZh
bHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOworICAgICAgICAgICAgaWYgKCFjc3NWYWx1
ZS0+aXNTaGFkb3dWYWx1ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4oY3NzVmFs
dWUpOworICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+eC0+Y29tcHV0ZUxlbmd0
aDxpbnQ+KHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlLCByb290U3R5bGUs
IHpvb21GYWN0b3IpKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0t
PmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKSA6
IDA7CisgICAgICAgICAgICBDb2xvciBjb2xvcjsKKyAgICAgICAgICAgIGlmIChpdGVtLT5jb2xv
cikKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0t
PmNvbG9yLmdldCgpKTsKKworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBw
ZW5kKERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShsb2NhdGlvbiwgYmx1ciwgY29s
b3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQsIG9wZXJhdGlvblR5cGUp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViS2l0Q1NT
RmlsdGVyVmFsdWU6OlVua25vd25GaWx0ZXJPcGVyYXRpb246CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgb3V0T3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKKyNlbmRpZgorCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVz
b2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbmdJbWFnZSkK
K3sKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX3N0
YXRlLmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisKKyAgICBpZiAocGVuZGlu
Z0ltYWdlLT5jc3NJbWFnZVZhbHVlKCkpIHsKKyAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VW
YWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpOworICAgICAgICByZXR1cm4gaW1h
Z2VWYWx1ZS0+Y2FjaGVkSW1hZ2UoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOworICAgIH0KKworICAg
IGlmIChwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkgeworICAgICAgICBD
U1NJbWFnZUdlbmVyYXRvclZhbHVlKiBpbWFnZUdlbmVyYXRvclZhbHVlID0gcGVuZGluZ0ltYWdl
LT5jc3NJbWFnZUdlbmVyYXRvclZhbHVlKCk7CisgICAgICAgIGltYWdlR2VuZXJhdG9yVmFsdWUt
PmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOworICAgICAgICByZXR1cm4gU3R5
bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGltYWdlR2VuZXJhdG9yVmFsdWUpOworICAgIH0KKwor
ICAgIGlmIChwZW5kaW5nSW1hZ2UtPmNzc0N1cnNvckltYWdlVmFsdWUoKSkgeworICAgICAgICBD
U1NDdXJzb3JJbWFnZVZhbHVlKiBjdXJzb3JJbWFnZVZhbHVlID0gcGVuZGluZ0ltYWdlLT5jc3ND
dXJzb3JJbWFnZVZhbHVlKCk7CisgICAgICAgIHJldHVybiBjdXJzb3JJbWFnZVZhbHVlLT5jYWNo
ZWRJbWFnZShjYWNoZWRSZXNvdXJjZUxvYWRlcik7CisgICAgfQorCisjaWYgRU5BQkxFKENTU19J
TUFHRV9TRVQpCisgICAgaWYgKHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VTZXRWYWx1ZSgpKSB7Cisg
ICAgICAgIENTU0ltYWdlU2V0VmFsdWUqIGltYWdlU2V0VmFsdWUgPSBwZW5kaW5nSW1hZ2UtPmNz
c0ltYWdlU2V0VmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGltYWdlU2V0VmFsdWUtPmNhY2hlZElt
YWdlU2V0KGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVy
biAwOworfQorCisKKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
bG9hZFBlbmRpbmdTaGFwZUltYWdlKFNoYXBlVmFsdWUqIHNoYXBlVmFsdWUpCit7CisgICAgaWYg
KCFzaGFwZVZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHlsZUltYWdlKiBpbWFnZSA9
IHNoYXBlVmFsdWUtPmltYWdlKCk7CisgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmlzUGVuZGlu
Z0ltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5k
aW5nSW1hZ2UgPSBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGltYWdlKTsKKyAgICBD
U1NJbWFnZVZhbHVlKiBjc3NJbWFnZVZhbHVlID0gIHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1
ZSgpOworICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1f
c3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKworICAgIFJlc291cmNl
TG9hZGVyT3B0aW9ucyBvcHRpb25zID0gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlZmF1bHRDYWNo
ZWRSZXNvdXJjZU9wdGlvbnMoKTsKKyAgICBvcHRpb25zLnJlcXVlc3RPcmlnaW5Qb2xpY3kgPSBS
ZXN0cmljdFRvU2FtZU9yaWdpbjsKKworICAgIHNoYXBlVmFsdWUtPnNldEltYWdlKGNzc0ltYWdl
VmFsdWUtPmNhY2hlZEltYWdlKGNhY2hlZFJlc291cmNlTG9hZGVyLCBvcHRpb25zKSk7Cit9Cisj
ZW5kaWYKKwordm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcygpCit7CisgICAg
aWYgKG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpL
ZXlzIGVuZCA9IG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmVuZCgpLmtleXMoKTsK
KyAgICBmb3IgKFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBp
dCA9IG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmJlZ2luKCkua2V5cygpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQ1NTUHJvcGVydHlJRCBjdXJyZW50UHJvcGVydHkgPSAq
aXQ7CisKKyAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVydHkpIHsKKyAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZTogeworICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIq
IGJhY2tncm91bmRMYXllciA9IG1fc3RhdGUuc3R5bGUoKS0+YWNjZXNzQmFja2dyb3VuZExheWVy
cygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tncm91bmRMYXllci0+
bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSAm
JiBiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAg
ICAgICAgICAgIGJhY2tncm91bmRMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0
aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSkpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlDb250ZW50OiB7CisgICAgICAgICAgICBmb3IgKENvbnRlbnREYXRhKiBj
b250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEqPihtX3N0YXRlLnN0eWxlKCktPmNv
bnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4
dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxJbWFnZUNv
bnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJl
ZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nh
c3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGxvYWRlZEltYWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PEltYWdlQ29udGVudERhdGEqPihjb250ZW50RGF0YSktPnNldEltYWdlKGxvYWRlZEltYWdlLnJl
bGVhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENT
U1Byb3BlcnR5Q3Vyc29yOiB7CisgICAgICAgICAgICBpZiAoQ3Vyc29yTGlzdCogY3Vyc29yTGlz
dCA9IG1fc3RhdGUuc3R5bGUoKS0+Y3Vyc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjdXJzb3JMaXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICBDdXJzb3JEYXRhJiBjdXJyZW50Q3Vyc29yID0gY3Vyc29yTGlzdC0+YXQoaSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChTdHlsZUltYWdlKiBpbWFnZSA9IGN1cnJlbnRDdXJzb3Iu
aW1hZ2UoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT5pc1BlbmRpbmdJ
bWFnZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDdXJzb3Iuc2V0SW1h
Z2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGltYWdl
KSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUxpc3RTdHlsZUltYWdlOiB7CisgICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZSgpLT5s
aXN0U3R5bGVJbWFnZSgpICYmIG1fc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNldExpc3RT
dHlsZUltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2Uq
PihtX3N0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCkpKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6
IHsKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCkg
JiYgbV9zdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgp
KQorICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2Uo
bG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUu
c3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0OiB7CisgICAg
ICAgICAgICBpZiAoU3R5bGVSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbV9zdGF0ZS5zdHlsZSgp
LT5ib3hSZWZsZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYg
bWFza0ltYWdlID0gcmVmbGVjdGlvbi0+bWFzaygpOworICAgICAgICAgICAgICAgIGlmIChtYXNr
SW1hZ2UuaW1hZ2UoKSAmJiBtYXNrSW1hZ2UuaW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkgewor
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2Fk
UGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0ltYWdlLmlt
YWdlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0TWFzayhOaW5lUGll
Y2VJbWFnZShsb2FkZWRJbWFnZS5yZWxlYXNlKCksIG1hc2tJbWFnZS5pbWFnZVNsaWNlcygpLCBt
YXNrSW1hZ2UuZmlsbCgpLCBtYXNrSW1hZ2UuYm9yZGVyU2xpY2VzKCksIG1hc2tJbWFnZS5vdXRz
ZXQoKSwgbWFza0ltYWdlLmhvcml6b250YWxSdWxlKCksIG1hc2tJbWFnZS52ZXJ0aWNhbFJ1bGUo
KSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VT
b3VyY2U6IHsKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNv
dXJjZSgpICYmIG1fc3RhdGUuc3R5bGUoKS0+bWFza0JveEltYWdlU291cmNlKCktPmlzUGVuZGlu
Z0ltYWdlKCkpCisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRNYXNrQm94SW1h
Z2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+
KG1fc3RhdGUuc3R5bGUoKS0+bWFza0JveEltYWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdl
OiB7CisgICAgICAgICAgICBmb3IgKEZpbGxMYXllciogbWFza0xheWVyID0gbV9zdGF0ZS5zdHls
ZSgpLT5hY2Nlc3NNYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xheWVyID0gbWFza0xheWVy
LT5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobWFza0xheWVyLT5pbWFnZSgpICYmIG1h
c2tMYXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAg
bWFza0xheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVu
ZGluZ0ltYWdlKj4obWFza0xheWVyLT5pbWFnZSgpKSkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKKyAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5zaWRlOgorICAgICAgICAgICAgbG9hZFBlbmRp
bmdTaGFwZUltYWdlKG1fc3RhdGUuc3R5bGUoKS0+c2hhcGVJbnNpZGUoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlT3V0c2lkZToKKyAg
ICAgICAgICAgIGxvYWRQZW5kaW5nU2hhcGVJbWFnZShtX3N0YXRlLnN0eWxlKCktPnNoYXBlT3V0
c2lkZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmNsZWFyKCk7Cit9CisKKyNpZm5kZWYg
TkRFQlVHCitzdGF0aWMgYm9vbCBpbkxvYWRQZW5kaW5nUmVzb3VyY2VzID0gZmFsc2U7CisjZW5k
aWYKKwordm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcygpCit7CisgICAg
Ly8gV2UndmUgc2VlbiBjcmFzaGVzIGluIGFsbCB0aHJlZSBvZiB0aGUgZnVuY3Rpb25zIGJlbG93
LiBTb21lIG9mIHRoZW0KKyAgICAvLyBpbmRpY2F0ZSB0aGF0IHN0eWxlKCkgaXMgTlVMTC4gVGhp
cyBOVUxMIGNoZWNrIHdpbGwgY3V0IGRvd24gb24gdG90YWwKKyAgICAvLyBjcmFzaGVzLCB3aGls
ZSB0aGUgQVNTRVJUIHdpbGwgaGVscCB1cyBmaW5kIHRoZSBjYXVzZSBpbiBkZWJ1ZyBidWlsZHMu
CisgICAgQVNTRVJUKHN0eWxlKCkpOworICAgIGlmICghc3R5bGUoKSkKKyAgICAgICAgcmV0dXJu
OworCisjaWZuZGVmIE5ERUJVRworICAgIC8vIFJlLWVudGVyaW5nIHRoaXMgZnVuY3Rpb24gd2ls
bCBwcm9iYWJseSBtZWFuIHRyb3VibGUuIENhdGNoIGl0IGluIGRlYnVnIGJ1aWxkcy4KKyAgICBB
U1NFUlQoIWluTG9hZFBlbmRpbmdSZXNvdXJjZXMpOworICAgIGluTG9hZFBlbmRpbmdSZXNvdXJj
ZXMgPSB0cnVlOworI2VuZGlmCisKKyAgICAvLyBTdGFydCBsb2FkaW5nIGltYWdlcyByZWZlcmVu
Y2VkIGJ5IHRoaXMgc3R5bGUuCisgICAgbG9hZFBlbmRpbmdJbWFnZXMoKTsKKworI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKKyAgICAvLyBTdGFydCBsb2FkaW5nIHRoZSBzaGFkZXJzIHJlZmVyZW5j
ZWQgYnkgdGhpcyBzdHlsZS4KKyAgICBsb2FkUGVuZGluZ1NoYWRlcnMoKTsKKyNlbmRpZgorICAg
IAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKKyAgICAvLyBTdGFydCBs
b2FkaW5nIHRoZSBTVkcgRG9jdW1lbnRzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KKyAgICBs
b2FkUGVuZGluZ1NWR0RvY3VtZW50cygpOworI2VuZGlmCisKKyNpZm5kZWYgTkRFQlVHCisgICAg
aW5Mb2FkUGVuZGluZ1Jlc291cmNlcyA9IGZhbHNlOworI2VuZGlmCit9CisKK2lubGluZSBTdHls
ZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllczo6TWF0Y2hlZFByb3BlcnRpZXMoKQorICAgIDog
cG9zc2libHlQYWRkZWRNZW1iZXIoMCkKK3sKK30KKworaW5saW5lIFN0eWxlUmVzb2x2ZXI6Ok1h
dGNoZWRQcm9wZXJ0aWVzOjp+TWF0Y2hlZFByb3BlcnRpZXMoKQoreworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUZvbnRTaXplRnVu
Y3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUZvbnRT
aXplRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDMyOTggKzI3
LDIxIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2
ZXIuaCIKKyNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCiAKLSNpbmNsdWRlICJB
dHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZS5oIgotI2luY2x1ZGUgIkNTU0Nh
bGN1bGF0aW9uVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCi0jaW5j
bHVkZSAiQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmgiCi0jaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxl
LmgiCi0jaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTTGluZUJveENv
bnRhaW5WYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1BhZ2VSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTUGFy
c2VyLmgiCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgotI2luY2x1ZGUg
IkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKLSNpbmNs
dWRlICJDU1NTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgotI2luY2x1
ZGUgIkNTU1N0eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N1cHBvcnRzUnVsZS5oIgotI2luY2x1
ZGUgIkNTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIK
LSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIK
LSNpbmNsdWRlICJDb250ZW50RGF0YS5oIgotI2luY2x1ZGUgIkNvbnRleHRGZWF0dXJlcy5oIgot
I2luY2x1ZGUgIkNvdW50ZXIuaCIKLSNpbmNsdWRlICJDb3VudGVyQ29udGVudC5oIgotI2luY2x1
ZGUgIkN1cnNvckxpc3QuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkU3R5bGVCdWlsZGVyLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIgotI2luY2x1ZGUgIkVsZW1l
bnRSdWxlQ29sbGVjdG9yLmgiCi0jaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgotI2luY2x1ZGUg
IkZvbnRGZWF0dXJlVmFsdWUuaCIKLSNpbmNsdWRlICJGb250VmFsdWUuaCIKKyNpbmNsdWRlICJD
U1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgotI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
Ci0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCi0jaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgi
Ci0jaW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxPcHRpb25F
bGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFByb2dyZXNzRWxlbWVudC5oIgotI2luY2x1ZGUgIkhU
TUxTdHlsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgotI2luY2x1ZGUgIkluc2VydGlvblBvaW50LmgiCi0j
aW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVM
aXN0LmgiCi0jaW5jbHVkZSAiTGlua0hhc2guaCIKLSNpbmNsdWRlICJMb2NhbGVUb1NjcmlwdE1h
cHBpbmcuaCIKLSNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgotI2luY2x1ZGUgIk1lZGlhTGlzdC5o
IgotI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKLSNpbmNsdWRlICJOb2RlUmVuZGVy
U3R5bGUuaCIKLSNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIlBh
Z2UuaCIKLSNpbmNsdWRlICJQYWdlUnVsZUNvbGxlY3Rvci5oIgotI2luY2x1ZGUgIlBhaXIuaCIK
LSNpbmNsdWRlICJRdW90ZXNEYXRhLmgiCi0jaW5jbHVkZSAiUmVjdC5oIgotI2luY2x1ZGUgIlJl
bmRlclJlZ2lvbi5oIgotI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgotI2luY2x1ZGUgIlJl
bmRlclNjcm9sbGJhclRoZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIK
LSNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNs
dWRlICJSdWxlU2V0LmgiCi0jaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCi0jaW5j
bHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
LSNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5oIgorI2luY2x1ZGUgIlJlbmRlclN0
eWxlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaGFkb3dEYXRhLmgiCi0j
aW5jbHVkZSAiU2hhZG93Um9vdC5oIgotI2luY2x1ZGUgIlNoYWRvd1ZhbHVlLmgiCi0jaW5jbHVk
ZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIK
LSNpbmNsdWRlICJTdHlsZVBlbmRpbmdJbWFnZS5oIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlT
ZXQuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCi0jaW5jbHVkZSAiU3R5
bGVSdWxlLmgiCi0jaW5jbHVkZSAiU3R5bGVSdWxlSW1wb3J0LmgiCi0jaW5jbHVkZSAiU3R5bGVT
aGVldENvbnRlbnRzLmgiCi0jaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKLSNpbmNsdWRlICJU
ZXh0LmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiVHJhbnNm
b3JtT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCi0jaW5j
bHVkZSAiVmlld3BvcnRTdHlsZVJlc29sdmVyLmgiCi0jaW5jbHVkZSAiVmlzaXRlZExpbmtTdGF0
ZS5oIgotI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lUnVsZS5oIgotI2luY2x1ZGUgIldlYktp
dENTU0tleWZyYW1lc1J1bGUuaCIKLSNpbmNsdWRlICJXZWJLaXRDU1NSZWdpb25SdWxlLmgiCi0j
aW5jbHVkZSAiV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCIKLSNpbmNsdWRlICJXZWJLaXRGb250
RmFtaWx5TmFtZXMuaCIKLSNpbmNsdWRlICJYTUxOYW1lcy5oIgotI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCi0jaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NT
RmlsdGVyVmFsdWUuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0jaW5j
bHVkZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgotI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2VTZXQu
aCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotI2luY2x1ZGUgIkN1c3RvbUZp
bHRlckFycmF5UGFyYW1ldGVyLmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyQ29sb3JQYXJhbWV0
ZXIuaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJDb25zdGFudHMuaCIKLSNpbmNsdWRlICJDdXN0
b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIuaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJPcGVyYXRp
b24uaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJQYXJhbWV0ZXIuaCIKLSNpbmNsdWRlICJDdXN0
b21GaWx0ZXJQcm9ncmFtSW5mby5oIgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlclRyYW5zZm9ybVBh
cmFtZXRlci5oIgotI2luY2x1ZGUgIlN0eWxlQ2FjaGVkU2hhZGVyLmgiCi0jaW5jbHVkZSAiU3R5
bGVDdXN0b21GaWx0ZXJQcm9ncmFtLmgiCi0jaW5jbHVkZSAiU3R5bGVDdXN0b21GaWx0ZXJQcm9n
cmFtQ2FjaGUuaCIKLSNpbmNsdWRlICJTdHlsZVBlbmRpbmdTaGFkZXIuaCIKLSNpbmNsdWRlICJT
dHlsZVNoYWRlci5oIgotI2luY2x1ZGUgIldlYktpdENTU01peEZ1bmN0aW9uVmFsdWUuaCIKLSNp
bmNsdWRlICJXZWJLaXRDU1NTaGFkZXJWYWx1ZS5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2VuZGlmCi0KLSNp
ZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKLSNpbmNsdWRlICJDU1NWYXJpYWJsZVZhbHVlLmgiCi0j
ZW5kaWYKLQotI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSNpbmNsdWRlICJEYXNoYm9h
cmRSZWdpb24uaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8p
Ci0jaW5jbHVkZSAiSFRNTEF1ZGlvRWxlbWVudC5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU1ZH
KQotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9j
dW1lbnRSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIlNW
R0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1VSSVJlZmVy
ZW5jZS5oIgotI2luY2x1ZGUgIldlYktpdENTU1NWR0RvY3VtZW50VmFsdWUuaCIKLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotI2luY2x1ZGUgIldlYlZUVEVsZW1lbnQuaCIKLSNl
bmRpZgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLSNkZWZpbmUgSEFORExFX0lOSEVSSVQocHJvcCwg
UHJvcCkgXAotaWYgKGlzSW5oZXJpdCkgeyBcCi0gICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXQjI1By
b3AobV9zdGF0ZS5wYXJlbnRTdHlsZSgpLT5wcm9wKCkpOyBcCi0gICAgcmV0dXJuOyBcCi19Ci0K
LSNkZWZpbmUgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAotSEFORExF
X0lOSEVSSVQocHJvcCwgUHJvcCkgXAotaWYgKGlzSW5pdGlhbCkgeyBcCi0gICAgbV9zdGF0ZS5z
dHlsZSgpLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwjI1Byb3AoKSk7IFwKLSAgICBy
ZXR1cm47IFwKLX0KLQotUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OnNfc3R5bGVOb3RZZXRB
dmFpbGFibGU7Ci0KLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpjYWNoZUJvcmRl
ckFuZEJhY2tncm91bmQoKQotewotICAgIG1faGFzVUFBcHBlYXJhbmNlID0gbV9zdHlsZS0+aGFz
QXBwZWFyYW5jZSgpOwotICAgIGlmIChtX2hhc1VBQXBwZWFyYW5jZSkgewotICAgICAgICBtX2Jv
cmRlckRhdGEgPSBtX3N0eWxlLT5ib3JkZXIoKTsKLSAgICAgICAgbV9iYWNrZ3JvdW5kRGF0YSA9
ICptX3N0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7Ci0gICAgICAgIG1fYmFja2dyb3VuZENvbG9y
ID0gbV9zdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2xlYXIoKQotewotICAgIG1fZWxlbWVudCA9IDA7Ci0gICAg
bV9zdHlsZWRFbGVtZW50ID0gMDsKLSAgICBtX3BhcmVudFN0eWxlID0gMDsKLSAgICBtX3BhcmVu
dE5vZGUgPSAwOwotICAgIG1fcmVnaW9uRm9yU3R5bGluZyA9IDA7Ci0gICAgbV9wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzLmNsZWFyKCk7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIG1faGFz
UGVuZGluZ1NoYWRlcnMgPSBmYWxzZTsKLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfRklMVEVSUykg
JiYgRU5BQkxFKFNWRykKLSAgICBtX3BlbmRpbmdTVkdEb2N1bWVudHMuY2xlYXIoKTsKLSNlbmRp
ZgotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0OjphZGRNYXRjaGVkUHJvcGVy
dGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUs
IHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIFByb3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdo
aXRlbGlzdFR5cGUpCi17Ci0gICAgbWF0Y2hlZFByb3BlcnRpZXMuZ3JvdyhtYXRjaGVkUHJvcGVy
dGllcy5zaXplKCkgKyAxKTsKLSAgICBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllcyYg
bmV3UHJvcGVydGllcyA9IG1hdGNoZWRQcm9wZXJ0aWVzLmxhc3QoKTsKLSAgICBuZXdQcm9wZXJ0
aWVzLnByb3BlcnRpZXMgPSBjb25zdF9jYXN0PFN0eWxlUHJvcGVydHlTZXQqPihwcm9wZXJ0aWVz
KTsKLSAgICBuZXdQcm9wZXJ0aWVzLmxpbmtNYXRjaFR5cGUgPSBsaW5rTWF0Y2hUeXBlOwotICAg
IG5ld1Byb3BlcnRpZXMud2hpdGVsaXN0VHlwZSA9IHByb3BlcnR5V2hpdGVsaXN0VHlwZTsKLSAg
ICBtYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOwotfQotCi1TdHlsZVJlc29sdmVyOjpTdHlsZVJl
c29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMp
Ci0gICAgOiBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCgw
KQotICAgICwgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlU3dlZXBUaW1lcih0aGlzLCAmU3R5bGVS
ZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGllc0NhY2hlKQotICAgICwgbV9kb2N1bWVudChk
b2N1bWVudCkKLSAgICAsIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKG1hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcykKLSAgICAsIG1fZm9udFNlbGVjdG9yKENTU0ZvbnRTZWxlY3Rvcjo6Y3JlYXRl
KGRvY3VtZW50KSkKLSNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQotICAgICwgbV92
aWV3cG9ydFN0eWxlUmVzb2x2ZXIoVmlld3BvcnRTdHlsZVJlc29sdmVyOjpjcmVhdGUoZG9jdW1l
bnQpKQotI2VuZGlmCi0gICAgLCBtX2RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIoRGVwcmVjYXRlZFN0
eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCkpCi0gICAgLCBtX3N0eWxlTWFwKHRoaXMp
Ci17Ci0gICAgRWxlbWVudCogcm9vdCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKLQot
ICAgIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6aW5pdERlZmF1bHRTdHlsZShyb290KTsKLQotICAg
IC8vIGNvbnN0cnVjdCBkb2N1bWVudCByb290IGVsZW1lbnQgZGVmYXVsdCBzdHlsZS4gdGhpcyBp
cyBuZWVkZWQKLSAgICAvLyB0byBldmFsdWF0ZSBtZWRpYSBxdWVyaWVzIHRoYXQgY29udGFpbiBy
ZWxhdGl2ZSBjb25zdHJhaW50cywgbGlrZSAic2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMGVtKSIK
LSAgICAvLyBUaGlzIGlzIGhlcmUgaW5zdGVhZCBvZiBjb25zdHJ1Y3RvciwgYmVjYXVzZSB3aGVu
IGNvbnN0cnVjdG9yIGlzIHJ1biwKLSAgICAvLyBkb2N1bWVudCBkb2Vzbid0IGhhdmUgZG9jdW1l
bnRFbGVtZW50Ci0gICAgLy8gTk9URTogdGhpcyBhc3N1bWVzIHRoYXQgZWxlbWVudCB0aGF0IGdl
dHMgcGFzc2VkIHRvIHN0eWxlRm9yRWxlbWVudCAtY2FsbAotICAgIC8vIGlzIGFsd2F5cyBmcm9t
IHRoZSBkb2N1bWVudCB0aGF0IG93bnMgdGhlIHN0eWxlIHNlbGVjdG9yCi0gICAgRnJhbWVWaWV3
KiB2aWV3ID0gZG9jdW1lbnQtPnZpZXcoKTsKLSAgICBpZiAodmlldykKLSAgICAgICAgbV9tZWRp
dW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcih2aWV3LT5tZWRpYVR5cGUoKSkp
OwotICAgIGVsc2UKLSAgICAgICAgbV9tZWRpdW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2
YWx1YXRvcigiYWxsIikpOwotCi0gICAgaWYgKHJvb3QpCi0gICAgICAgIG1fcm9vdERlZmF1bHRT
dHlsZSA9IHN0eWxlRm9yRWxlbWVudChyb290LCAwLCBEaXNhbGxvd1N0eWxlU2hhcmluZywgTWF0
Y2hPbmx5VXNlckFnZW50UnVsZXMpOwotCi0gICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2
aWV3KQotICAgICAgICBtX21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9y
KHZpZXctPm1lZGlhVHlwZSgpLCB2aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0
KCkpKTsKLQotICAgIG1fcnVsZVNldHMucmVzZXRBdXRob3JTdHlsZSgpOwotCi0gICAgRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbiogc3R5bGVTaGVldENvbGxlY3Rpb24gPSBkb2N1bWVudC0+
c3R5bGVTaGVldENvbGxlY3Rpb24oKTsKLSAgICBtX3J1bGVTZXRzLmluaXRVc2VyU3R5bGUoc3R5
bGVTaGVldENvbGxlY3Rpb24sICptX21lZGl1bSwgKnRoaXMpOwotCi0jaWYgRU5BQkxFKFNWR19G
T05UUykKLSAgICBpZiAoZG9jdW1lbnQtPnN2Z0V4dGVuc2lvbnMoKSkgewotICAgICAgICBjb25z
dCBIYXNoU2V0PFNWR0ZvbnRGYWNlRWxlbWVudCo+JiBzdmdGb250RmFjZUVsZW1lbnRzID0gZG9j
dW1lbnQtPnN2Z0V4dGVuc2lvbnMoKS0+c3ZnRm9udEZhY2VFbGVtZW50cygpOwotICAgICAgICBI
YXNoU2V0PFNWR0ZvbnRGYWNlRWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzdmdGb250
RmFjZUVsZW1lbnRzLmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8U1ZHRm9udEZhY2VFbGVt
ZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3ZnRm9udEZhY2VFbGVtZW50cy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBmb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VS
dWxlKCgqaXQpLT5mb250RmFjZVJ1bGUoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBhcHBlbmRB
dXRob3JTdHlsZVNoZWV0cygwLCBzdHlsZVNoZWV0Q29sbGVjdGlvbi0+YWN0aXZlQXV0aG9yU3R5
bGVTaGVldHMoKSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVT
aGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gPiYgc3R5bGVTaGVldHMpCi17Ci0gICAgbV9ydWxlU2V0cy5hcHBlbmRBdXRob3JTdHlsZVNo
ZWV0cyhmaXJzdE5ldywgc3R5bGVTaGVldHMsIG1fbWVkaXVtLmdldCgpLCBtX2luc3BlY3RvckNT
U09NV3JhcHBlcnMsIGRvY3VtZW50KCktPmlzVmlld1NvdXJjZSgpLCB0aGlzKTsKLSAgICBpZiAo
ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSAmJiBkb2N1bWVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgp
KQotICAgICAgICBkb2N1bWVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCkudXBkYXRl
KGZvbnRTZWxlY3RvcigpKTsKLQotI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi0g
ICAgdmlld3BvcnRTdHlsZVJlc29sdmVyKCktPnJlc29sdmUoKTsKLSNlbmRpZgotfQotCi12b2lk
IFN0eWxlUmVzb2x2ZXI6OnB1c2hQYXJlbnRFbGVtZW50KEVsZW1lbnQqIHBhcmVudCkKLXsKLSAg
ICBjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnRzUGFyZW50ID0gcGFyZW50LT5wYXJlbnRPclNo
YWRvd0hvc3RFbGVtZW50KCk7Ci0KLSAgICAvLyBXZSBhcmUgbm90IGFsd2F5cyBpbnZva2VkIGNv
bnNpc3RlbnRseS4gRm9yIGV4YW1wbGUsIHNjcmlwdCBleGVjdXRpb24gY2FuIGNhdXNlIHVzIHRv
IGVudGVyCi0gICAgLy8gc3R5bGUgcmVjYWxjIGluIHRoZSBtaWRkbGUgb2YgdHJlZSBidWlsZGlu
Zy4gV2UgbWF5IGFsc28gYmUgaW52b2tlZCBmcm9tIHNvbWV3aGVyZSB3aXRoaW4gdGhlIHRyZWUu
Ci0gICAgLy8gUmVzZXQgdGhlIHN0YWNrIGluIHRoaXMgY2FzZSwgb3IgaWYgd2Ugc2VlIGEgbmV3
IHJvb3QgZWxlbWVudC4KLSAgICAvLyBPdGhlcndpc2UganVzdCBwdXNoIHRoZSBuZXcgcGFyZW50
LgotICAgIGlmICghcGFyZW50c1BhcmVudCB8fCBtX3NlbGVjdG9yRmlsdGVyLnBhcmVudFN0YWNr
SXNFbXB0eSgpKQotICAgICAgICBtX3NlbGVjdG9yRmlsdGVyLnNldHVwUGFyZW50U3RhY2socGFy
ZW50KTsKLSAgICBlbHNlCi0gICAgICAgIG1fc2VsZWN0b3JGaWx0ZXIucHVzaFBhcmVudChwYXJl
bnQpOwotCi0gICAgLy8gTm90ZTogV2UgbXVzdG4ndCBza2lwIFNoYWRvd1Jvb3Qgbm9kZXMgZm9y
IHRoZSBzY29wZSBzdGFjay4KLSAgICBpZiAobV9zY29wZVJlc29sdmVyKQotICAgICAgICBtX3Nj
b3BlUmVzb2x2ZXItPnB1c2gocGFyZW50LCBwYXJlbnQtPnBhcmVudE9yU2hhZG93SG9zdE5vZGUo
KSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50RWxlbWVudChFbGVtZW50KiBw
YXJlbnQpCi17Ci0gICAgLy8gTm90ZSB0aGF0IHdlIG1heSBnZXQgaW52b2tlZCBmb3Igc29tZSBy
YW5kb20gZWxlbWVudHMgaW4gc29tZSB3YWNreSBjYXNlcyBkdXJpbmcgc3R5bGUgcmVzb2x2ZS4K
LSAgICAvLyBQYXVzZSBtYWludGFpbmluZyB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLgotICAgIGlm
IChtX3NlbGVjdG9yRmlsdGVyLnBhcmVudFN0YWNrSXNDb25zaXN0ZW50KHBhcmVudCkpCi0gICAg
ICAgIG1fc2VsZWN0b3JGaWx0ZXIucG9wUGFyZW50KCk7Ci0gICAgaWYgKG1fc2NvcGVSZXNvbHZl
cikKLSAgICAgICAgbV9zY29wZVJlc29sdmVyLT5wb3AocGFyZW50KTsKLX0KLQotdm9pZCBTdHls
ZVJlc29sdmVyOjpwdXNoUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290KiBzaGFkb3dS
b290KQotewotICAgIEFTU0VSVChzaGFkb3dSb290LT5ob3N0KCkpOwotICAgIGlmIChtX3Njb3Bl
UmVzb2x2ZXIpCi0gICAgICAgIG1fc2NvcGVSZXNvbHZlci0+cHVzaChzaGFkb3dSb290LCBzaGFk
b3dSb290LT5ob3N0KCkpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnBvcFBhcmVudFNoYWRv
d1Jvb3QoY29uc3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCkKLXsKLSAgICBBU1NFUlQoc2hhZG93
Um9vdC0+aG9zdCgpKTsKLSAgICBpZiAobV9zY29wZVJlc29sdmVyKQotICAgICAgICBtX3Njb3Bl
UmVzb2x2ZXItPnBvcChzaGFkb3dSb290KTsKLX0KLQotLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQg
c3R5bGUgc2V0dGluZyBmdW5jdGlvbiBmb3Iga2V5ZnJhbWUgc3R5bGVzCi12b2lkIFN0eWxlUmVz
b2x2ZXI6OmFkZEtleWZyYW1lU3R5bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVLZXlmcmFtZXM+IHJ1
bGUpCi17Ci0gICAgQXRvbWljU3RyaW5nIHMocnVsZS0+bmFtZSgpKTsKLSAgICBtX2tleWZyYW1l
c1J1bGVNYXAuc2V0KHMuaW1wbCgpLCBydWxlKTsKLX0KLQotU3R5bGVSZXNvbHZlcjo6flN0eWxl
UmVzb2x2ZXIoKQotewotICAgIG1fZm9udFNlbGVjdG9yLT5jbGVhckRvY3VtZW50KCk7Ci0KLSNp
ZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQotICAgIG1fdmlld3BvcnRTdHlsZVJlc29s
dmVyLT5jbGVhckRvY3VtZW50KCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpz
d2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoVGltZXI8U3R5bGVSZXNvbHZlcj4qKQotewotICAg
IC8vIExvb2sgZm9yIGNhY2hlIGVudHJpZXMgY29udGFpbmluZyBhIHN0eWxlIGRlY2xhcmF0aW9u
IHdpdGggYSBzaW5nbGUgcmVmIGFuZCByZW1vdmUgdGhlbS4KLSAgICAvLyBUaGlzIG1heSBoYXBw
ZW4gd2hlbiBhbiBlbGVtZW50IGF0dHJpYnV0ZSBtdXRhdGlvbiBjYXVzZXMgaXQgdG8gZ2VuZXJh
dGUgYSBuZXcgaW5saW5lU3R5bGUoKQotICAgIC8vIG9yIHByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0
eWxlKCksIHBvdGVudGlhbGx5IGxlYXZpbmcgdGhpcyBjYWNoZSB3aXRoIHRoZSBsYXN0IHJlZiBv
biB0aGUgb2xkIG9uZS4KLSAgICBWZWN0b3I8dW5zaWduZWQsIDE2PiB0b1JlbW92ZTsKLSAgICBN
YXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBpdCA9IG1fbWF0Y2hlZFByb3BlcnRpZXND
YWNoZS5iZWdpbigpOwotICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGVuZCA9
IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5lbmQoKTsKLSAgICBmb3IgKDsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIFZlY3RvcjxNYXRjaGVkUHJvcGVydGllcz4mIG1hdGNoZWRQcm9wZXJ0
aWVzID0gaXQtPnZhbHVlLm1hdGNoZWRQcm9wZXJ0aWVzOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBp
ZiAobWF0Y2hlZFByb3BlcnRpZXNbaV0ucHJvcGVydGllcy0+aGFzT25lUmVmKCkpIHsKLSAgICAg
ICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmtleSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0b1JlbW92ZS5zaXplKCk7ICsraSkKLSAgICAgICAgbV9tYXRjaGVkUHJvcGVydGll
c0NhY2hlLnJlbW92ZSh0b1JlbW92ZVtpXSk7Ci0KLSAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGVBZGRpdGlvbnNTaW5jZUxhc3RTd2VlcCA9IDA7Ci19Ci0KLWlubGluZSBib29sIFN0eWxlUmVz
b2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKQotewotI2lmIEVO
QUJMRShTSEFET1dfRE9NKQotICAgIHJldHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJl
c29sdmVyLT5zdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fc3RhdGUuZWxl
bWVudCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wgU3R5
bGVSZXNvbHZlcjo6Y2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhjb25zdCBTcGFjZVNwbGl0U3Ry
aW5nJiBjbGFzc05hbWVzKSBjb25zdAotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
bGFzc05hbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3J1bGVTZXRzLmZlYXR1cmVz
KCkuY2xhc3Nlc0luUnVsZXMuY29udGFpbnMoY2xhc3NOYW1lc1tpXS5pbXBsKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW5saW5l
IHZvaWQgU3R5bGVSZXNvbHZlcjo6U3RhdGU6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCi17Ci0g
ICAgbV9lbGVtZW50ID0gZTsKLSAgICBtX3N0eWxlZEVsZW1lbnQgPSBlICYmIGUtPmlzU3R5bGVk
RWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGUpIDogMDsKLSAgICBtX2Vs
ZW1lbnRMaW5rU3RhdGUgPSBlID8gZS0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLT5k
ZXRlcm1pbmVMaW5rU3RhdGUoZSkgOiBOb3RJbnNpZGVMaW5rOwotfQotCi1pbmxpbmUgdm9pZCBT
dHlsZVJlc29sdmVyOjppbml0RWxlbWVudChFbGVtZW50KiBlKQotewotICAgIGlmIChtX3N0YXRl
LmVsZW1lbnQoKSAhPSBlKSB7Ci0gICAgICAgIG1fc3RhdGUuaW5pdEVsZW1lbnQoZSk7Ci0gICAg
ICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50
KGZhbHNlKTsKLSAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25E
b2N1bWVudEVsZW1lbnQoZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1pbmxpbmUgdm9p
ZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6aW5pdEZvclN0eWxlUmVzb2x2ZShEb2N1bWVudCogZG9j
dW1lbnQsIEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUmVuZGVyUmVnaW9u
KiByZWdpb25Gb3JTdHlsaW5nKQotewotICAgIG1fcmVnaW9uRm9yU3R5bGluZyA9IHJlZ2lvbkZv
clN0eWxpbmc7Ci0KLSAgICBpZiAoZSkgewotICAgICAgICBOb2RlUmVuZGVyaW5nQ29udGV4dCBj
b250ZXh0KGUpOwotICAgICAgICBtX3BhcmVudE5vZGUgPSBjb250ZXh0LnBhcmVudE5vZGVGb3JS
ZW5kZXJpbmdBbmRTdHlsZSgpOwotICAgICAgICBtX3BhcmVudFN0eWxlID0gY29udGV4dC5yZXNl
dFN0eWxlSW5oZXJpdGFuY2UoKSA/IDAgOgotICAgICAgICAgICAgcGFyZW50U3R5bGUgPyBwYXJl
bnRTdHlsZSA6Ci0gICAgICAgICAgICBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRl
clN0eWxlKCkgOiAwOwotICAgICAgICBtX2Rpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCA9IGNv
bnRleHQuaW5zZXJ0aW9uUG9pbnQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3BhcmVudE5v
ZGUgPSAwOwotICAgICAgICBtX3BhcmVudFN0eWxlID0gcGFyZW50U3R5bGU7Ci0gICAgICAgIG1f
ZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgTm9kZSog
ZG9jRWxlbWVudCA9IGUgPyBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA6IDA7Ci0g
ICAgUmVuZGVyU3R5bGUqIGRvY1N0eWxlID0gZG9jdW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0gICAg
bV9yb290RWxlbWVudFN0eWxlID0gZG9jRWxlbWVudCAmJiBlICE9IGRvY0VsZW1lbnQgPyBkb2NF
bGVtZW50LT5yZW5kZXJTdHlsZSgpIDogZG9jU3R5bGU7Ci0KLSAgICBtX3N0eWxlID0gMDsKLSAg
ICBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXMuY2xlYXIoKTsKLSAgICBtX2ZvbnREaXJ0eSA9IGZh
bHNlOwotfQotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xkID0g
MTA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgPSAx
MDsKLQotc3RhdGljIGlubGluZSBib29sIHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoY29u
c3QgRWxlbWVudCogcGFyZW50RWxlbWVudCkKLXsKLSAgICBpZiAoIXBhcmVudEVsZW1lbnQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcGFyZW50RWxlbWVudC0+aGFzRmxhZ3NT
ZXREdXJpbmdTdHlsaW5nT2ZDaGlsZHJlbigpOwotfQotCi1Ob2RlKiBTdHlsZVJlc29sdmVyOjps
b2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291
bnQpIGNvbnN0Ci17Ci0gICAgaWYgKHZpc2l0ZWROb2RlQ291bnQgPj0gY1N0eWxlU2VhcmNoVGhy
ZXNob2xkICogY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzU3R5bGVkRWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBpZiAocGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBTdHlsZWRFbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8U3R5bGVk
RWxlbWVudCo+KHBhcmVudCk7Ci0gICAgaWYgKHAtPmlubGluZVN0eWxlKCkpCi0gICAgICAgIHJl
dHVybiAwOwotI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKHAtPmlzU1ZHRWxlbWVudCgpICYmIHRv
U1ZHRWxlbWVudChwKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCi0gICAgICAgIHJl
dHVybiAwOwotI2VuZGlmCi0gICAgaWYgKHAtPmhhc0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0dXJl
cygpLmlkc0luUnVsZXMuY29udGFpbnMocC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHAt
PnJlbmRlclN0eWxlKCk7Ci0gICAgdW5zaWduZWQgc3ViY291bnQgPSAwOwotICAgIE5vZGUqIHRo
aXNDb3VzaW4gPSBwOwotICAgIE5vZGUqIGN1cnJlbnROb2RlID0gcC0+cHJldmlvdXNTaWJsaW5n
KCk7Ci0KLSAgICAvLyBSZXNlcnZlIHRoZSB0cmllcyBmb3IgdGhpcyBsZXZlbC4gVGhpcyBlZmZl
Y3RpdmVseSBtYWtlcyBzdXJlIHRoYXQgdGhlIGFsZ29yaXRobQotICAgIC8vIHdpbGwgbmV2ZXIg
Z28gZGVlcGVyIHRoYW4gY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgbGV2ZWxzIGludG8gcmVj
dXJzaW9uLgotICAgIHZpc2l0ZWROb2RlQ291bnQgKz0gY1N0eWxlU2VhcmNoVGhyZXNob2xkOwot
ICAgIHdoaWxlICh0aGlzQ291c2luKSB7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgewot
ICAgICAgICAgICAgKytzdWJjb3VudDsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+cmVu
ZGVyU3R5bGUoKSA9PSBwYXJlbnRTdHlsZSAmJiBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCkKLSAg
ICAgICAgICAgICAgICAmJiBjdXJyZW50Tm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmICFwYXJlbnRF
bGVtZW50UHJldmVudHNTaGFyaW5nKHRvRWxlbWVudChjdXJyZW50Tm9kZSkpCi0jaWYgRU5BQkxF
KFNIQURPV19ET00pCi0gICAgICAgICAgICAgICAgJiYgIXRvRWxlbWVudChjdXJyZW50Tm9kZSkt
PnNoYWRvdygpCi0jZW5kaWYKLSAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAv
LyBBZGp1c3QgZm9yIHVudXNlZCByZXNlcnZlZCB0cmllcy4KLSAgICAgICAgICAgICAgICB2aXNp
dGVkTm9kZUNvdW50IC09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCAtIHN1YmNvdW50OwotICAgICAg
ICAgICAgICAgIHJldHVybiBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoc3ViY291bnQgPj0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQotICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50
Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY3VycmVudE5vZGUg
PSBsb2NhdGVDb3VzaW5MaXN0KHRoaXNDb3VzaW4tPnBhcmVudEVsZW1lbnQoKSwgdmlzaXRlZE5v
ZGVDb3VudCk7Ci0gICAgICAgIHRoaXNDb3VzaW4gPSBjdXJyZW50Tm9kZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gMDsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRh
dGVNYXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQotewotICAgIGlmICghcnVsZVNldCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRWxlbWVudFJ1bGVDb2xsZWN0b3IgY29sbGVj
dG9yKHRoaXMsIG1fc3RhdGUpOwotICAgIHJldHVybiBjb2xsZWN0b3IuaGFzQW55TWF0Y2hpbmdS
dWxlcyhydWxlU2V0KTsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0
aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBjb25zdCBTdGF0
ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIHRoaXNJbnB1dEVsZW1l
bnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIG90
aGVySW5wdXRFbGVtZW50ID0gc3RhdGUuZWxlbWVudCgpLT50b0lucHV0RWxlbWVudCgpOwotCi0g
ICAgaWYgKCF0aGlzSW5wdXRFbGVtZW50IHx8ICFvdGhlcklucHV0RWxlbWVudCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPmVsZW1lbnREYXRhKCkg
IT0gb3RoZXJJbnB1dEVsZW1lbnQtPmVsZW1lbnREYXRhKCkpIHsKLSAgICAgICAgaWYgKHRoaXNJ
bnB1dEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpICE9IG90aGVySW5wdXRFbGVt
ZW50LT5mYXN0R2V0QXR0cmlidXRlKHR5cGVBdHRyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9u
bHlBdHRyKSAhPSBvdGhlcklucHV0RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShyZWFkb25seUF0
dHIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICh0aGlzSW5w
dXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNBdXRvZmls
bGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+
c2hvdWxkQXBwZWFyQ2hlY2tlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJD
aGVja2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodGhpc0lucHV0RWxlbWVu
dC0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpICE9IG90aGVySW5wdXRFbGVtZW50LT5zaG91
bGRBcHBlYXJJbmRldGVybWluYXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
dGhpc0lucHV0RWxlbWVudC0+aXNSZXF1aXJlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5pc1Jl
cXVpcmVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlbGVtZW50LT5pc0Rp
c2FibGVkRm9ybUNvbnRyb2woKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzRGlzYWJsZWRGb3JtQ29u
dHJvbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZWxlbWVudC0+aXNEZWZh
dWx0QnV0dG9uRm9yRm9ybSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNEZWZhdWx0QnV0dG9uRm9y
Rm9ybSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3RhdGUuZG9jdW1lbnQo
KS0+Y29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKSkgewotICAgICAgICBib29sIHdpbGxWYWxp
ZGF0ZSA9IGVsZW1lbnQtPndpbGxWYWxpZGF0ZSgpOwotCi0gICAgICAgIGlmICh3aWxsVmFsaWRh
dGUgIT0gc3RhdGUuZWxlbWVudCgpLT53aWxsVmFsaWRhdGUoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICBpZiAod2lsbFZhbGlkYXRlICYmIChlbGVtZW50LT5pc1ZhbGlk
Rm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc1ZhbGlkRm9ybUNvbnRy
b2xFbGVtZW50KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChl
bGVtZW50LT5pc0luUmFuZ2UoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzSW5SYW5nZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChlbGVtZW50LT5pc091dE9mUmFu
Z2UoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzT3V0T2ZSYW5nZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICAv
LyBGSVhNRTogVGhpcyBsaW5lIGlzIHN1cnByaXNpbmdseSBob3QsIHdlIG1heSB3aXNoIHRvIGlu
bGluZSBoYXNEaXJlY3Rpb25BdXRvIGludG8gU3R5bGVSZXNvbHZlci4KLSAgICByZXR1cm4gZWxl
bWVudC0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQoZWxlbWVudCktPmhhc0RpcmVj
dGlvbkF1dG8oKTsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFz
SWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdD
YW5kaWRhdGUpIGNvbnN0Ci17Ci0gICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAg
ICBpZiAoc3RhdGUuZWxlbWVudCgpLT5lbGVtZW50RGF0YSgpID09IHNoYXJpbmdDYW5kaWRhdGUt
PmVsZW1lbnREYXRhKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChzdGF0ZS5lbGVt
ZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSAhPSBzaGFyaW5nQ2Fu
ZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKGxh
bmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKGxhbmdBdHRyKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFzdGF0ZS5lbGVtZW50QWZmZWN0ZWRC
eUNsYXNzUnVsZXMoKSkgewotICAgICAgICBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzQ2xhc3Mo
KSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHNoYXJpbmdDYW5kaWRhdGUtPmNsYXNzTmFt
ZXMoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIGlmIChzaGFyaW5n
Q2FuZGlkYXRlLT5oYXNDbGFzcygpKSB7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgLy8gU1ZH
IGVsZW1lbnRzIHJlcXVpcmUgYSAoc2xvdyEpIGdldEF0dHJpYnV0ZSBjb21wYXJpc2lvbiBiZWNh
dXNlICJjbGFzcyIgaXMgYW4gYW5pbWF0YWJsZSBhdHRyaWJ1dGUgZm9yIFNWRy4KLSAgICAgICAg
aWYgKHN0YXRlLmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChz
dGF0ZS5lbGVtZW50KCktPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IHNoYXJpbmdDYW5kaWRh
dGUtPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfSBlbHNlIHsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1l
bnQoKS0+Y2xhc3NOYW1lcygpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmNsYXNzTmFtZXMoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgfQot
I2VuZGlmCi0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzdGF0
ZS5zdHlsZWRFbGVtZW50KCktPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc2hhcmlu
Z0NhbmRpZGF0ZS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0jaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCi0gICAgaWYgKHN0YXRlLmVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpIHsKLSAgICAgICAgaWYgKHN0YXRlLmVs
ZW1lbnQoKS0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUt
PnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFN0eWxlUmVzb2x2
ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25z
dAotewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Ci0g
ICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLQotICAgIGlmICghc3R5bGUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3R5bGUtPnVuaXF1ZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKHN0eWxlLT5oYXNVbmlxdWVQc2V1ZG9TdHlsZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPnRhZ1FOYW1lKCkgIT0gc3RhdGUuZWxl
bWVudCgpLT50YWdRTmFtZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1l
bnQtPmlubGluZVN0eWxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVu
dC0+bmVlZHNTdHlsZVJlY2FsYygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgRU5BQkxF
KFNWRykKLSAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYgdG9TVkdFbGVtZW50KGVs
ZW1lbnQpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotI2VuZGlmCi0gICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICE9IHN0YXRlLmVsZW1lbnQo
KS0+aXNMaW5rKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aG92
ZXJlZCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aG92ZXJlZCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKGVsZW1lbnQtPmFjdGl2ZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+YWN0aXZl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+Zm9jdXNlZCgpICE9
IHN0YXRlLmVsZW1lbnQoKS0+Zm9jdXNlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5zaGFkb3dQ
c2V1ZG9JZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQgPT0gZWxl
bWVudC0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0
ZXMoZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+YWRk
aXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc3RhdGUuc3R5bGVkRWxlbWVu
dCgpLT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9ydWxlU2V0cy5mZWF0
dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24o
KS5pbXBsKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmhhc1Nj
b3BlZEhUTUxTdHlsZUNoaWxkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgc2hhcmUgc3R5bGUgZm9yIG9wdGlvbiBhbmQgb3B0Z3JvdXAgd2hlbmV2
ZXIgcG9zc2libGUuCi0gICAgLy8gQmVmb3JlIGRvaW5nIHNvLCB3ZSBuZWVkIHRvIHJlc29sdmUg
aXNzdWVzIGluIEhUTUxTZWxlY3RFbGVtZW50OjpyZWNhbGNMaXN0SXRlbXMKLSAgICAvLyBhbmQg
UmVuZGVyTWVudUxpc3Q6OnNldFRleHQuIFNlZSBhbHNvIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04ODQwNQotICAgIGlmIChpc0hUTUxPcHRpb25FbGVtZW50KGVsZW1l
bnQpIHx8IGlzSFRNTE9wdEdyb3VwRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYm9vbCBpc0NvbnRyb2wgPSBlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVu
dCgpOwotCi0gICAgaWYgKGlzQ29udHJvbCAhPSBzdGF0ZS5lbGVtZW50KCktPmlzRm9ybUNvbnRy
b2xFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpc0NvbnRyb2wg
JiYgIWNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKHN0eWxlLT50cmFuc2l0aW9ucygpIHx8IHN0eWxlLT5hbmltYXRpb25z
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLSAgICAvLyBUdXJuIG9mZiBzdHlsZSBzaGFyaW5nIGZvciBlbGVtZW50cyB0aGF0IGNh
biBnYWluIGxheWVycyBmb3IgcmVhc29ucyBvdXRzaWRlIG9mIHRoZSBzdHlsZSBzeXN0ZW0uCi0g
ICAgLy8gU2VlIGNvbW1lbnRzIGluIFJlbmRlck9iamVjdDo6c2V0U3R5bGUoKS4KLSAgICBpZiAo
ZWxlbWVudC0+aGFzVGFnTmFtZShpZnJhbWVUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoZnJh
bWVUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IGVsZW1lbnQtPmhhc1Rh
Z05hbWUob2JqZWN0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgZWxl
bWVudC0+aGFzVGFnTmFtZShjYW52YXNUYWcpCi0jaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1Jf
VklERU8pCi0gICAgICAgIC8vIFdpdGggcHJveHlpbmcsIHRoZSBtZWRpYSBlbGVtZW50cyBhcmUg
YmFja2VkIGJ5IGEgUmVuZGVyRW1iZWRkZWRPYmplY3QuCi0gICAgICAgIHx8IGVsZW1lbnQtPmhh
c1RhZ05hbWUodmlkZW9UYWcpIHx8IGlzSFRNTEF1ZGlvRWxlbWVudChlbGVtZW50KQotI2VuZGlm
Ci0gICAgICAgICkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi0KLSAgICBpZiAoZWxl
bWVudEhhc0RpcmVjdGlvbkF1dG8oZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmIChlbGVtZW50LT5pc0xpbmsoKSAmJiBzdGF0ZS5lbGVtZW50TGlua1N0YXRlKCkgIT0g
c3R5bGUtPmluc2lkZUxpbmsoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQotICAgIC8vIERlbnkgc2hhcmluZyBzdHlsZXMgYmV0d2VlbiBXZWJWVFQg
YW5kIG5vbi1XZWJWVFQgbm9kZXMuCi0gICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgp
ICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNXZWJWVFRFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmIChlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVt
ZW50KCktPmlzV2ViVlRURWxlbWVudCgpICYmIHRvV2ViVlRURWxlbWVudChlbGVtZW50KS0+aXNQ
YXN0Tm9kZSgpICE9IHRvV2ViVlRURWxlbWVudChzdGF0ZS5lbGVtZW50KCkpLT5pc1Bhc3ROb2Rl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQotICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdEN1
cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpIHx8IHN0YXRlLmVsZW1lbnQoKSA9PSBzdGF0ZS5kb2N1
bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBTdHlsZWRFbGVt
ZW50KiBTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2Rl
LCB1bnNpZ25lZCYgY291bnQpIGNvbnN0Ci17Ci0gICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2Rl
LT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoIW5vZGUtPmlzU3R5bGVkRWxlbWVu
dCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjYW5TaGFyZVN0eWxlV2l0
aEVsZW1lbnQoc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpKSkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBpZiAoY291bnQrKyA9PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCi0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0eWxl
ZEVsZW1lbnQqPihub2RlKTsKLX0KLQotUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0
ZVNoYXJlZFN0eWxlKCkKLXsKLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIGlmICgh
c3RhdGUuc3R5bGVkRWxlbWVudCgpIHx8ICFzdGF0ZS5wYXJlbnRTdHlsZSgpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIC8vIElmIHRoZSBlbGVtZW50IGhhcyBpbmxpbmUgc3R5bGUgaXQgaXMg
cHJvYmFibHkgdW5pcXVlLgotICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlubGluZVN0
eWxlKCkpCi0gICAgICAgIHJldHVybiAwOwotI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKHN0YXRl
LnN0eWxlZEVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkgJiYgdG9TVkdFbGVtZW50KHN0YXRlLnN0
eWxlZEVsZW1lbnQoKSktPmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQotICAgICAgICBy
ZXR1cm4gMDsKLSNlbmRpZgotICAgIC8vIElkcyBzdG9wIHN0eWxlIHNoYXJpbmcgaWYgdGhleSBz
aG93IHVwIGluIHRoZSBzdHlsZXNoZWV0cy4KLSAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgp
LT5oYXNJRCgpICYmIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5pZHNJblJ1bGVzLmNvbnRhaW5zKHN0
YXRlLnN0eWxlZEVsZW1lbnQoKS0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhzdGF0
ZS5lbGVtZW50KCktPnBhcmVudEVsZW1lbnQoKSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlm
IChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGlmIChzdGF0ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9jdW1lbnQo
KS0+Y3NzVGFyZ2V0KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChlbGVtZW50SGFzRGly
ZWN0aW9uQXV0byhzdGF0ZS5lbGVtZW50KCkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8v
IENhY2hlIHdoZXRoZXIgc3RhdGUuZWxlbWVudCBpcyBhZmZlY3RlZCBieSBhbnkga25vd24gY2xh
c3Mgc2VsZWN0b3JzLgotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBhIG1lbWJlciB2
YXJpYWJsZS4gVGhlIHN0eWxlIHNoYXJpbmcgY29kZSBjb3VsZCBiZSBmYWN0b3JlZCBvdXQgb2Yg
U3R5bGVSZXNvbHZlci4KLSAgICBzdGF0ZS5zZXRFbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMo
c3RhdGUuZWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQoKS0+aGFzQ2xhc3MoKSAmJiBjbGFzc05h
bWVzQWZmZWN0ZWRCeVJ1bGVzKHN0YXRlLmVsZW1lbnQoKS0+Y2xhc3NOYW1lcygpKSk7Ci0KLSAg
ICAvLyBDaGVjayBwcmV2aW91cyBzaWJsaW5ncyBhbmQgdGhlaXIgY291c2lucy4KLSAgICB1bnNp
Z25lZCBjb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgdmlzaXRlZE5vZGVDb3VudCA9IDA7Ci0gICAg
U3R5bGVkRWxlbWVudCogc2hhcmVFbGVtZW50ID0gMDsKLSAgICBOb2RlKiBjb3VzaW5MaXN0ID0g
c3RhdGUuc3R5bGVkRWxlbWVudCgpLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICB3aGlsZSAoY291
c2luTGlzdCkgewotICAgICAgICBzaGFyZUVsZW1lbnQgPSBmaW5kU2libGluZ0ZvclN0eWxlU2hh
cmluZyhjb3VzaW5MaXN0LCBjb3VudCk7Ci0gICAgICAgIGlmIChzaGFyZUVsZW1lbnQpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY291c2luTGlzdCA9IGxvY2F0ZUNvdXNpbkxpc3QoY291
c2luTGlzdC0+cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNvdW50KTsKLSAgICB9Ci0KLSAg
ICAvLyBJZiB3ZSBoYXZlIGV4aGF1c3RlZCBhbGwgb3VyIGJ1ZGdldCBvciBvdXIgY291c2lucy4K
LSAgICBpZiAoIXNoYXJlRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBDYW4n
dCBzaGFyZSBpZiBzaWJsaW5nIHJ1bGVzIGFwcGx5LiBUaGlzIGlzIGNoZWNrZWQgYXQgdGhlIGVu
ZCBhcyBpdCBzaG91bGQgcmFyZWx5IGZhaWwuCi0gICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNSdWxlU2V0KG1fcnVsZVNldHMuc2libGluZygpKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5LgotICAgIGlmIChz
dHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3J1bGVTZXRzLnVuY29tbW9uQXR0
cmlidXRlKCkpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBDYW4ndCBzaGFyZSBpZiBAaG9z
dCBALXJ1bGVzIGFwcGx5LgotICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9z
dFJ1bGVzKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIC8vIFRyYWNraW5nIGNoaWxkIGluZGV4
IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5
IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCi0gICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2
ZW50c1NoYXJpbmcoc3RhdGUuZWxlbWVudCgpLT5wYXJlbnRFbGVtZW50KCkpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gc2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwotfQotCi1z
dGF0aWMgdm9pZCBnZXRGb250QW5kR2x5cGhPcmllbnRhdGlvbihjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIEZvbnRPcmllbnRhdGlvbiYgZm9udE9yaWVudGF0aW9uLCBOb25DSktHbHlwaE9yaWVu
dGF0aW9uJiBnbHlwaE9yaWVudGF0aW9uKQotewotICAgIGlmIChzdHlsZS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkgewotICAgICAgICBmb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsOwot
ICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2Fs
UmlnaHQ7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHN0eWxlLT50ZXh0
T3JpZW50YXRpb24oKSkgewotICAgIGNhc2UgVGV4dE9yaWVudGF0aW9uVmVydGljYWxSaWdodDoK
LSAgICAgICAgZm9udE9yaWVudGF0aW9uID0gVmVydGljYWw7Ci0gICAgICAgIGdseXBoT3JpZW50
YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodDsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgVGV4dE9yaWVudGF0aW9uVXByaWdodDoKLSAgICAgICAgZm9udE9yaWVu
dGF0aW9uID0gVmVydGljYWw7Ci0gICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25DSktHbHlw
aE9yaWVudGF0aW9uVXByaWdodDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVGV4dE9yaWVu
dGF0aW9uU2lkZXdheXM6Ci0gICAgICAgIGlmIChzdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBMZWZ0
VG9SaWdodFdyaXRpbmdNb2RlKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
bWFwIHRvIHNpZGV3YXlzLWxlZnQsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgotICAgICAg
ICAgICAgZm9udE9yaWVudGF0aW9uID0gVmVydGljYWw7Ci0gICAgICAgICAgICBnbHlwaE9yaWVu
dGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRh
bDsKLSAgICAgICAgZ2x5cGhPcmllbnRhdGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0
aWNhbFJpZ2h0OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUZXh0T3JpZW50YXRpb25TaWRl
d2F5c1JpZ2h0OgotICAgICAgICBmb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsOwotICAgICAg
ICBnbHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7
Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgZm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbDsKLSAgICAgICAgZ2x5
cGhPcmllbnRhdGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJl
c29sdmVyOjpzdHlsZUZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCwgQ1NTRm9udFNlbGVj
dG9yKiBmb250U2VsZWN0b3IpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1l
KCk7Ci0KLSAgICAvLyBIVE1MNSBzdGF0ZXMgdGhhdCBzZWFtbGVzcyBpZnJhbWVzIHNob3VsZCBy
ZXBsYWNlIGRlZmF1bHQgQ1NTIHZhbHVlcwotICAgIC8vIHdpdGggdmFsdWVzIGluaGVyaXRlZCBm
cm9tIHRoZSBjb250YWluaW5nIGlmcmFtZSBlbGVtZW50LiBIb3dldmVyLAotICAgIC8vIHNvbWUg
dmFsdWVzIChzdWNoIGFzIHRoZSBjYXNlIG9mIGRlc2lnbk1vZGUgPSAib24iKSBzdGlsbCBuZWVk
IHRvCi0gICAgLy8gYmUgc2V0IGJ5IHRoaXMgImRvY3VtZW50IHN0eWxlIi4KLSAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IGRvY3VtZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAg
Ym9vbCBzZWFtbGVzc1dpdGhQYXJlbnQgPSBkb2N1bWVudC0+c2hvdWxkRGlzcGxheVNlYW1sZXNz
bHlXaXRoUGFyZW50KCk7Ci0gICAgaWYgKHNlYW1sZXNzV2l0aFBhcmVudCkgewotICAgICAgICBS
ZW5kZXJTdHlsZSogaWZyYW1lU3R5bGUgPSBkb2N1bWVudC0+c2VhbWxlc3NQYXJlbnRJRnJhbWUo
KS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgaWYgKGlmcmFtZVN0eWxlKQotICAgICAgICAgICAg
ZG9jdW1lbnRTdHlsZS0+aW5oZXJpdEZyb20oaWZyYW1lU3R5bGUpOwotICAgIH0KLQotICAgIC8v
IEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGljaCB2YWx1ZXMgYmVsb3cgd2Ugd2FudCB0byBvdmVy
cmlkZSBpbiB0aGUgc2VhbWxlc3MgY2FzZSEKLSAgICBkb2N1bWVudFN0eWxlLT5zZXREaXNwbGF5
KEJMT0NLKTsKLSAgICBpZiAoIXNlYW1sZXNzV2l0aFBhcmVudCkgewotICAgICAgICBkb2N1bWVu
dFN0eWxlLT5zZXRSVExPcmRlcmluZyhkb2N1bWVudC0+dmlzdWFsbHlPcmRlcmVkKCkgPyBWaXN1
YWxPcmRlciA6IExvZ2ljYWxPcmRlcik7Ci0gICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFpvb20o
ZnJhbWUgJiYgIWRvY3VtZW50LT5wcmludGluZygpID8gZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCkg
OiAxKTsKLSAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0UGFnZVNjYWxlVHJhbnNmb3JtKGZyYW1l
ID8gZnJhbWUtPmZyYW1lU2NhbGVGYWN0b3IoKSA6IDEpOwotICAgICAgICBkb2N1bWVudFN0eWxl
LT5zZXRMb2NhbGUoZG9jdW1lbnQtPmNvbnRlbnRMYW5ndWFnZSgpKTsKLSAgICB9Ci0gICAgLy8g
VGhpcyBvdmVycmlkZXMgYW55IC13ZWJraXQtdXNlci1tb2RpZnkgaW5oZXJpdGVkIGZyb20gdGhl
IHBhcmVudCBpZnJhbWUuCi0gICAgZG9jdW1lbnRTdHlsZS0+c2V0VXNlck1vZGlmeShkb2N1bWVu
dC0+aW5EZXNpZ25Nb2RlKCkgPyBSRUFEX1dSSVRFIDogUkVBRF9PTkxZKTsKLQotICAgIEVsZW1l
bnQqIGRvY0VsZW1lbnQgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgUmVuZGVy
T2JqZWN0KiBkb2NFbGVtZW50UmVuZGVyZXIgPSBkb2NFbGVtZW50ID8gZG9jRWxlbWVudC0+cmVu
ZGVyZXIoKSA6IDA7Ci0gICAgaWYgKGRvY0VsZW1lbnRSZW5kZXJlcikgewotICAgICAgICAvLyBV
c2UgdGhlIGRpcmVjdGlvbiBhbmQgd3JpdGluZy1tb2RlIG9mIHRoZSBib2R5IHRvIHNldCB0aGUK
LSAgICAgICAgLy8gdmlld3BvcnQncyBkaXJlY3Rpb24gYW5kIHdyaXRpbmctbW9kZSB1bmxlc3Mg
dGhlIHByb3BlcnR5IGlzIHNldCBvbiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLSAgICAgICAgLy8g
SWYgdGhlcmUgaXMgbm8gYm9keSwgdGhlbiB1c2UgdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0gICAg
ICAgIFJlbmRlck9iamVjdCogYm9keVJlbmRlcmVyID0gZG9jdW1lbnQtPmJvZHkoKSA/IGRvY3Vt
ZW50LT5ib2R5KCktPnJlbmRlcmVyKCkgOiAwOwotICAgICAgICBpZiAoYm9keVJlbmRlcmVyICYm
ICFkb2N1bWVudC0+d3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAg
ICAgZG9jdW1lbnRTdHlsZS0+c2V0V3JpdGluZ01vZGUoYm9keVJlbmRlcmVyLT5zdHlsZSgpLT53
cml0aW5nTW9kZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+
c2V0V3JpdGluZ01vZGUoZG9jRWxlbWVudFJlbmRlcmVyLT5zdHlsZSgpLT53cml0aW5nTW9kZSgp
KTsKLSAgICAgICAgaWYgKGJvZHlSZW5kZXJlciAmJiAhZG9jdW1lbnQtPmRpcmVjdGlvblNldE9u
RG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXREaXJlY3Rp
b24oYm9keVJlbmRlcmVyLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldERpcmVjdGlvbihkb2NFbGVtZW50UmVuZGVyZXIt
PnN0eWxlKCktPmRpcmVjdGlvbigpKTsKLSAgICB9Ci0KLSAgICBpZiAoZnJhbWUpIHsKLSAgICAg
ICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKSkgewotICAgICAgICAg
ICAgY29uc3QgUGFnaW5hdGlvbiYgcGFnaW5hdGlvbiA9IGZyYW1lVmlldy0+cGFnaW5hdGlvbigp
OwotICAgICAgICAgICAgaWYgKHBhZ2luYXRpb24ubW9kZSAhPSBQYWdpbmF0aW9uOjpVbnBhZ2lu
YXRlZCkgewotICAgICAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldENvbHVtblN0eWxlc0Zy
b21QYWdpbmF0aW9uTW9kZShwYWdpbmF0aW9uLm1vZGUpOwotICAgICAgICAgICAgICAgIGRvY3Vt
ZW50U3R5bGUtPnNldENvbHVtbkdhcChwYWdpbmF0aW9uLmdhcCk7Ci0gICAgICAgICAgICAgICAg
aWYgKFJlbmRlclZpZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh2aWV3LT5oYXNDb2x1bW5zKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB2aWV3LT51cGRhdGVDb2x1bW5JbmZvRnJvbVN0eWxlKGRvY3VtZW50U3R5bGUuZ2V0KCkp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIFNlYW1sZXNzIGlmcmFtZXMgd2FudCB0byBpbmhlcml0IHRoZWlyIGZvbnQgZnJvbSB0
aGVpciBwYXJlbnQgaWZyYW1lLCBzbyBlYXJseSByZXR1cm4gYmVmb3JlIHNldHRpbmcgdGhlIGZv
bnQuCi0gICAgaWYgKHNlYW1sZXNzV2l0aFBhcmVudCkKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50
U3R5bGUucmVsZWFzZSgpOwotCi0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsK
LSAgICBmb250RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRT
ZWxlY3Rpb24oZG9jdW1lbnRTdHlsZS0+bG9jYWxlKCkpKTsKLSAgICBpZiAoU2V0dGluZ3MqIHNl
dHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCkpIHsKLSAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldFVzZVByaW50ZXJGb250KGRvY3VtZW50LT5wcmludGluZygpIHx8ICFzZXR0aW5ncy0+c2Ny
ZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQoKSk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKLSAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFyZEZvbnQgPSBzZXR0aW5ncy0+c3RhbmRhcmRGb250
RmFtaWx5KGZvbnREZXNjcmlwdGlvbi5zY3JpcHQoKSk7Ci0gICAgICAgIGlmICghc3RhbmRhcmRG
b250LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNG
YW1pbHkoRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7Ci0gICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KHN0YW5kYXJkRm9udCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFs
dWVYeFNtYWxsICsgMSk7Ci0gICAgICAgIGludCBzaXplID0gU3R5bGVSZXNvbHZlcjo6Zm9udFNp
emVGb3JLZXl3b3JkKGRvY3VtZW50LCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpOwotICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICAgICAgYm9vbCB1c2VT
Vkdab29tUnVsZXMgPSBkb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpOwotICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZy
b21TcGVjaWZpZWRTaXplKGRvY3VtZW50LCBkb2N1bWVudFN0eWxlLmdldCgpLCBmb250RGVzY3Jp
cHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChkb2N1bWVudC0+
cHJpbnRpbmcoKSk7Ci0KLSAgICBGb250T3JpZW50YXRpb24gZm9udE9yaWVudGF0aW9uOwotICAg
IE5vbkNKS0dseXBoT3JpZW50YXRpb24gZ2x5cGhPcmllbnRhdGlvbjsKLSAgICBnZXRGb250QW5k
R2x5cGhPcmllbnRhdGlvbihkb2N1bWVudFN0eWxlLmdldCgpLCBmb250T3JpZW50YXRpb24sIGds
eXBoT3JpZW50YXRpb24pOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPcmllbnRhdGlvbihmb250
T3JpZW50YXRpb24pOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXROb25DSktHbHlwaE9yaWVudGF0
aW9uKGdseXBoT3JpZW50YXRpb24pOwotCi0gICAgZG9jdW1lbnRTdHlsZS0+c2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgZG9jdW1lbnRTdHlsZS0+Zm9udCgpLnVwZGF0
ZShmb250U2VsZWN0b3IpOwotCi0gICAgcmV0dXJuIGRvY3VtZW50U3R5bGUucmVsZWFzZSgpOwot
fQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNBdFNoYWRvd0JvdW5kYXJ5KGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQpCi17Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKLSAg
ICByZXR1cm4gcGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLT5pc1NoYWRvd1Jvb3QoKTsKLX0KLQot
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQsIFJlbmRlclN0eWxlKiBkZWZhdWx0UGFyZW50LAotICAgIFN0eWxlU2hh
cmluZ0JlaGF2aW9yIHNoYXJpbmdCZWhhdmlvciwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgbWF0Y2hp
bmdCZWhhdmlvciwgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nKQotewotICAgIC8vIE9u
Y2UgYW4gZWxlbWVudCBoYXMgYSByZW5kZXJlciwgd2UgZG9uJ3QgdHJ5IHRvIGRlc3Ryb3kgaXQs
IHNpbmNlIG90aGVyd2lzZSB0aGUgcmVuZGVyZXIKLSAgICAvLyB3aWxsIHZhbmlzaCBpZiBhIHN0
eWxlIHJlY2FsYyBoYXBwZW5zIGR1cmluZyBsb2FkaW5nLgotICAgIGlmIChzaGFyaW5nQmVoYXZp
b3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIWVsZW1lbnQtPmRvY3VtZW50KCktPmhhdmVTdHls
ZXNoZWV0c0xvYWRlZCgpICYmICFlbGVtZW50LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIGlmICgh
c19zdHlsZU5vdFlldEF2YWlsYWJsZSkgewotICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWls
YWJsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKS5sZWFrUmVmKCk7Ci0gICAgICAgICAgICBzX3N0
eWxlTm90WWV0QXZhaWxhYmxlLT5zZXREaXNwbGF5KE5PTkUpOwotICAgICAgICAgICAgc19zdHls
ZU5vdFlldEF2YWlsYWJsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+c2V0SGFzTm9kZXNXaXRoUGxhY2Vob2xk
ZXJTdHlsZSgpOwotICAgICAgICByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsKLSAgICB9
Ci0KLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIGluaXRFbGVtZW50KGVsZW1lbnQp
OwotICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZWxlbWVudCwgZGVm
YXVsdFBhcmVudCwgcmVnaW9uRm9yU3R5bGluZyk7Ci0gICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9
PSBBbGxvd1N0eWxlU2hhcmluZyAmJiAhc3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50
KCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5
bGUoKTsKLSAgICAgICAgaWYgKHNoYXJlZFN0eWxlKSB7Ci0gICAgICAgICAgICBzdGF0ZS5jbGVh
cigpOwotICAgICAgICAgICAgcmV0dXJuIHNoYXJlZFN0eWxlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCkpIHsKLSAgICAgICAgc3RhdGUuc2V0U3R5bGUo
UmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZy
b20oc3RhdGUucGFyZW50U3R5bGUoKSwgaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpID8gUmVu
ZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBSZW5kZXJTdHlsZTo6Tm90QXRTaGFkb3dCb3Vu
ZGFyeSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGUuc2V0U3R5bGUoZGVmYXVsdFN0eWxl
Rm9yRWxlbWVudCgpKTsKLSAgICAgICAgc3RhdGUuc2V0UGFyZW50U3R5bGUoUmVuZGVyU3R5bGU6
OmNsb25lKHN0YXRlLnN0eWxlKCkpKTsKLSAgICB9Ci0gICAgLy8gY29udGVudGVkaXRhYmxlIGF0
dHJpYnV0ZSAoaW1wbGVtZW50ZWQgYnkgLXdlYmtpdC11c2VyLW1vZGlmeSkgc2hvdWxkCi0gICAg
Ly8gYmUgcHJvcGFnYXRlZCBmcm9tIHNoYWRvdyBob3N0IHRvIGRpc3RyaWJ1dGVkIG5vZGUuCi0g
ICAgaWYgKHN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpKSB7Ci0gICAgICAgIGlm
IChFbGVtZW50KiBwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAg
ICAgIGlmIChSZW5kZXJTdHlsZSogc3R5bGVPZlNoYWRvd0hvc3QgPSBwYXJlbnQtPnJlbmRlclN0
eWxlKCkpCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VXNlck1vZGlmeShzdHls
ZU9mU2hhZG93SG9zdC0+dXNlck1vZGlmeSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChlbGVtZW50LT5pc0xpbmsoKSkgewotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJc0xpbmso
dHJ1ZSk7Ci0gICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0ZSA9IHN0YXRlLmVsZW1lbnRMaW5r
U3RhdGUoKTsKLSAgICAgICAgaWYgKGxpbmtTdGF0ZSAhPSBOb3RJbnNpZGVMaW5rKSB7Ci0gICAg
ICAgICAgICBib29sIGZvcmNlVmlzaXRlZCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9y
Y2VQc2V1ZG9TdGF0ZShlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCk7Ci0gICAg
ICAgICAgICBpZiAoZm9yY2VWaXNpdGVkKQotICAgICAgICAgICAgICAgIGxpbmtTdGF0ZSA9IElu
c2lkZVZpc2l0ZWRMaW5rOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldElu
c2lkZUxpbmsobGlua1N0YXRlKTsKLSAgICB9Ci0KLSAgICBib29sIG5lZWRzQ29sbGVjdGlvbiA9
IGZhbHNlOwotICAgIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZW5zdXJlRGVmYXVsdFN0eWxlU2hl
ZXRzRm9yRWxlbWVudChlbGVtZW50LCBuZWVkc0NvbGxlY3Rpb24pOwotICAgIGlmIChuZWVkc0Nv
bGxlY3Rpb24pCi0gICAgICAgIG1fcnVsZVNldHMuY29sbGVjdEZlYXR1cmVzKGRvY3VtZW50KCkt
PmlzVmlld1NvdXJjZSgpLCBtX3Njb3BlUmVzb2x2ZXIuZ2V0KCkpOwotCi0gICAgRWxlbWVudFJ1
bGVDb2xsZWN0b3IgY29sbGVjdG9yKHRoaXMsIHN0YXRlKTsKLSAgICBjb2xsZWN0b3Iuc2V0UmVn
aW9uRm9yU3R5bGluZyhyZWdpb25Gb3JTdHlsaW5nKTsKLSAgICBjb2xsZWN0b3Iuc2V0TWVkaXVt
KG1fbWVkaXVtLmdldCgpKTsKLQotICAgIGlmIChtYXRjaGluZ0JlaGF2aW9yID09IE1hdGNoT25s
eVVzZXJBZ2VudFJ1bGVzKQotICAgICAgICBjb2xsZWN0b3IubWF0Y2hVQVJ1bGVzKCk7Ci0gICAg
ZWxzZQotICAgICAgICBjb2xsZWN0b3IubWF0Y2hBbGxSdWxlcyhtX21hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcywgbWF0Y2hpbmdCZWhhdmlvciAhPSBNYXRjaEFsbFJ1bGVzRXhjbHVkaW5nU01JTCk7
Ci0KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbGxlY3Rvci5tYXRjaGVkUmVzdWx0KCks
IGVsZW1lbnQpOwotCi0gICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkg
YW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVu
ZGVyU3R5bGUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucGFyZW50U3R5bGUoKSwgZWxlbWVudCk7Ci0K
LSAgICBzdGF0ZS5jbGVhcigpOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJlc29sdmUuCi0K
LSAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7Ci0KLSAgICAvLyBOb3cg
cmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7Ci19Ci0KLVBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29u
c3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJh
bWUsIEtleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFsdWUpCi17Ci0gICAgTWF0Y2hSZXN1bHQgcmVz
dWx0OwotICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQotICAgICAgICByZXN1bHQuYWRk
TWF0Y2hlZFByb3BlcnRpZXMoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSk7Ci0KLSAgICBBU1NFUlQo
IW1fc3RhdGUuc3R5bGUoKSk7Ci0KLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotCi0gICAg
Ly8gQ3JlYXRlIHRoZSBzdHlsZQotICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjbG9u
ZShlbGVtZW50U3R5bGUpKTsKLSAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7Ci0KLSAg
ICAvLyBXZSBkb24ndCBuZWVkIHRvIGJvdGhlciB3aXRoICFpbXBvcnRhbnQuIFNpbmNlIHRoZXJl
IGlzIG9ubHkgZXZlciBvbmUKLSAgICAvLyBkZWNsLCB0aGVyZSdzIG5vdGhpbmcgdG8gb3ZlcnJp
ZGUuIFNvIGp1c3QgYWRkIHRoZSBmaXJzdCBwcm9wZXJ0aWVzLgotICAgIGJvb2wgaW5oZXJpdGVk
T25seSA9IGZhbHNlOwotICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQotICAgICAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHJlc3VsdCwgZmFs
c2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5
KTsKLQotICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRl
IGl0IG5vdy4KLSAgICB1cGRhdGVGb250KCk7Ci0KLSAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQg
d2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUKLSAgICBpZiAoc3Rh
dGUubGluZUhlaWdodFZhbHVlKCkpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlM
aW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7Ci0KLSAgICAvLyBOb3cgZG8gcmVz
dCBvZiB0aGUgcHJvcGVydGllcy4KLSAgICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKLSAg
ICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHJlc3Vs
dCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0
ZWRPbmx5KTsKLQotICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkIGJ5IG9uZSBvZiB0aGUg
bm9uLWVzc2VudGlhbCBmb250IHByb3BzLAotICAgIC8vIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQg
YSBzZWNvbmQgdGltZS4KLSAgICB1cGRhdGVGb250KCk7Ci0KLSAgICAvLyBTdGFydCBsb2FkaW5n
IHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdSZXNv
dXJjZXMoKTsKLSAgICAKLSAgICAvLyBBZGQgYWxsIHRoZSBhbmltYXRpbmcgcHJvcGVydGllcyB0
byB0aGUga2V5ZnJhbWUuCi0gICAgaWYgKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlRGVj
bGFyYXRpb24gPSBrZXlmcmFtZS0+cHJvcGVydGllcygpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHBy
b3BlcnR5Q291bnQgPSBzdHlsZURlY2xhcmF0aW9uLT5wcm9wZXJ0eUNvdW50KCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyArK2kpIHsKLSAgICAgICAg
ICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkgPSBzdHlsZURlY2xhcmF0aW9uLT5wcm9wZXJ0eUF0
KGkpLmlkKCk7Ci0gICAgICAgICAgICAvLyBUaW1pbmctZnVuY3Rpb24gd2l0aGluIGtleWZyYW1l
cyBpcyBzcGVjaWFsLCBiZWNhdXNlIGl0IGlzIG5vdCBhbmltYXRlZDsgaXQganVzdAotICAgICAg
ICAgICAgLy8gZGVzY3JpYmVzIHRoZSB0aW1pbmcgZnVuY3Rpb24gYmV0d2VlbiB0aGlzIGtleWZy
YW1lIGFuZCB0aGUgbmV4dC4KLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eSAhPSBDU1NQcm9wZXJ0
eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKQotICAgICAgICAgICAgICAgIGtleWZyYW1l
VmFsdWUuYWRkUHJvcGVydHkocHJvcGVydHkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZG9j
dW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwotCi0gICAgcmV0dXJuIHN0YXRlLnRh
a2VTdHlsZSgpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9yQW5p
bWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIEtleWZy
YW1lTGlzdCYgbGlzdCkKLXsKLSAgICBsaXN0LmNsZWFyKCk7Ci0KLSAgICAvLyBHZXQgdGhlIGtl
eWZyYW1lc1J1bGUgZm9yIHRoaXMgbmFtZQotICAgIGlmICghZSB8fCBsaXN0LmFuaW1hdGlvbk5h
bWUoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fa2V5ZnJhbWVzUnVsZU1h
cC5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBLZXlmcmFtZXNSdWxlTWFwOjppdGVyYXRvciBp
dCA9IG1fa2V5ZnJhbWVzUnVsZU1hcC5maW5kKGxpc3QuYW5pbWF0aW9uTmFtZSgpLmltcGwoKSk7
Ci0gICAgaWYgKGl0ID09IG1fa2V5ZnJhbWVzUnVsZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKiBrZXlmcmFtZXNSdWxlID0gaXQtPnZh
bHVlLmdldCgpOwotCi0gICAgLy8gQ29uc3RydWN0IGFuZCBwb3B1bGF0ZSB0aGUgc3R5bGUgZm9y
IGVhY2gga2V5ZnJhbWUKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+ID4m
IGtleWZyYW1lcyA9IGtleWZyYW1lc1J1bGUtPmtleWZyYW1lcygpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgLy8gQXBwbHkg
dGhlIGRlY2xhcmF0aW9uIHRvIHRoZSBzdHlsZS4gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lv
biBvZiB0aGUgbG9naWMgaW4gc3R5bGVGb3JFbGVtZW50Ci0gICAgICAgIGluaXRFbGVtZW50KGUp
OwotICAgICAgICBtX3N0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZSk7Ci0K
LSAgICAgICAgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUgPSBrZXlmcmFtZXNbaV0uZ2V0
KCk7Ci0KLSAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDAsIDApOwotICAgICAg
ICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBr
ZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOwotCi0gICAgICAgIC8vIEFkZCB0aGlzIGtleWZyYW1l
IHN0eWxlIHRvIGFsbCB0aGUgaW5kaWNhdGVkIGtleSB0aW1lcwotICAgICAgICBWZWN0b3I8Zmxv
YXQ+IGtleXM7Ci0gICAgICAgIGtleWZyYW1lLT5nZXRLZXlzKGtleXMpOwotICAgICAgICBmb3Ig
KHNpemVfdCBrZXlJbmRleCA9IDA7IGtleUluZGV4IDwga2V5cy5zaXplKCk7ICsra2V5SW5kZXgp
IHsKLSAgICAgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0S2V5KGtleXNba2V5SW5kZXhdKTsKLSAg
ICAgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgLy8gSWYgdGhlIDAlIGtleWZyYW1lIGlzIG1pc3NpbmcsIGNyZWF0ZSBpdCAoYnV0IG9u
bHkgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG90aGVyIGtleWZyYW1lKQotICAgIGludCBpbml0
aWFsTGlzdFNpemUgPSBsaXN0LnNpemUoKTsKLSAgICBpZiAoaW5pdGlhbExpc3RTaXplID4gMCAm
JiBsaXN0WzBdLmtleSgpKSB7Ci0gICAgICAgIHN0YXRpYyBTdHlsZUtleWZyYW1lKiB6ZXJvUGVy
Y2VudEtleWZyYW1lOwotICAgICAgICBpZiAoIXplcm9QZXJjZW50S2V5ZnJhbWUpIHsKLSAgICAg
ICAgICAgIHplcm9QZXJjZW50S2V5ZnJhbWUgPSBTdHlsZUtleWZyYW1lOjpjcmVhdGUoKS5sZWFr
UmVmKCk7Ci0gICAgICAgICAgICB6ZXJvUGVyY2VudEtleWZyYW1lLT5zZXRLZXlUZXh0KCIwJSIp
OwotICAgICAgICB9Ci0gICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsK
LSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRT
dHlsZSwgemVyb1BlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOwotICAgICAgICBsaXN0
Lmluc2VydChrZXlmcmFtZVZhbHVlKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgMTAwJSBrZXlm
cmFtZSBpcyBtaXNzaW5nLCBjcmVhdGUgaXQgKGJ1dCBvbmx5IGlmIHRoZXJlIGlzIGF0IGxlYXN0
IG9uZSBvdGhlciBrZXlmcmFtZSkKLSAgICBpZiAoaW5pdGlhbExpc3RTaXplID4gMCAmJiAobGlz
dFtsaXN0LnNpemUoKSAtIDFdLmtleSgpICE9IDEpKSB7Ci0gICAgICAgIHN0YXRpYyBTdHlsZUtl
eWZyYW1lKiBodW5kcmVkUGVyY2VudEtleWZyYW1lOwotICAgICAgICBpZiAoIWh1bmRyZWRQZXJj
ZW50S2V5ZnJhbWUpIHsKLSAgICAgICAgICAgIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUgPSBTdHls
ZUtleWZyYW1lOjpjcmVhdGUoKS5sZWFrUmVmKCk7Ci0gICAgICAgICAgICBodW5kcmVkUGVyY2Vu
dEtleWZyYW1lLT5zZXRLZXlUZXh0KCIxMDAlIik7Ci0gICAgICAgIH0KLSAgICAgICAgS2V5ZnJh
bWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDEsIDApOwotICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0
eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBodW5kcmVkUGVyY2VudEtleWZyYW1l
LCBrZXlmcmFtZVZhbHVlKSk7Ci0gICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOwot
ICAgIH0KLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRv
U3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGUsIGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVzdCYgcHNl
dWRvU3R5bGVSZXF1ZXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCi17Ci0gICAgQVNTRVJU
KHBhcmVudFN0eWxlKTsKLSAgICBpZiAoIWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU3Rh
dGUmIHN0YXRlID0gbV9zdGF0ZTsKLQotICAgIGluaXRFbGVtZW50KGUpOwotCi0gICAgc3RhdGUu
aW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlLCBwYXJlbnRTdHlsZSk7Ci0KLSAgICBp
ZiAobV9zdGF0ZS5wYXJlbnRTdHlsZSgpKSB7Ci0gICAgICAgIHN0YXRlLnNldFN0eWxlKFJlbmRl
clN0eWxlOjpjcmVhdGUoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKG1f
c3RhdGUucGFyZW50U3R5bGUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGUuc2V0U3R5
bGUoZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpKTsKLSAgICAgICAgc3RhdGUuc2V0UGFyZW50U3R5
bGUoUmVuZGVyU3R5bGU6OmNsb25lKHN0YXRlLnN0eWxlKCkpKTsKLSAgICB9Ci0KLSAgICAvLyBT
aW5jZSB3ZSBkb24ndCB1c2UgcHNldWRvLWVsZW1lbnRzIGluIGFueSBvZiBvdXIgcXVpcmsvcHJp
bnQgdXNlciBhZ2VudCBydWxlcywgZG9uJ3Qgd2FzdGUgdGltZSB3YWxraW5nCi0gICAgLy8gdGhv
c2UgcnVsZXMuCi0KLSAgICAvLyBDaGVjayBVQSwgdXNlciBhbmQgYXV0aG9yIHJ1bGVzLgotICAg
IEVsZW1lbnRSdWxlQ29sbGVjdG9yIGNvbGxlY3Rvcih0aGlzLCBzdGF0ZSk7Ci0gICAgY29sbGVj
dG9yLnNldFBzZXVkb1N0eWxlUmVxdWVzdChwc2V1ZG9TdHlsZVJlcXVlc3QpOwotICAgIGNvbGxl
Y3Rvci5zZXRNZWRpdW0obV9tZWRpdW0uZ2V0KCkpOwotICAgIGNvbGxlY3Rvci5tYXRjaFVBUnVs
ZXMoKTsKLQotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykgewotICAgICAgICBj
b2xsZWN0b3IubWF0Y2hVc2VyUnVsZXMoZmFsc2UpOwotICAgICAgICBjb2xsZWN0b3IubWF0Y2hB
dXRob3JSdWxlcyhmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKGNvbGxlY3Rvci5tYXRjaGVkUmVz
dWx0KCkubWF0Y2hlZFByb3BlcnRpZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHN0YXRlLnN0eWxlKCktPnNldFN0eWxlVHlwZShwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRv
SWQpOwotCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb2xsZWN0b3IubWF0Y2hlZFJlc3Vs
dCgpLCBlKTsKLQotICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFu
ZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRl
clN0eWxlKHN0YXRlLnN0eWxlKCksIG1fc3RhdGUucGFyZW50U3R5bGUoKSwgMCk7Ci0KLSAgICAv
LyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAg
bG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKLQotICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxl
UmVzb2x2ZXIoKTsKLQotICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBz
dGF0ZS50YWtlU3R5bGUoKTsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCi17Ci0gICAgbV9zdGF0ZS5pbml0Rm9y
U3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsg
Ly8gbV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4K
LQotICAgIG1fc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKLSAgICBtX3N0
YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKLQot
ICAgIFBhZ2VSdWxlQ29sbGVjdG9yIGNvbGxlY3RvcihtX3N0YXRlLCBtX3J1bGVTZXRzKTsKLSAg
ICBjb2xsZWN0b3IubWF0Y2hBbGxQYWdlUnVsZXMocGFnZUluZGV4KTsKLSAgICBtX3N0YXRlLnNl
dExpbmVIZWlnaHRWYWx1ZSgwKTsKLSAgICBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZTsKLQot
ICAgIE1hdGNoUmVzdWx0JiByZXN1bHQgPSBjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgpOwotI2lm
IEVOQUJMRShDU1NfVkFSSUFCTEVTKQotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFi
bGVEZWZpbml0aW9ucz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVz
LnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwotI2VuZGlmCi0gICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQu
bWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7Ci0KLSAgICAvLyBJ
ZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCi0gICAg
dXBkYXRlRm9udCgpOwotCi0gICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1
cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgotICAgIGlmIChtX3N0YXRlLmxpbmVIZWln
aHRWYWx1ZSgpKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwg
bV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7Ci0KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQ
cm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwotCi0gICAgLy8gU3RhcnQgbG9h
ZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5n
UmVzb3VyY2VzKCk7Ci0KLSAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7
Ci0KLSAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gbV9zdGF0ZS50YWtl
U3R5bGUoKTsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6ZGVm
YXVsdFN0eWxlRm9yRWxlbWVudCgpCi17Ci0gICAgbV9zdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHls
ZTo6Y3JlYXRlKCkpOwotICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9udHMgYXJlIGluaXRpYWxpemVk
IGlmIHdlIGRvbid0IGluaGVyaXQgdGhlbSBmcm9tIG91ciBwYXJlbnQgc3R5bGUuCi0gICAgaWYg
KFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKSkgewotICAgICAgICBpbml0
aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsKLSAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250
KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9zdGF0ZS5z
dHlsZSgpLT5mb250KCkudXBkYXRlKDApOwotCi0gICAgcmV0dXJuIG1fc3RhdGUudGFrZVN0eWxl
KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUqIHN0
eWxlKQotewotICAgIC8vIEludHJpbnNpYyBtYXJnaW4gdmFsdWUuCi0gICAgY29uc3QgaW50IGlu
dHJpbnNpY01hcmdpbiA9IDIgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgLy8gRklY
TUU6IFVzaW5nIHdpZHRoL2hlaWdodCBhbG9uZSBhbmQgbm90IGFsc28gZGVhbGluZyB3aXRoIG1p
bi13aWR0aC9tYXgtd2lkdGggaXMgZmxhd2VkLgotICAgIC8vIEZJWE1FOiBVc2luZyAicXVpcmsi
IHRvIGRlY2lkZSB0aGUgbWFyZ2luIHdhc24ndCBzZXQgaXMga2luZCBvZiBsYW1lLgotICAgIGlm
IChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKSB7Ci0gICAgICAgIGlmIChzdHls
ZS0+bWFyZ2luTGVmdCgpLnF1aXJrKCkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luTGVm
dChMZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOwotICAgICAgICBpZiAoc3R5bGUtPm1h
cmdpblJpZ2h0KCkucXVpcmsoKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5SaWdodChM
ZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOwotICAgIH0KLQotICAgIGlmIChzdHlsZS0+
aGVpZ2h0KCkuaXNBdXRvKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5Ub3AoKS5xdWly
aygpKQotICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpblRvcChMZW5ndGgoaW50cmluc2ljTWFy
Z2luLCBGaXhlZCkpOwotICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkJvdHRvbSgpLnF1aXJrKCkp
Ci0gICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luQm90dG9tKExlbmd0aChpbnRyaW5zaWNNYXJn
aW4sIEZpeGVkKSk7Ci0gICAgfQotfQotCi1zdGF0aWMgRURpc3BsYXkgZXF1aXZhbGVudEJsb2Nr
RGlzcGxheShFRGlzcGxheSBkaXNwbGF5LCBib29sIGlzRmxvYXRpbmcsIGJvb2wgc3RyaWN0UGFy
c2luZykKLXsKLSAgICBzd2l0Y2ggKGRpc3BsYXkpIHsKLSAgICBjYXNlIEJMT0NLOgotICAgIGNh
c2UgVEFCTEU6Ci0gICAgY2FzZSBCT1g6Ci0gICAgY2FzZSBGTEVYOgotICAgIGNhc2UgR1JJRDoK
LSAgICAgICAgcmV0dXJuIGRpc3BsYXk7Ci0KLSAgICBjYXNlIExJU1RfSVRFTToKLSAgICAgICAg
Ly8gSXQgaXMgYSBXaW5JRSBidWcgdGhhdCBmbG9hdGVkIGxpc3QgaXRlbXMgbG9zZSB0aGVpciBi
dWxsZXRzLCBzbyB3ZSdsbCBlbXVsYXRlIHRoZSBxdWlyaywgYnV0IG9ubHkgaW4gcXVpcmtzIG1v
ZGUuCi0gICAgICAgIGlmICghc3RyaWN0UGFyc2luZyAmJiBpc0Zsb2F0aW5nKQotICAgICAgICAg
ICAgcmV0dXJuIEJMT0NLOwotICAgICAgICByZXR1cm4gZGlzcGxheTsKLSAgICBjYXNlIElOTElO
RV9UQUJMRToKLSAgICAgICAgcmV0dXJuIFRBQkxFOwotICAgIGNhc2UgSU5MSU5FX0JPWDoKLSAg
ICAgICAgcmV0dXJuIEJPWDsKLSAgICBjYXNlIElOTElORV9GTEVYOgotICAgICAgICByZXR1cm4g
RkxFWDsKLSAgICBjYXNlIElOTElORV9HUklEOgotICAgICAgICByZXR1cm4gR1JJRDsKLQotICAg
IGNhc2UgSU5MSU5FOgotICAgIGNhc2UgUlVOX0lOOgotICAgIGNhc2UgQ09NUEFDVDoKLSAgICBj
YXNlIElOTElORV9CTE9DSzoKLSAgICBjYXNlIFRBQkxFX1JPV19HUk9VUDoKLSAgICBjYXNlIFRB
QkxFX0hFQURFUl9HUk9VUDoKLSAgICBjYXNlIFRBQkxFX0ZPT1RFUl9HUk9VUDoKLSAgICBjYXNl
IFRBQkxFX1JPVzoKLSAgICBjYXNlIFRBQkxFX0NPTFVNTl9HUk9VUDoKLSAgICBjYXNlIFRBQkxF
X0NPTFVNTjoKLSAgICBjYXNlIFRBQkxFX0NFTEw6Ci0gICAgY2FzZSBUQUJMRV9DQVBUSU9OOgot
ICAgICAgICByZXR1cm4gQkxPQ0s7Ci0gICAgY2FzZSBOT05FOgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIE5PTkU7Ci0gICAgfQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBCTE9DSzsKLX0KLQotLy8gQ1NTIHJlcXVpcmVzIHRleHQt
ZGVjb3JhdGlvbiB0byBiZSByZXNldCBhdCBlYWNoIERPTSBlbGVtZW50IGZvciB0YWJsZXMsIAot
Ly8gaW5saW5lIGJsb2NrcywgaW5saW5lIHRhYmxlcywgcnVuLWlucywgc2hhZG93IERPTSBjcm9z
c2luZ3MsIGZsb2F0aW5nIGVsZW1lbnRzLAotLy8gYW5kIGFic29sdXRlIG9yIHJlbGF0aXZlbHkg
cG9zaXRpb25lZCBlbGVtZW50cy4KLXN0YXRpYyBib29sIGRvZXNOb3RJbmhlcml0VGV4dERlY29y
YXRpb24oUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKQotewotICAgIHJldHVybiBzdHls
ZS0+ZGlzcGxheSgpID09IFRBQkxFIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX1RBQkxF
IHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gUlVOX0lOCi0gICAgICAgIHx8IHN0eWxlLT5kaXNwbGF5
KCkgPT0gSU5MSU5FX0JMT0NLIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JPWCB8fCBp
c0F0U2hhZG93Qm91bmRhcnkoZSkKLSAgICAgICAgfHwgc3R5bGUtPmlzRmxvYXRpbmcoKSB8fCBz
dHlsZS0+aGFzT3V0T2ZGbG93UG9zaXRpb24oKTsKLX0KLQotc3RhdGljIGJvb2wgaXNEaXNwbGF5
RmxleGlibGVCb3goRURpc3BsYXkgZGlzcGxheSkKLXsKLSAgICByZXR1cm4gZGlzcGxheSA9PSBG
TEVYIHx8IGRpc3BsYXkgPT0gSU5MSU5FX0ZMRVg7Ci19Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfT1ZFUkZMT1dfU0NST0xMSU5HKQotc3RhdGljIGJvb2wgaXNTY3JvbGxhYmxlT3ZlcmZsb3co
RU92ZXJmbG93IG92ZXJmbG93KQotewotICAgIHJldHVybiBvdmVyZmxvdyA9PSBPU0NST0xMIHx8
IG92ZXJmbG93ID09IE9BVVRPIHx8IG92ZXJmbG93ID09IE9PVkVSTEFZOwotfQotI2VuZGlmCi0K
LXZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxl
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQgKmUpCi17Ci0gICAgQVNTRVJUKHBh
cmVudFN0eWxlKTsKLQotICAgIC8vIENhY2hlIG91ciBvcmlnaW5hbCBkaXNwbGF5LgotICAgIHN0
eWxlLT5zZXRPcmlnaW5hbERpc3BsYXkoc3R5bGUtPmRpc3BsYXkoKSk7Ci0KLSAgICBpZiAoc3R5
bGUtPmRpc3BsYXkoKSAhPSBOT05FKSB7Ci0gICAgICAgIC8vIElmIHdlIGhhdmUgYSA8dGQ+IHRo
YXQgc3BlY2lmaWVzIGEgZmxvYXQgcHJvcGVydHksIGluIHF1aXJrcyBtb2RlIHdlIGp1c3QgZHJv
cCB0aGUgZmxvYXQKLSAgICAgICAgLy8gcHJvcGVydHkuCi0gICAgICAgIC8vIFNpdGVzIGFsc28g
Y29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Jsb2NrIG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4g
SW4gcXVpcmtzIG1vZGUgd2UgZm9yY2UKLSAgICAgICAgLy8gdGhlc2UgdGFncyB0byByZXRhaW4g
dGhlaXIgZGlzcGxheSB0eXBlcy4KLSAgICAgICAgaWYgKGRvY3VtZW50KCktPmluUXVpcmtzTW9k
ZSgpICYmIGUpIHsKLSAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKHRkVGFnKSkgewotICAg
ICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KFRBQkxFX0NFTEwpOwotICAgICAgICAgICAg
ICAgIHN0eWxlLT5zZXRGbG9hdGluZyhOb0Zsb2F0KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
aXNIVE1MVGFibGVFbGVtZW50KGUpKQotICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5
KHN0eWxlLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkgPyBJTkxJTkVfVEFCTEUgOiBUQUJMRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoZSAmJiAoZS0+aGFzVGFnTmFtZSh0ZFRhZykgfHwgZS0+
aGFzVGFnTmFtZSh0aFRhZykpKSB7Ci0gICAgICAgICAgICBpZiAoc3R5bGUtPndoaXRlU3BhY2Uo
KSA9PSBLSFRNTF9OT1dSQVApIHsKLSAgICAgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IGlmIHdl
IGFyZSByZWFsbHkgbm93cmFwcGluZyBvciBpZiB3ZSBzaG91bGQganVzdAotICAgICAgICAgICAg
ICAgIC8vIHVzZSBub3JtYWwgaW5zdGVhZC4gSWYgdGhlIHdpZHRoIG9mIHRoZSBjZWxsIGlzIGZp
eGVkLCB0aGVuCi0gICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIE5PV1JB
UC4KLSAgICAgICAgICAgICAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNGaXhlZCgpKQotICAgICAg
ICAgICAgICAgICAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShOT1JNQUwpOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoTk9XUkFQ
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRhYmxlcyBuZXZlciBz
dXBwb3J0IHRoZSAtd2Via2l0LSogdmFsdWVzIGZvciB0ZXh0LWFsaWduIGFuZCB3aWxsIHJlc2V0
IGJhY2sgdG8gdGhlIGRlZmF1bHQuCi0gICAgICAgIGlmIChlICYmIGlzSFRNTFRhYmxlRWxlbWVu
dChlKSAmJiAoc3R5bGUtPnRleHRBbGlnbigpID09IFdFQktJVF9MRUZUIHx8IHN0eWxlLT50ZXh0
QWxpZ24oKSA9PSBXRUJLSVRfQ0VOVEVSIHx8IHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRf
UklHSFQpKQotICAgICAgICAgICAgc3R5bGUtPnNldFRleHRBbGlnbihUQVNUQVJUKTsKLQotICAg
ICAgICAvLyBGcmFtZXMgYW5kIGZyYW1lc2V0cyBuZXZlciBob25vciBwb3NpdGlvbjpyZWxhdGl2
ZSBvciBwb3NpdGlvbjphYnNvbHV0ZS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8KLSAgICAgICAgLy8g
Zml4IGEgY3Jhc2ggd2hlcmUgYSBzaXRlIHRyaWVzIHRvIHBvc2l0aW9uIHRoZXNlIG9iamVjdHMu
IFRoZXkgYWxzbyBuZXZlciBob25vciBkaXNwbGF5LgotICAgICAgICBpZiAoZSAmJiAoZS0+aGFz
VGFnTmFtZShmcmFtZVRhZykgfHwgZS0+aGFzVGFnTmFtZShmcmFtZXNldFRhZykpKSB7Ci0gICAg
ICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oU3RhdGljUG9zaXRpb24pOwotICAgICAgICAgICAg
c3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUnVieSB0
ZXh0IGRvZXMgbm90IHN1cHBvcnQgZmxvYXQgb3IgcG9zaXRpb24uIFRoaXMgbWlnaHQgY2hhbmdl
IHdpdGggZXZvbHV0aW9uIG9mIHRoZSBzcGVjaWZpY2F0aW9uLgotICAgICAgICBpZiAoZSAmJiBl
LT5oYXNUYWdOYW1lKHJ0VGFnKSkgewotICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFN0
YXRpY1Bvc2l0aW9uKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhOb0Zsb2F0KTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgb3ZlcnJpZGlu
ZyBzdGFydC8td2Via2l0LWF1dG8gbGlrZSB0aGlzLiBEbyBpdCBpbiBodG1sLmNzcyBpbnN0ZWFk
LgotICAgICAgICAvLyBUYWJsZSBoZWFkZXJzIHdpdGggYSB0ZXh0LWFsaWduIG9mIC13ZWJraXQt
YXV0byB3aWxsIGNoYW5nZSB0aGUgdGV4dC1hbGlnbiB0byBjZW50ZXIuCi0gICAgICAgIGlmIChl
ICYmIGUtPmhhc1RhZ05hbWUodGhUYWcpICYmIHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBUQVNUQVJU
KQotICAgICAgICAgICAgc3R5bGUtPnNldFRleHRBbGlnbihDRU5URVIpOwotCi0gICAgICAgIGlm
IChlICYmIGUtPmhhc1RhZ05hbWUobGVnZW5kVGFnKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRE
aXNwbGF5KEJMT0NLKTsKLQotICAgICAgICAvLyBBYnNvbHV0ZS9maXhlZCBwb3NpdGlvbmVkIGVs
ZW1lbnRzLCBmbG9hdGluZyBlbGVtZW50cyBhbmQgdGhlIGRvY3VtZW50IGVsZW1lbnQgbmVlZCBi
bG9jay1saWtlIG91dHNpZGUgZGlzcGxheS4KLSAgICAgICAgaWYgKHN0eWxlLT5oYXNPdXRPZkZs
b3dQb3NpdGlvbigpIHx8IHN0eWxlLT5pc0Zsb2F0aW5nKCkgfHwgKGUgJiYgZS0+ZG9jdW1lbnQo
KS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gZSkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxh
eShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxlLT5kaXNwbGF5KCksIHN0eWxlLT5pc0Zsb2F0
aW5nKCksICFkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkpOwotCi0gICAgICAgIC8vIEZJWE1F
OiBEb24ndCBzdXBwb3J0IHRoaXMgbXV0YXRpb24gZm9yIHBzZXVkbyBzdHlsZXMgbGlrZSBmaXJz
dC1sZXR0ZXIgb3IgZmlyc3QtbGluZSwgc2luY2UgaXQncyBub3QgY29tcGxldGVseQotICAgICAg
ICAvLyBjbGVhciBob3cgdGhhdCBzaG91bGQgd29yay4KLSAgICAgICAgaWYgKHN0eWxlLT5kaXNw
bGF5KCkgPT0gSU5MSU5FICYmIHN0eWxlLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETyAmJiBzdHls
ZS0+d3JpdGluZ01vZGUoKSAhPSBwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSkKLSAgICAgICAg
ICAgIHN0eWxlLT5zZXREaXNwbGF5KElOTElORV9CTE9DSyk7Ci0KLSAgICAgICAgLy8gQWZ0ZXIg
cGVyZm9ybWluZyB0aGUgZGlzcGxheSBtdXRhdGlvbiwgY2hlY2sgdGFibGUgcm93cy4gV2UgZG8g
bm90IGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZlIG9yIHBvc2l0aW9uOnN0aWNreSBvbgotICAgICAg
ICAvLyB0YWJsZSByb3dzIG9yIGNlbGxzLiBUaGlzIGhhcyBiZWVuIGVzdGFibGlzaGVkIGZvciBw
b3NpdGlvbjpyZWxhdGl2ZSBpbiBDU1MyLjEgKGFuZCBjYXVzZWQgYSBjcmFzaCBpbiBjb250YWlu
aW5nQmxvY2soKQotICAgICAgICAvLyBvbiBzb21lIHNpdGVzKS4KLSAgICAgICAgaWYgKChzdHls
ZS0+ZGlzcGxheSgpID09IFRBQkxFX0hFQURFUl9HUk9VUCB8fCBzdHlsZS0+ZGlzcGxheSgpID09
IFRBQkxFX1JPV19HUk9VUAotICAgICAgICAgICAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJM
RV9GT09URVJfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1cpCi0gICAgICAg
ICAgICAmJiBzdHlsZS0+aGFzSW5GbG93UG9zaXRpb24oKSkKLSAgICAgICAgICAgIHN0eWxlLT5z
ZXRQb3NpdGlvbihTdGF0aWNQb3NpdGlvbik7Ci0KLSAgICAgICAgLy8gd3JpdGluZy1tb2RlIGRv
ZXMgbm90IGFwcGx5IHRvIHRhYmxlIHJvdyBncm91cHMsIHRhYmxlIGNvbHVtbiBncm91cHMsIHRh
YmxlIHJvd3MsIGFuZCB0YWJsZSBjb2x1bW5zLgotICAgICAgICAvLyBGSVhNRTogVGFibGUgY2Vs
bHMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gYmUgcGVycGVuZGljdWxhciBvciBmbGlwcGVkIHdpdGgg
cmVzcGVjdCB0byB0aGUgdGFibGUsIHRob3VnaC4KLSAgICAgICAgaWYgKHN0eWxlLT5kaXNwbGF5
KCkgPT0gVEFCTEVfQ09MVU1OIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfQ09MVU1OX0dS
T1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfRk9PVEVSX0dST1VQCi0gICAgICAgICAg
ICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0hFQURFUl9HUk9VUCB8fCBzdHlsZS0+ZGlz
cGxheSgpID09IFRBQkxFX1JPVyB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPV19HUk9V
UAotICAgICAgICAgICAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9DRUxMKQotICAgICAg
ICAgICAgc3R5bGUtPnNldFdyaXRpbmdNb2RlKHBhcmVudFN0eWxlLT53cml0aW5nTW9kZSgpKTsK
LQotICAgICAgICAvLyBGSVhNRTogU2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBibG9jay1mbG93IG9u
IGZsZXhpYmxlIGJveGVzIHlldCwgZGlzYWxsb3cgc2V0dGluZwotICAgICAgICAvLyBvZiBibG9j
ay1mbG93IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gVG9wVG9Cb3R0b21Xcml0aW5nTW9kZS4KLSAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NDE4IC0g
RmxleGlibGUgYm94IHN1cHBvcnQuCi0gICAgICAgIGlmIChzdHlsZS0+d3JpdGluZ01vZGUoKSAh
PSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlICYmIChzdHlsZS0+ZGlzcGxheSgpID09IEJPWCB8fCBz
dHlsZS0+ZGlzcGxheSgpID09IElOTElORV9CT1gpKQotICAgICAgICAgICAgc3R5bGUtPnNldFdy
aXRpbmdNb2RlKFRvcFRvQm90dG9tV3JpdGluZ01vZGUpOwotCi0gICAgICAgIGlmIChpc0Rpc3Bs
YXlGbGV4aWJsZUJveChwYXJlbnRTdHlsZS0+ZGlzcGxheSgpKSkgewotICAgICAgICAgICAgc3R5
bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOwotICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXko
ZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZS0+ZGlzcGxheSgpLCBzdHlsZS0+aXNGbG9hdGlu
ZygpLCAhZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpKTsKLSAgICAgICAgfQotCi0jaWYgRU5B
QkxFKERJQUxPR19FTEVNRU5UKQotICAgICAgICAvLyBQZXIgdGhlIHNwZWMsIHBvc2l0aW9uICdz
dGF0aWMnIGFuZCAncmVsYXRpdmUnIGluIHRoZSB0b3AgbGF5ZXIgY29tcHV0ZSB0byAnYWJzb2x1
dGUnLgotICAgICAgICBpZiAoZSAmJiBlLT5pc0luVG9wTGF5ZXIoKSAmJiAoc3R5bGUtPnBvc2l0
aW9uKCkgPT0gU3RhdGljUG9zaXRpb24gfHwgc3R5bGUtPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQ
b3NpdGlvbikpIHsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQb3NpdGlvbihBYnNvbHV0ZVBvc2l0
aW9uKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLSAgICAgICAgfQot
I2VuZGlmCi0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIG91ciB6LWluZGV4IHZhbHVlIGlzIG9u
bHkgYXBwbGllZCBpZiB0aGUgb2JqZWN0IGlzIHBvc2l0aW9uZWQuCi0gICAgaWYgKHN0eWxlLT5w
b3NpdGlvbigpID09IFN0YXRpY1Bvc2l0aW9uICYmICFpc0Rpc3BsYXlGbGV4aWJsZUJveChwYXJl
bnRTdHlsZS0+ZGlzcGxheSgpKSkKLSAgICAgICAgc3R5bGUtPnNldEhhc0F1dG9aSW5kZXgoKTsK
LQotICAgIC8vIEF1dG8gei1pbmRleCBiZWNvbWVzIDAgZm9yIHRoZSByb290IGVsZW1lbnQgYW5k
IHRyYW5zcGFyZW50IG9iamVjdHMuIFRoaXMgcHJldmVudHMKLSAgICAvLyBjYXNlcyB3aGVyZSBv
YmplY3RzIHRoYXQgc2hvdWxkIGJlIGJsZW5kZWQgYXMgYSBzaW5nbGUgdW5pdCBlbmQgdXAgd2l0
aCBhIG5vbi10cmFuc3BhcmVudAotICAgIC8vIG9iamVjdCB3ZWRnZWQgaW4gYmV0d2VlbiB0aGVt
LiBBdXRvIHotaW5kZXggYWxzbyBiZWNvbWVzIDAgZm9yIG9iamVjdHMgdGhhdCBzcGVjaWZ5IHRy
YW5zZm9ybXMvbWFza3MvcmVmbGVjdGlvbnMuCi0gICAgaWYgKHN0eWxlLT5oYXNBdXRvWkluZGV4
KCkgJiYgKChlICYmIGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IGUpCi0gICAg
ICAgIHx8IHN0eWxlLT5vcGFjaXR5KCkgPCAxLjBmCi0gICAgICAgIHx8IHN0eWxlLT5oYXNUcmFu
c2Zvcm1SZWxhdGVkUHJvcGVydHkoKQotICAgICAgICB8fCBzdHlsZS0+aGFzTWFzaygpCi0gICAg
ICAgIHx8IHN0eWxlLT5jbGlwUGF0aCgpCi0gICAgICAgIHx8IHN0eWxlLT5ib3hSZWZsZWN0KCkK
LSAgICAgICAgfHwgc3R5bGUtPmhhc0ZpbHRlcigpCi0gICAgICAgIHx8IHN0eWxlLT5oYXNCbGVu
ZE1vZGUoKQotICAgICAgICB8fCBzdHlsZS0+cG9zaXRpb24oKSA9PSBTdGlja3lQb3NpdGlvbgot
ICAgICAgICB8fCAoc3R5bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbiAmJiBlICYmIGUt
PmRvY3VtZW50KCktPnBhZ2UoKSAmJiBlLT5kb2N1bWVudCgpLT5wYWdlKCktPnNldHRpbmdzKCkt
PmZpeGVkUG9zaXRpb25DcmVhdGVzU3RhY2tpbmdDb250ZXh0KCkpCi0jaWYgRU5BQkxFKERJQUxP
R19FTEVNRU5UKQotICAgICAgICB8fCAoZSAmJiBlLT5pc0luVG9wTGF5ZXIoKSkKLSNlbmRpZgot
ICAgICAgICApKQotICAgICAgICBzdHlsZS0+c2V0WkluZGV4KDApOwotCi0gICAgLy8gVGV4dGFy
ZWEgY29uc2lkZXJzIG92ZXJmbG93IHZpc2libGUgYXMgYXV0by4KLSAgICBpZiAoZSAmJiBpc0hU
TUxUZXh0QXJlYUVsZW1lbnQoZSkpIHsKLSAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChzdHls
ZS0+b3ZlcmZsb3dYKCkgPT0gT1ZJU0lCTEUgPyBPQVVUTyA6IHN0eWxlLT5vdmVyZmxvd1goKSk7
Ci0gICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1koc3R5bGUtPm92ZXJmbG93WSgpID09IE9WSVNJ
QkxFID8gT0FVVE8gOiBzdHlsZS0+b3ZlcmZsb3dZKCkpOwotICAgIH0KLQotICAgIGlmIChkb2Vz
Tm90SW5oZXJpdFRleHREZWNvcmF0aW9uKHN0eWxlLCBlKSkKLSAgICAgICAgc3R5bGUtPnNldFRl
eHREZWNvcmF0aW9uc0luRWZmZWN0KHN0eWxlLT50ZXh0RGVjb3JhdGlvbigpKTsKLSAgICBlbHNl
Ci0gICAgICAgIHN0eWxlLT5hZGRUb1RleHREZWNvcmF0aW9uc0luRWZmZWN0KHN0eWxlLT50ZXh0
RGVjb3JhdGlvbigpKTsKLQotICAgIC8vIElmIGVpdGhlciBvdmVyZmxvdyB2YWx1ZSBpcyBub3Qg
dmlzaWJsZSwgY2hhbmdlIHRvIGF1dG8uCi0gICAgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBP
TUFSUVVFRSAmJiBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT01BUlFVRUUpCi0gICAgICAgIHN0eWxl
LT5zZXRPdmVyZmxvd1koT01BUlFVRUUpOwotICAgIGVsc2UgaWYgKHN0eWxlLT5vdmVyZmxvd1ko
KSA9PSBPTUFSUVVFRSAmJiBzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT01BUlFVRUUpCi0gICAgICAg
IHN0eWxlLT5zZXRPdmVyZmxvd1goT01BUlFVRUUpOwotICAgIGVsc2UgaWYgKHN0eWxlLT5vdmVy
Zmxvd1goKSA9PSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT1ZJU0lCTEUpIHsK
LSAgICAgICAgLy8gRklYTUU6IE9uY2Ugd2UgaW1wbGVtZW50IHBhZ2luYXRpb24gY29udHJvbHMs
IG92ZXJmbG93LXggc2hvdWxkIGRlZmF1bHQgdG8gaGlkZGVuCi0gICAgICAgIC8vIGlmIG92ZXJm
bG93LXkgaXMgc2V0IHRvIC13ZWJraXQtcGFnZWQteCBvciAtd2Via2l0LXBhZ2UteS4gRm9yIG5v
dywgd2UnbGwgbGV0IGl0Ci0gICAgICAgIC8vIGRlZmF1bHQgdG8gYXV0byBzbyB3ZSBjYW4gYXQg
bGVhc3Qgc2Nyb2xsIHRocm91Z2ggdGhlIHBhZ2VzLgotICAgICAgICBzdHlsZS0+c2V0T3ZlcmZs
b3dYKE9BVVRPKTsKLSAgICB9IGVsc2UgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPVklTSUJM
RSAmJiBzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT1ZJU0lCTEUpCi0gICAgICAgIHN0eWxlLT5zZXRP
dmVyZmxvd1koT0FVVE8pOwotCi0gICAgLy8gQ2FsbCBzZXRTdHlsZXNGb3JQYWdpbmF0aW9uTW9k
ZSgpIGlmIGEgcGFnaW5hdGlvbiBtb2RlIGlzIHNldCBmb3IgYW55IG5vbi1yb290IGVsZW1lbnRz
LiBJZiB0aGVzZQotICAgIC8vIHN0eWxlcyBhcmUgc3BlY2lmaWVkIG9uIGEgcm9vdCBlbGVtZW50
LCB0aGVuIHRoZXkgd2lsbCBiZSBpbmNvcnBvcmF0ZWQgaW4KLSAgICAvLyBTdHlsZVJlc29sdmVy
OjpzdHlsZUZvckRvY3VtZW50KCkuCi0gICAgaWYgKChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1BB
R0VEWCB8fCBzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1BBR0VEWSkgJiYgIShlICYmIChlLT5oYXNU
YWdOYW1lKGh0bWxUYWcpIHx8IGUtPmhhc1RhZ05hbWUoYm9keVRhZykpKSkKLSAgICAgICAgc3R5
bGUtPnNldENvbHVtblN0eWxlc0Zyb21QYWdpbmF0aW9uTW9kZShXZWJDb3JlOjpwYWdpbmF0aW9u
TW9kZUZvclJlbmRlclN0eWxlKHN0eWxlKSk7Ci0KLSAgICAvLyBUYWJsZSByb3dzLCBzZWN0aW9u
cyBhbmQgdGhlIHRhYmxlIGl0c2VsZiB3aWxsIHN1cHBvcnQgb3ZlcmZsb3c6aGlkZGVuIGFuZCB3
aWxsIGlnbm9yZSBzY3JvbGwvYXV0by4KLSAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB0YWJsZSBz
ZWN0aW9ucyB3aWxsIHN1cHBvcnQgYXV0byBhbmQgc2Nyb2xsLgotICAgIGlmIChzdHlsZS0+ZGlz
cGxheSgpID09IFRBQkxFIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX1RBQkxFCi0gICAg
ICAgIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XX0dST1VQIHx8IHN0eWxlLT5kaXNw
bGF5KCkgPT0gVEFCTEVfUk9XKSB7Ci0gICAgICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgIT0g
T1ZJU0lCTEUgJiYgc3R5bGUtPm92ZXJmbG93WCgpICE9IE9ISURERU4pCi0gICAgICAgICAgICBz
dHlsZS0+c2V0T3ZlcmZsb3dYKE9WSVNJQkxFKTsKLSAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxv
d1koKSAhPSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT0hJRERFTikKLSAgICAg
ICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1koT1ZJU0lCTEUpOwotICAgIH0KLQotICAgIC8vIE1l
bnVsaXN0cyBzaG91bGQgaGF2ZSB2aXNpYmxlIG92ZXJmbG93Ci0gICAgaWYgKHN0eWxlLT5hcHBl
YXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1go
T1ZJU0lCTEUpOwotICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9WSVNJQkxFKTsKLSAgICB9
Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfT1ZFUkZMT1dfU0NST0xMSU5HKQotICAgIC8vIFRv
dWNoIG92ZXJmbG93IHNjcm9sbGluZyBjcmVhdGVzIGEgc3RhY2tpbmcgY29udGV4dC4KLSAgICBp
ZiAoc3R5bGUtPmhhc0F1dG9aSW5kZXgoKSAmJiBzdHlsZS0+dXNlVG91Y2hPdmVyZmxvd1Njcm9s
bGluZygpICYmIChpc1Njcm9sbGFibGVPdmVyZmxvdyhzdHlsZS0+b3ZlcmZsb3dYKCkpIHx8IGlz
U2Nyb2xsYWJsZU92ZXJmbG93KHN0eWxlLT5vdmVyZmxvd1koKSkpKQotICAgICAgICBzdHlsZS0+
c2V0WkluZGV4KDApOwotI2VuZGlmCi0KLSAgICAvLyBDdWxsIG91dCBhbnkgdXNlbGVzcyBsYXll
cnMgYW5kIGFsc28gcmVwZWF0IHBhdHRlcm5zIGludG8gYWRkaXRpb25hbCBsYXllcnMuCi0gICAg
c3R5bGUtPmFkanVzdEJhY2tncm91bmRMYXllcnMoKTsKLSAgICBzdHlsZS0+YWRqdXN0TWFza0xh
eWVycygpOwotCi0gICAgLy8gRG8gdGhlIHNhbWUgZm9yIGFuaW1hdGlvbnMgYW5kIHRyYW5zaXRp
b25zLgotICAgIHN0eWxlLT5hZGp1c3RBbmltYXRpb25zKCk7Ci0gICAgc3R5bGUtPmFkanVzdFRy
YW5zaXRpb25zKCk7Ci0KLSAgICAvLyBJbXBvcnRhbnQ6IEludHJpbnNpYyBtYXJnaW5zIGdldCBh
ZGRlZCB0byBjb250cm9scyBiZWZvcmUgdGhlIHRoZW1lIGhhcyBhZGp1c3RlZCB0aGUgc3R5bGUs
IHNpbmNlIHRoZSB0aGVtZSB3aWxsCi0gICAgLy8gYWx0ZXIgZm9udHMgYW5kIGhlaWdodHMvd2lk
dGhzLgotICAgIGlmIChlICYmIGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkgJiYgc3R5bGUtPmZv
bnRTaXplKCkgPj0gMTEpIHsKLSAgICAgICAgLy8gRG9uJ3QgYXBwbHkgaW50cmluc2ljIG1hcmdp
bnMgdG8gaW1hZ2UgYnV0dG9ucy4gVGhlIGRlc2lnbmVyIGtub3dzIGhvdyBiaWcgdGhlIGltYWdl
cyBhcmUsCi0gICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gdHJlYXQgYWxsIGltYWdlIGJ1dHRvbnMg
YXMgdGhvdWdoIHRoZXkgd2VyZSBleHBsaWNpdGx5IHNpemVkLgotICAgICAgICBpZiAoIWlzSFRN
TElucHV0RWxlbWVudChlKSB8fCAhdG9IVE1MSW5wdXRFbGVtZW50KGUpLT5pc0ltYWdlQnV0dG9u
KCkpCi0gICAgICAgICAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKLSAgICB9Ci0KLSAg
ICAvLyBMZXQgdGhlIHRoZW1lIGFsc28gaGF2ZSBhIGNyYWNrIGF0IGFkanVzdGluZyB0aGUgc3R5
bGUuCi0gICAgaWYgKHN0eWxlLT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgIFJlbmRlclRoZW1l
OjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUodGhpcywgc3R5bGUsIGUsIG1fc3RhdGUuaGFz
VUFBcHBlYXJhbmNlKCksIG1fc3RhdGUuYm9yZGVyRGF0YSgpLCBtX3N0YXRlLmJhY2tncm91bmRE
YXRhKCksIG1fc3RhdGUuYmFja2dyb3VuZENvbG9yKCkpOwotCi0gICAgLy8gSWYgd2UgaGF2ZSBm
aXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHlsZS4KLSAgICBp
ZiAoc3R5bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCi0gICAgICAgIHN0eWxlLT5z
ZXRVbmlxdWUoKTsKLQotICAgIC8vIEZJWE1FOiB3aGVuIGRyb3BwaW5nIHRoZSAtd2Via2l0IHBy
ZWZpeCBvbiB0cmFuc2Zvcm0tc3R5bGUsIHdlIHNob3VsZCBhbHNvIGhhdmUgb3BhY2l0eSA8IDEg
Y2F1c2UgZmxhdHRlbmluZy4KLSAgICBpZiAoc3R5bGUtPnByZXNlcnZlczNEKCkgJiYgKHN0eWxl
LT5vdmVyZmxvd1goKSAhPSBPVklTSUJMRQotICAgICAgICB8fCBzdHlsZS0+b3ZlcmZsb3dZKCkg
IT0gT1ZJU0lCTEUKLSAgICAgICAgfHwgc3R5bGUtPmhhc0ZpbHRlcigpKSkKLSAgICAgICAgc3R5
bGUtPnNldFRyYW5zZm9ybVN0eWxlM0QoVHJhbnNmb3JtU3R5bGUzREZsYXQpOwotCi0gICAgLy8g
U2VhbWxlc3MgaWZyYW1lcyBiZWhhdmUgbGlrZSBibG9ja3MuIE1hcCB0aGVpciBkaXNwbGF5IHRv
IGlubGluZS1ibG9jayB3aGVuIG1hcmtlZCBpbmxpbmUuCi0gICAgaWYgKGUgJiYgZS0+aGFzVGFn
TmFtZShpZnJhbWVUYWcpICYmIHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FICYmIHRvSFRNTElG
cmFtZUVsZW1lbnQoZSktPnNob3VsZERpc3BsYXlTZWFtbGVzc2x5KCkpCi0gICAgICAgIHN0eWxl
LT5zZXREaXNwbGF5KElOTElORV9CTE9DSyk7Ci0KLSAgICBhZGp1c3RHcmlkSXRlbVBvc2l0aW9u
KHN0eWxlKTsKLQotI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKGUgJiYgZS0+aXNTVkdFbGVtZW50
KCkpIHsKLSAgICAgICAgLy8gU3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL21hc2tpbmcu
aHRtbCNPdmVyZmxvd1Byb3BlcnR5Ci0gICAgICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0g
T1NDUk9MTCkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1koT0hJRERFTik7Ci0gICAg
ICAgIGVsc2UgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPQVVUTykKLSAgICAgICAgICAgIHN0
eWxlLT5zZXRPdmVyZmxvd1koT1ZJU0lCTEUpOwotCi0gICAgICAgIGlmIChzdHlsZS0+b3ZlcmZs
b3dYKCkgPT0gT1NDUk9MTCkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goT0hJRERF
Tik7Ci0gICAgICAgIGVsc2UgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBPQVVUTykKLSAgICAg
ICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goT1ZJU0lCTEUpOwotCi0gICAgICAgIC8vIE9ubHkg
dGhlIHJvb3QgPHN2Zz4gZWxlbWVudCBpbiBhbiBTVkcgZG9jdW1lbnQgZnJhZ21lbnQgdHJlZSBo
b25vcnMgY3NzIHBvc2l0aW9uCi0gICAgICAgIGlmICghKGUtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6
OnN2Z1RhZykgJiYgZS0+cGFyZW50Tm9kZSgpICYmICFlLT5wYXJlbnROb2RlKCktPmlzU1ZHRWxl
bWVudCgpKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQb3NpdGlvbihSZW5kZXJTdHlsZTo6aW5p
dGlhbFBvc2l0aW9uKCkpOwotCi0gICAgICAgIC8vIFJlbmRlclNWR1Jvb3QgaGFuZGxlcyB6b29t
aW5nIGZvciB0aGUgd2hvbGUgU1ZHIHN1YnRyZWUsIHNvIGZvcmVpZ25PYmplY3QgY29udGVudCBz
aG91bGQKLSAgICAgICAgLy8gbm90IGJlIHNjYWxlZCBhZ2Fpbi4KLSAgICAgICAgaWYgKGUtPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OmZvcmVpZ25PYmplY3RUYWcpKQotICAgICAgICAgICAgc3R5bGUt
PnNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwotICAgIH0KLSNl
bmRpZgotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdEdyaWRJdGVtUG9zaXRpb24oUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIC8vIElmIG9wcG9zaW5nIGdyaWQtcGxhY2Vt
ZW50IHByb3BlcnRpZXMgYm90aCBzcGVjaWZ5IGEgZ3JpZCBzcGFuLCB0aGV5IGJvdGggY29tcHV0
ZSB0byDigJhhdXRv4oCZLgotICAgIGlmIChzdHlsZS0+Z3JpZEl0ZW1Db2x1bW5TdGFydCgpLmlz
U3BhbigpICYmIHN0eWxlLT5ncmlkSXRlbUNvbHVtbkVuZCgpLmlzU3BhbigpKSB7Ci0gICAgICAg
IHN0eWxlLT5zZXRHcmlkSXRlbUNvbHVtblN0YXJ0KEdyaWRQb3NpdGlvbigpKTsKLSAgICAgICAg
c3R5bGUtPnNldEdyaWRJdGVtQ29sdW1uRW5kKEdyaWRQb3NpdGlvbigpKTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3R5bGUtPmdyaWRJdGVtUm93U3RhcnQoKS5pc1NwYW4oKSAmJiBzdHlsZS0+Z3JpZEl0
ZW1Sb3dFbmQoKS5pc1NwYW4oKSkgewotICAgICAgICBzdHlsZS0+c2V0R3JpZEl0ZW1Sb3dTdGFy
dChHcmlkUG9zaXRpb24oKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRHcmlkSXRlbVJvd0VuZChHcmlk
UG9zaXRpb24oKSk7Ci0gICAgfQotfQotCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNoZWNrUmVnaW9u
U3R5bGUoRWxlbWVudCogcmVnaW9uRWxlbWVudCkKLXsKLSAgICAvLyBGSVhNRSAoQlVHIDcyNDcy
KTogV2UgZG9uJ3QgYWRkIEAtd2Via2l0LXJlZ2lvbiBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hl
ZXRzIGZvciB0aGUgbW9tZW50LAotICAgIC8vIHNvIGFsbCByZWdpb24gcnVsZXMgYXJlIGdsb2Jh
bCBieSBkZWZhdWx0LiBWZXJpZnkgd2hldGhlciB0aGF0IGNhbiBzdGFuZCBvciBuZWVkcyBjaGFu
Z2luZy4KLQotICAgIHVuc2lnbmVkIHJ1bGVzU2l6ZSA9IG1fcnVsZVNldHMuYXV0aG9yU3R5bGUo
KS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7Ci0gICAgICAgIEFTU0VSVChtX3J1bGVTZXRz
LmF1dGhvclN0eWxlKCktPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNl
dC5nZXQoKSk7Ci0gICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKG1fcnVsZVNldHMuYXV0
aG9yU3R5bGUoKS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5zZWxlY3Rvciwg
cmVnaW9uRWxlbWVudCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBp
ZiAobV9ydWxlU2V0cy51c2VyU3R5bGUoKSkgewotICAgICAgICBydWxlc1NpemUgPSBtX3J1bGVT
ZXRzLnVzZXJTdHlsZSgpLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQobV9ydWxlU2V0cy51c2VyU3R5bGUoKS0+bV9yZWdpb25TZWxlY3RvcnNBbmRS
dWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpKTsKLSAgICAgICAgICAgIGlmIChjaGVja1JlZ2lv
blNlbGVjdG9yKG1fcnVsZVNldHMudXNlclN0eWxlKCktPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVs
ZVNldHMuYXQoaSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1z
dGF0aWMgdm9pZCBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSkK
LXsKLSAgICBGb250T3JpZW50YXRpb24gZm9udE9yaWVudGF0aW9uOwotICAgIE5vbkNKS0dseXBo
T3JpZW50YXRpb24gZ2x5cGhPcmllbnRhdGlvbjsKLSAgICBnZXRGb250QW5kR2x5cGhPcmllbnRh
dGlvbihzdHlsZSwgZm9udE9yaWVudGF0aW9uLCBnbHlwaE9yaWVudGF0aW9uKTsKLQotICAgIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpOwotICAgIGlmIChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBmb250T3Jp
ZW50YXRpb24gJiYgZm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBn
bHlwaE9yaWVudGF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGb250RGVzY3JpcHRpb24g
bmV3Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgbmV3Rm9udERlc2NyaXB0
aW9uLnNldE5vbkNKS0dseXBoT3JpZW50YXRpb24oZ2x5cGhPcmllbnRhdGlvbik7Ci0gICAgbmV3
Rm9udERlc2NyaXB0aW9uLnNldE9yaWVudGF0aW9uKGZvbnRPcmllbnRhdGlvbik7Ci0gICAgc3R5
bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwotfQotCi12b2lkIFN0
eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQotewotICAgIGlmICghbV9zdGF0ZS5mb250RGlydHko
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5z
dHlsZSgpOwotICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdHlsZSwgbV9zdGF0ZS5w
YXJlbnRTdHlsZSgpKTsKLSAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFy
ZW50U3R5bGUoKSk7Ci0gICAgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShzdHlsZSk7Ci0gICAg
c3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwotICAgIG1fc3RhdGUuc2V0Rm9u
dERpcnR5KGZhbHNlKTsKLX0KLQotVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+IFN0eWxl
UmVzb2x2ZXI6OnN0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIHVuc2lnbmVkIHJ1bGVz
VG9JbmNsdWRlKQotewotICAgIHJldHVybiBwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChlLCBO
T1BTRVVETywgcnVsZXNUb0luY2x1ZGUpOwotfQotCi1WZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJh
c2U+ID4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCog
ZSwgUHNldWRvSWQgcHNldWRvSWQsIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRlKQotewotICAgIGlm
ICghZSB8fCAhZS0+ZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpCi0gICAgICAg
IHJldHVybiBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4oKTsKLQotICAgIGluaXRFbGVt
ZW50KGUpOwotICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlLCAw
KTsKLQotICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yIGNvbGxlY3Rvcih0aGlzLCBtX3N0YXRlKTsK
LSAgICBjb2xsZWN0b3Iuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7
Ci0gICAgY29sbGVjdG9yLnNldFBzZXVkb1N0eWxlUmVxdWVzdChQc2V1ZG9TdHlsZVJlcXVlc3Qo
cHNldWRvSWQpKTsKLSAgICBjb2xsZWN0b3Iuc2V0TWVkaXVtKG1fbWVkaXVtLmdldCgpKTsKLQot
ICAgIGlmIChydWxlc1RvSW5jbHVkZSAmIFVBQW5kVXNlckNTU1J1bGVzKSB7Ci0gICAgICAgIC8v
IEZpcnN0IHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHVzZXIgYWdlbnQgc2hlZXQuCi0gICAgICAg
IGNvbGxlY3Rvci5tYXRjaFVBUnVsZXMoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE5vdyB3ZSBj
aGVjayB1c2VyIHNoZWV0IHJ1bGVzLgotICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJT
dHlsZXMpCi0gICAgICAgICAgICBjb2xsZWN0b3IubWF0Y2hVc2VyUnVsZXMocnVsZXNUb0luY2x1
ZGUgJiBFbXB0eUNTU1J1bGVzKTsKLSAgICB9Ci0KLSAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAg
IGNvbGxlY3Rvci5zZXRTYW1lT3JpZ2luT25seSghKHJ1bGVzVG9JbmNsdWRlICYgQ3Jvc3NPcmln
aW5DU1NSdWxlcykpOwotCi0gICAgICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hl
ZXRzLgotICAgICAgICBjb2xsZWN0b3IubWF0Y2hBdXRob3JSdWxlcyhydWxlc1RvSW5jbHVkZSAm
IEVtcHR5Q1NTUnVsZXMpOwotICAgIH0KLQotICAgIHJldHVybiBjb2xsZWN0b3IubWF0Y2hlZFJ1
bGVMaXN0KCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHRoaXMg
aXMgbW9zdGx5IGJvcmluZyBzdHVmZiBvbiBob3cgdG8gYXBwbHkgYSBjZXJ0YWluIHJ1bGUgdG8g
dGhlIHJlbmRlcnN0eWxlLi4uCi0KLUxlbmd0aCBTdHlsZVJlc29sdmVyOjpjb252ZXJ0VG9JbnRM
ZW5ndGgoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0
aXBsaWVyKQotewotICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZSA/IHByaW1pdGl2ZVZhbHVlLT5j
b252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9u
IHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBGcmFjdGlvbkNvbnZlcnNpb24gfCBWaWV3cG9ydFBl
cmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZSwgcm9vdFN0eWxlLCBtdWx0aXBsaWVyKSA6IExlbmd0
aChVbmRlZmluZWQpOwotfQotCi1MZW5ndGggU3R5bGVSZXNvbHZlcjo6Y29udmVydFRvRmxvYXRM
ZW5ndGgoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0
aXBsaWVyKQotewotICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZSA/IHByaW1pdGl2ZVZhbHVlLT5j
b252ZXJ0VG9MZW5ndGg8Rml4ZWRGbG9hdENvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8
IENhbGN1bGF0ZWRDb252ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9uIHwgVmlld3BvcnRQZXJj
ZW50YWdlQ29udmVyc2lvbj4oc3R5bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGllcikgOiBMZW5ndGgo
VW5kZWZpbmVkKTsKLX0KLQotdGVtcGxhdGUgPFN0eWxlUmVzb2x2ZXI6OlN0eWxlQXBwbGljYXRp
b25QYXNzIHBhc3M+Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyhjb25zdCBT
dHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaXNJbXBv
cnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlIHByb3BlcnR5
V2hpdGVsaXN0VHlwZSkKLXsKLSAgICBBU1NFUlQoKHByb3BlcnR5V2hpdGVsaXN0VHlwZSAhPSBQ
cm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikgfHwgbV9zdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCkpOwot
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBydWxlLCB0aGlzKTsKLQot
ICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0aWVzLT5wcm9wZXJ0eUNvdW50KCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkgewotICAg
ICAgICBTdHlsZVByb3BlcnR5U2V0OjpQcm9wZXJ0eVJlZmVyZW5jZSBjdXJyZW50ID0gcHJvcGVy
dGllcy0+cHJvcGVydHlBdChpKTsKLSAgICAgICAgaWYgKGlzSW1wb3J0YW50ICE9IGN1cnJlbnQu
aXNJbXBvcnRhbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaW5oZXJp
dGVkT25seSAmJiAhY3VycmVudC5pc0luaGVyaXRlZCgpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0
aGUgcHJvcGVydHkgdmFsdWUgaXMgZXhwbGljaXRseSBpbmhlcml0ZWQsIHdlIG5lZWQgdG8gYXBw
bHkgZnVydGhlciBub24taW5oZXJpdGVkIHByb3BlcnRpZXMKLSAgICAgICAgICAgIC8vIGFzIHRo
ZXkgbWlnaHQgb3ZlcnJpZGUgdGhlIHZhbHVlIGluaGVyaXRlZCBoZXJlLiBGb3IgdGhpcyByZWFz
b24gd2UgZG9uJ3QgYWxsb3cgZGVjbGFyYXRpb25zIHdpdGgKLSAgICAgICAgICAgIC8vIGV4cGxp
Y2l0bHkgaW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gYmUgY2FjaGVkLgotICAgICAgICAgICAgQVNT
RVJUKCFjdXJyZW50LnZhbHVlKCktPmlzSW5oZXJpdGVkVmFsdWUoKSk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5ID0gY3Vy
cmVudC5pZCgpOwotCi0gICAgICAgIGlmIChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPT0gUHJvcGVy
dHlXaGl0ZWxpc3RSZWdpb24gJiYgIVN0eWxlUmVzb2x2ZXI6OmlzVmFsaWRSZWdpb25TdHlsZVBy
b3BlcnR5KHByb3BlcnR5KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotI2lmIEVOQUJMRShWSURF
T19UUkFDSykKLSAgICAgICAgaWYgKHByb3BlcnR5V2hpdGVsaXN0VHlwZSA9PSBQcm9wZXJ0eVdo
aXRlbGlzdEN1ZSAmJiAhU3R5bGVSZXNvbHZlcjo6aXNWYWxpZEN1ZVN0eWxlUHJvcGVydHkocHJv
cGVydHkpKQotICAgICAgICAgICAgY29udGludWU7Ci0jZW5kaWYKLSAgICAgICAgc3dpdGNoIChw
YXNzKSB7Ci0jaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCi0gICAgICAgIGNhc2UgVmFyaWFibGVE
ZWZpbml0aW9uczoKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKENTU1Byb3BlcnR5VmFyaWFi
bGUgPCBmaXJzdENTU1Byb3BlcnR5LCBDU1NfdmFyaWFibGVfaXNfYmVmb3JlX2ZpcnN0X3Byb3Bl
cnR5KTsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVZhcmlhYmxlKQot
ICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVl
KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBIaWdoUHJpb3Jp
dHlQcm9wZXJ0aWVzOgotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoZmlyc3RDU1NQcm9wZXJ0
eSA9PSBDU1NQcm9wZXJ0eUNvbG9yLCBDU1NfY29sb3JfaXNfZmlyc3RfcHJvcGVydHkpOwotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoQ1NTUHJvcGVydHlab29tID09IENTU1Byb3BlcnR5Q29s
b3IgKyAxNywgQ1NTX3pvb21faXNfZW5kX29mX2ZpcnN0X3Byb3BfcmFuZ2UpOwotICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0ID09IENTU1Byb3BlcnR5Wm9v
bSArIDEsIENTU19saW5lX2hlaWdodF9pc19hZnRlcl96b29tKTsKLSNpZiBFTkFCTEUoQ1NTX1ZB
UklBQkxFUykKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVZhcmlhYmxl
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmCi0gICAgICAgICAgICAvLyBnaXZl
IHNwZWNpYWwgcHJpb3JpdHkgdG8gZm9udC14eHgsIGNvbG9yIHByb3BlcnRpZXMsIGV0YwotICAg
ICAgICAgICAgaWYgKHByb3BlcnR5IDwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQotICAgICAgICAg
ICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwotICAg
ICAgICAgICAgLy8gd2UgYXBwbHkgbGluZS1oZWlnaHQgbGF0ZXIKLSAgICAgICAgICAgIGVsc2Ug
aWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAgICAgICAgICAgICBt
X3N0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShjdXJyZW50LnZhbHVlKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgTG93UHJpb3JpdHlQcm9wZXJ0aWVzOgotICAgICAgICAgICAg
aWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQotICAgICAgICAgICAgICAgIGFw
cGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHJvY2Vzc1J1bGUoY29va2ll
KTsKLX0KLQotdGVtcGxhdGUgPFN0eWxlUmVzb2x2ZXI6OlN0eWxlQXBwbGljYXRpb25QYXNzIHBh
c3M+Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0
Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29sIGlzSW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwg
aW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpCi17Ci0gICAgaWYgKHN0YXJ0SW5kZXgg
PT0gLTEpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0g
ICAgaWYgKHN0YXRlLnN0eWxlKCktPmluc2lkZUxpbmsoKSAhPSBOb3RJbnNpZGVMaW5rKSB7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKLSAg
ICAgICAgICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1h
dGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAgdW5zaWduZWQgbGlu
a01hdGNoVHlwZSA9IG1hdGNoZWRQcm9wZXJ0aWVzLmxpbmtNYXRjaFR5cGU7Ci0gICAgICAgICAg
ICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZXIgdG8gcGFzcyB0aGVzZSBhcyBhcmd1bWVudHMg
YnV0IHRoYXQgcmVxdWlyZXMgY2hhbmdlcyBpbiBtYW55IHBsYWNlcy4KLSAgICAgICAgICAgIHN0
YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShsaW5rTWF0Y2hUeXBlICYgU2VsZWN0
b3JDaGVja2VyOjpNYXRjaExpbmspOwotICAgICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZShsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRj
aFZpc2l0ZWQpOwotCi0gICAgICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFzcz4obWF0Y2hlZFBy
b3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBp
c0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RU
eXBlPihtYXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOwotICAgICAgICBz
dGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRl
eDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVy
dGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzW2ldOwotICAgICAgICBhcHBseVBy
b3BlcnRpZXM8cGFzcz4obWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hS
ZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGlj
X2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RU
eXBlKSk7Ci0gICAgfQotfQotCi11bnNpZ25lZCBTdHlsZVJlc29sdmVyOjpjb21wdXRlTWF0Y2hl
ZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzKiBwcm9wZXJ0aWVzLCB1bnNp
Z25lZCBzaXplKQotewotICAgIAotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnko
cHJvcGVydGllcywgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIHNpemUpOwotfQotCi1ib29s
IG9wZXJhdG9yPT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGEsIGNvbnN0IFN0
eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBiKQotewotICAgIHJldHVybiBhLmZpcnN0VUFSdWxl
ID09IGIuZmlyc3RVQVJ1bGUKLSAgICAgICAgJiYgYS5sYXN0VUFSdWxlID09IGIubGFzdFVBUnVs
ZQotICAgICAgICAmJiBhLmZpcnN0QXV0aG9yUnVsZSA9PSBiLmZpcnN0QXV0aG9yUnVsZQotICAg
ICAgICAmJiBhLmxhc3RBdXRob3JSdWxlID09IGIubGFzdEF1dGhvclJ1bGUKLSAgICAgICAgJiYg
YS5maXJzdFVzZXJSdWxlID09IGIuZmlyc3RVc2VyUnVsZQotICAgICAgICAmJiBhLmxhc3RVc2Vy
UnVsZSA9PSBiLmxhc3RVc2VyUnVsZTsKLX0KLQotYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0eWxl
UmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBhLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJhbmdl
cyYgYikKLXsKLSAgICByZXR1cm4gIShhID09IGIpOwotfQotCi1ib29sIG9wZXJhdG9yPT0oY29u
c3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGEsIGNvbnN0IFN0eWxlUmVzb2x2
ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBiKQotewotICAgIHJldHVybiBhLnByb3BlcnRpZXMgPT0g
Yi5wcm9wZXJ0aWVzICYmIGEubGlua01hdGNoVHlwZSA9PSBiLmxpbmtNYXRjaFR5cGU7Ci19Ci0K
LWJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllcyYg
YSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGIpCi17Ci0gICAgcmV0
dXJuICEoYSA9PSBiKTsKLX0KLQotY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZSh1bnNpZ25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQpCi17Ci0gICAg
QVNTRVJUKGhhc2gpOwotCi0gICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgaXQg
PSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZmluZChoYXNoKTsKLSAgICBpZiAoaXQgPT0gbV9t
YXRjaGVkUHJvcGVydGllc0NhY2hlLmVuZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBNYXRj
aGVkUHJvcGVydGllc0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnZhbHVlOwotCi0gICAgc2l6
ZV90IHNpemUgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCk7Ci0gICAgaWYg
KHNpemUgIT0gY2FjaGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
aWYgKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzW2ldICE9IGNhY2hlSXRlbS5tYXRjaGVk
UHJvcGVydGllc1tpXSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoY2Fj
aGVJdGVtLnJhbmdlcyAhPSBtYXRjaFJlc3VsdC5yYW5nZXMpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiAmY2FjaGVJdGVtOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFkZFRvTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSwgdW5zaWduZWQgaGFzaCwgY29uc3QgTWF0Y2hSZXN1bHQmIG1h
dGNoUmVzdWx0KQotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXRjaGVkRGVjbGFyYXRp
b25DYWNoZUFkZGl0aW9uc0JldHdlZW5Td2VlcHMgPSAxMDA7Ci0gICAgaWYgKCsrbV9tYXRjaGVk
UHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXAgPj0gbWF0Y2hlZERlY2xhcmF0
aW9uQ2FjaGVBZGRpdGlvbnNCZXR3ZWVuU3dlZXBzCi0gICAgICAgICYmICFtX21hdGNoZWRQcm9w
ZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1hdGNoZWREZWNsYXJhdGlvbkNhY2hlU3dlZXBUaW1lSW5TZWNvbmRzID0gNjA7
Ci0gICAgICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZVN3ZWVwVGltZXIuc3RhcnRPbmVTaG90
KG1hdGNoZWREZWNsYXJhdGlvbkNhY2hlU3dlZXBUaW1lSW5TZWNvbmRzKTsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoaGFzaCk7Ci0gICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0gY2FjaGVJdGVt
OwotICAgIGNhY2hlSXRlbS5tYXRjaGVkUHJvcGVydGllcy5hcHBlbmRWZWN0b3IobWF0Y2hSZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMpOwotICAgIGNhY2hlSXRlbS5yYW5nZXMgPSBtYXRjaFJlc3Vs
dC5yYW5nZXM7Ci0gICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGNhY2hlIHRoZSBvcmlnaW5hbCBS
ZW5kZXJTdHlsZSBpbnN0YW5jZS4gSXQgbWF5IGJlIGZ1cnRoZXIgbW9kaWZpZWQuCi0gICAgLy8g
VGhlIFJlbmRlclN0eWxlIGluIHRoZSBjYWNoZSBpcyByZWFsbHkganVzdCBhIGhvbGRlciBmb3Ig
dGhlIHN1YnN0cnVjdHVyZXMgYW5kIG5ldmVyIHVzZWQgYXMtaXMuCi0gICAgY2FjaGVJdGVtLnJl
bmRlclN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0eWxlKTsKLSAgICBjYWNoZUl0ZW0ucGFy
ZW50UmVuZGVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUocGFyZW50U3R5bGUpOwotICAgIG1f
bWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5hZGQoaGFzaCwgY2FjaGVJdGVtKTsKLX0KLQotdm9pZCBT
dHlsZVJlc29sdmVyOjppbnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpCi17Ci0gICAg
bV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmNsZWFyKCk7Ci19Ci0KLXN0YXRpYyBib29sIGlzQ2Fj
aGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQot
ewotICAgIC8vIEZJWE1FOiBDU1NQcm9wZXJ0eVdlYmtpdFdyaXRpbmdNb2RlIG1vZGlmaWVzIHN0
YXRlIHdoZW4gYXBwbHlpbmcgdG8gZG9jdW1lbnQgZWxlbWVudC4gV2UgY2FuJ3Qgc2tpcCB0aGUg
YXBwbHlpbmcgYnkgY2FjaGluZy4KLSAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVu
dCgpLT5kb2N1bWVudEVsZW1lbnQoKSAmJiBlbGVtZW50LT5kb2N1bWVudCgpLT53cml0aW5nTW9k
ZVNldE9uRG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
c3R5bGUtPnVuaXF1ZSgpIHx8IChzdHlsZS0+c3R5bGVUeXBlKCkgIT0gTk9QU0VVRE8gJiYgcGFy
ZW50U3R5bGUtPnVuaXF1ZSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHls
ZS0+aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0eWxl
LT56b29tKCkgIT0gUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoc3R5bGUtPndyaXRpbmdNb2RlKCkgIT0gUmVuZGVyU3R5bGU6OmluaXRp
YWxXcml0aW5nTW9kZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhlIGNhY2hl
IGFzc3VtZXMgc3RhdGljIGtub3dsZWRnZSBhYm91dCB3aGljaCBwcm9wZXJ0aWVzIGFyZSBpbmhl
cml0ZWQuCi0gICAgaWYgKHBhcmVudFN0eWxlLT5oYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVy
dGllcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3Vs
dCYgbWF0Y2hSZXN1bHQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgQVNTRVJUKGVs
ZW1lbnQpOwotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgdW5zaWduZWQgY2FjaGVI
YXNoID0gbWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUgPyBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNI
YXNoKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmRhdGEoKSwgbWF0Y2hSZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKSA6IDA7Ci0gICAgYm9vbCBhcHBseUluaGVyaXRlZE9ubHkg
PSBmYWxzZTsKLSAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSogY2FjaGVJdGVt
ID0gMDsKLSAgICBpZiAoY2FjaGVIYXNoICYmIChjYWNoZUl0ZW0gPSBmaW5kRnJvbU1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUoY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCkpKSB7Ci0gICAgICAgIC8vIFdl
IGNhbiBidWlsZCB1cCB0aGUgc3R5bGUgYnkgY29weWluZyBub24taW5oZXJpdGVkIHByb3BlcnRp
ZXMgZnJvbSBhbiBlYXJsaWVyIHN0eWxlIG9iamVjdCBidWlsdCB1c2luZyB0aGUgc2FtZSBleGFj
dAotICAgICAgICAvLyBzdHlsZSBkZWNsYXJhdGlvbnMuIFdlIHRoZW4gb25seSBuZWVkIHRvIGFw
cGx5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcywgaWYgYW55LCBhcyB0aGVpciB2YWx1ZXMgY2Fu
IGRlcGVuZCBvbiB0aGUgCi0gICAgICAgIC8vIGVsZW1lbnQgY29udGV4dC4gVGhpcyBpcyBmYXN0
IGFuZCBzYXZlcyBtZW1vcnkgYnkgcmV1c2luZyB0aGUgc3R5bGUgZGF0YSBzdHJ1Y3R1cmVzLgot
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jb3B5Tm9uSW5oZXJpdGVkRnJvbShjYWNoZUl0ZW0tPnJl
bmRlclN0eWxlLmdldCgpKTsKLSAgICAgICAgaWYgKHN0YXRlLnBhcmVudFN0eWxlKCktPmluaGVy
aXRlZERhdGFTaGFyZWQoY2FjaGVJdGVtLT5wYXJlbnRSZW5kZXJTdHlsZS5nZXQoKSkgJiYgIWlz
QXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSkgewotICAgICAgICAgICAgRUluc2lkZUxpbmsgbGlu
a1N0YXR1cyA9IHN0YXRlLnN0eWxlKCktPmluc2lkZUxpbmsoKTsKLSAgICAgICAgICAgIC8vIElm
IHRoZSBjYWNoZSBpdGVtIHBhcmVudCBzdHlsZSBoYXMgaWRlbnRpY2FsIGluaGVyaXRlZCBwcm9w
ZXJ0aWVzIHRvIHRoZSBjdXJyZW50IHBhcmVudCBzdHlsZSB0aGVuIHRoZQotICAgICAgICAgICAg
Ly8gcmVzdWx0aW5nIHN0eWxlIHdpbGwgYmUgaWRlbnRpY2FsIHRvby4gV2UgY29weSB0aGUgaW5o
ZXJpdGVkIHByb3BlcnRpZXMgb3ZlciBmcm9tIHRoZSBjYWNoZSBhbmQgYXJlIGRvbmUuCi0gICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShjYWNoZUl0ZW0tPnJlbmRlclN0eWxl
LmdldCgpKTsKLQotICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSB0aGUgbGluayBzdGF0dXMg
aXMgdHJlYXRlZCBsaWtlIGFuIGluaGVyaXRlZCBwcm9wZXJ0eS4gV2UgbmVlZCB0byBleHBsaWNp
dGx5IHJlc3RvcmUgaXQuCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJbnNpZGVMaW5r
KGxpbmtTdGF0dXMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGFw
cGx5SW5oZXJpdGVkT25seSA9IHRydWU7IAotICAgIH0KLQotI2lmIEVOQUJMRShDU1NfVkFSSUFC
TEVTKQotICAgIC8vIEZpcnN0IGFwcGx5IGFsbCB2YXJpYWJsZSBkZWZpbml0aW9ucywgYXMgdGhl
eSBtYXkgYmUgdXNlZCBkdXJpbmcgYXBwbGljYXRpb24gb2YgbGF0ZXIgcHJvcGVydGllcy4KLSAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0
LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVm
aW5pdGlvbnM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRo
b3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVk
T25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPiht
YXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwgdHJ1
ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFz
dFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSNlbmRpZgotCi0gICAgLy8gTm93IHdlIGhh
dmUgYWxsIG9mIHRoZSBtYXRjaGVkIHJ1bGVzIGluIHRoZSBhcHByb3ByaWF0ZSBvcmRlci4gV2Fs
ayB0aGUgcnVsZXMgYW5kIGFwcGx5Ci0gICAgLy8gaGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVzIGZp
cnN0LCBpLmUuLCB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgb3RoZXIgcHJvcGVydGllcyBkZXBlbmQg
b24uCi0gICAgLy8gVGhlIG9yZGVyIGlzICgxKSBoaWdoLXByaW9yaXR5IG5vdCBpbXBvcnRhbnQs
ICgyKSBoaWdoLXByaW9yaXR5IGltcG9ydGFudCwgKDMpIG5vcm1hbCBub3QgaW1wb3J0YW50Ci0g
ICAgLy8gYW5kICg0KSBub3JtYWwgaW1wb3J0YW50LgotICAgIHN0YXRlLnNldExpbmVIZWlnaHRW
YWx1ZSgwKTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRp
ZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdo
UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
LmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5o
ZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9w
ZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxl
LCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLQot
ICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpICE9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICBzdGF0ZS5z
ZXRGb250RGlydHkodHJ1ZSk7Ci0gICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwot
ICAgIH0KLQotICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBk
YXRlIGl0IG5vdy4KLSAgICB1cGRhdGVGb250KCk7Ci0KLSAgICAvLyBMaW5lLWhlaWdodCBpcyBz
ZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCi0gICAgaWYg
KHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOwotCi0gICAgLy8gTWFueSBw
cm9wZXJ0aWVzIGRlcGVuZCBvbiB0aGUgZm9udC4gSWYgaXQgY2hhbmdlcyB3ZSBqdXN0IGFwcGx5
IGFsbCBwcm9wZXJ0aWVzLgotICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJT
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9u
KCkpCi0gICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwotCi0gICAgLy8gTm93IGRv
IHRoZSBub3JtYWwgcHJpb3JpdHkgVUEgcHJvcGVydGllcy4KLSAgICBhcHBseU1hdGNoZWRQcm9w
ZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJl
c3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBh
cHBseUluaGVyaXRlZE9ubHkpOwotICAgIAotICAgIC8vIENhY2hlIG91ciBib3JkZXIgYW5kIGJh
Y2tncm91bmQgc28gdGhhdCB3ZSBjYW4gZXhhbWluZSB0aGVtIGxhdGVyLgotICAgIHN0YXRlLmNh
Y2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwotICAgIAotICAgIC8vIE5vdyBkbyB0aGUgYXV0aG9y
IGFuZCB1c2VyIG5vcm1hbCBwcmlvcml0eSBwcm9wZXJ0aWVzIGFuZCBhbGwgdGhlICFpbXBvcnRh
bnQgcHJvcGVydGllcy4KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJv
cGVydGllcz4obWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVs
ZSArIDEsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5o
ZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3Bl
cnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JS
dWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25s
eSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KG1h
dGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRy
dWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxh
c3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAKLSAgICAvLyBTdGFydCBsb2FkaW5n
IHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdSZXNv
dXJjZXMoKTsKLSAgICAKLSAgICBBU1NFUlQoIXN0YXRlLmZvbnREaXJ0eSgpKTsKLSAgICAKLSAg
ICBpZiAoY2FjaGVJdGVtIHx8ICFjYWNoZUhhc2gpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
IWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKHN0YXRlLmVsZW1lbnQoKSwgc3Rh
dGUuc3R5bGUoKSwgc3RhdGUucGFyZW50U3R5bGUoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICBh
ZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucGFyZW50U3R5
bGUoKSwgY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlLCBS
ZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0gICAgaW5pdEVsZW1lbnQoMCk7Ci0gICAgbV9zdGF0ZS5p
bml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIDAsIHN0eWxlKTsKLSAgICBtX3N0YXRlLnNl
dFN0eWxlKHN0eWxlKTsKLSAgICBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoaWQsIHZhbHVl
KTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUo
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSkKLSAg
ICAgICAgYXBwbHlQcm9wZXJ0eShpZCwgdmFsdWUpOwotfQotCi1pbmxpbmUgYm9vbCBpc1ZhbGlk
VmlzaXRlZExpbmtQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQotewotICAgIHN3aXRjaCAoaWQp
IHsKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJMZWZ0Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29s
b3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJCb3R0b21Db2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Q29sdW1uUnVsZUNvbG9yOgotI2lmIEVOQUJMRShDU1MzX1RFWFQpCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uQ29sb3I6Ci0jZW5kaWYgLy8gQ1NTM19URVhUCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc0NvbG9yOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUZXh0RmlsbENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0
U3Ryb2tlQ29sb3I6Ci0jaWYgRU5BQkxFKFNWRykKLSAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlOgotI2VuZGlmCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzMy1yZWdpb25zLyN0aGUtYXQt
cmVnaW9uLXN0eWxlLXJ1bGUKLS8vIEZJWE1FOiBhZGQgaW5jcmVtZW50YWwgc3VwcG9ydCBmb3Ig
b3RoZXIgcmVnaW9uIHN0eWxpbmcgcHJvcGVydGllcy4KLWlubGluZSBib29sIFN0eWxlUmVzb2x2
ZXI6OmlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCi17Ci0gICAg
c3dpdGNoIChpZCkgewotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCi1pbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjppc1ZhbGlkQ3Vl
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQotewotICAgIHN3aXRjaCAoaWQpIHsKLSAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dy
b3VuZEF0dGFjaG1lbnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRJbWFnZToKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb25YOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9z
aXRpb25ZOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0OgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dy
b3VuZFJlcGVhdFk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udEZhbWlseToKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFNpemU6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZh
cmlhbnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUxpbmVIZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU9wYWNpdHk6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eU91dGxpbmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZU9mZnNldDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0
bGluZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGg6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVZpc2liaWxpdHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdoaXRlU3BhY2U6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlU
ZXh0U2hhZG93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJTdHlsZToKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKLX0KLSNlbmRpZgotLy8gU1ZHIGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVu
dCB3YXkgY29tcGFyZWQgdG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3Rl
YWQKLS8vIG9mIGVhY2ggaW5kaXZpZHVhbCBsZW5ndGggdmFsdWUgaW4gdGhlIHJlbmRlciBzdHls
ZSAvIHRyZWUuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoKigpCi0vLyBtdWx0aXBs
aWVzIGVhY2ggcmVzb2x2ZWQgbGVuZ3RoIHdpdGggdGhlIHpvb20gbXVsdGlwbGllciAtIHNvIGZv
ciBTVkcgd2UgbmVlZCB0byBkaXNhYmxlIHRoYXQuCi0vLyBUaG91Z2ggYWxsIENTUyB2YWx1ZXMg
dGhhdCBjYW4gYmUgYXBwbGllZCB0byBvdXRlcm1vc3QgPHN2Zz4gZWxlbWVudHMgKHdpZHRoL2hl
aWdodC9ib3JkZXIvcGFkZGluZy4uLikKLS8vIG5lZWQgdG8gcmVzcGVjdCB0aGUgc2NhbGluZy4g
UmVuZGVyQm94ICh0aGUgcGFyZW50IGNsYXNzIG9mIFJlbmRlclNWR1Jvb3QpIGdyYWJzIHZhbHVl
cyBsaWtlCi0vLyB3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcvLi4uIGZyb20gdGhlIFJlbmRl
clN0eWxlIC0+IGZvciBTVkcgdGhlc2UgdmFsdWVzIHdvdWxkIG5ldmVyIHNjYWxlLAotLy8gaWYg
d2UnZCBwYXNzIGEgMS4wIHpvb20gZmFjdG9yIGV2ZXJ5aHdlcmUuIFNvIHdlIG9ubHkgcGFzcyBh
IHpvb20gZmFjdG9yIG9mIDEuMCBmb3Igc3BlY2lmaWMKLS8vIHByb3BlcnRpZXMgdGhhdCBhcmUg
Tk9UIGFsbG93ZWQgdG8gc2NhbGUgd2l0aGluIGEgem9vbWVkIFNWRyBkb2N1bWVudCAobGV0dGVy
L3dvcmQtc3BhY2luZy9mb250LXNpemUpLgotYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29t
UnVsZXMoKQotewotICAgIHJldHVybiBtX3N0YXRlLmVsZW1lbnQoKSAmJiBtX3N0YXRlLmVsZW1l
bnQoKS0+aXNTVkdFbGVtZW50KCk7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0Jy
ZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBTdHlsZVJlc29s
dmVyOjpTdGF0ZSYgc3RhdGUsIExlbmd0aCYgd29ya2luZ0xlbmd0aCkKLXsKLSAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQpIHsK
LSAgICAgICAgd29ya2luZ0xlbmd0aCA9IExlbmd0aChNaW5Db250ZW50KTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkg
PT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50KSB7Ci0gICAgICAgIHdvcmtpbmdMZW5ndGggPSBM
ZW5ndGgoTWF4Q29udGVudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHdv
cmtpbmdMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdl
ckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZl
cnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwotICAgIGlmICh3b3JraW5n
TGVuZ3RoLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgd29ya2luZ0xlbmd0aC5zZXRRdWly
ayhwcmltaXRpdmVWYWx1ZS0+aXNRdWlya1ZhbHVlKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja1NpemUoQ1NTVmFsdWUqIHZhbHVlLCBHcmlk
VHJhY2tTaXplJiB0cmFja1NpemUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkK
LXsKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgIFBhaXIqIG1pbk1heFRyYWNrQnJl
YWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsKLSAgICBpZiAoIW1pbk1heFRy
YWNrQnJlYWR0aCkgewotICAgICAgICBMZW5ndGggd29ya2luZ0xlbmd0aDsKLSAgICAgICAgaWYg
KCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKHByaW1pdGl2ZVZhbHVlLCBzdGF0ZSwgd29ya2luZ0xl
bmd0aCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdHJhY2tTaXplLnNl
dExlbmd0aCh3b3JraW5nTGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgTGVuZ3RoIG1pblRyYWNrQnJlYWR0aDsKLSAgICBMZW5ndGggbWF4VHJhY2tCcmVhZHRoOwot
ICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChtaW5NYXhUcmFja0JyZWFkdGgtPmZpcnN0
KCksIHN0YXRlLCBtaW5UcmFja0JyZWFkdGgpIHx8ICFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKG1p
bk1heFRyYWNrQnJlYWR0aC0+c2Vjb25kKCksIHN0YXRlLCBtYXhUcmFja0JyZWFkdGgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB0cmFja1NpemUuc2V0TWluTWF4KG1pblRyYWNrQnJl
YWR0aCwgbWF4VHJhY2tCcmVhZHRoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJv
b2wgY3JlYXRlR3JpZFRyYWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxHcmlkVHJhY2tT
aXplPiYgdHJhY2tTaXplcywgTmFtZWRHcmlkTGluZXNNYXAmIG5hbWVkR3JpZExpbmVzLCBjb25z
dCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCi17Ci0gICAgLy8gSGFuZGxlICdub25lJy4K
LSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb25lOwotICAgIH0KLQotICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNpemVfdCBjdXJyZW50TmFtZWRHcmlkTGluZSA9
IDA7Ci0gICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgp
OyBpLmFkdmFuY2UoKSkgewotICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgp
OwotICAgICAgICBpZiAoY3VyclZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4oY3VyclZhbHVlKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNTdHJpbmcoKSkgewotICAgICAgICAgICAgICAgIE5hbWVkR3JpZExpbmVzTWFwOjpBZGRS
ZXN1bHQgcmVzdWx0ID0gbmFtZWRHcmlkTGluZXMuYWRkKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJp
bmdWYWx1ZSgpLCBWZWN0b3I8c2l6ZV90PigpKTsKLSAgICAgICAgICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmFwcGVuZChjdXJyZW50TmFtZWRHcmlkTGluZSk7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICArK2N1cnJl
bnROYW1lZEdyaWRMaW5lOwotICAgICAgICBHcmlkVHJhY2tTaXplIHRyYWNrU2l6ZTsKLSAgICAg
ICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tTaXplKGN1cnJWYWx1ZSwgdHJhY2tTaXplLCBzdGF0ZSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdHJhY2tTaXplcy5hcHBlbmQo
dHJhY2tTaXplKTsKLSAgICB9Ci0KLSAgICBpZiAodHJhY2tTaXplcy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0KLXN0YXRpYyBib29s
IGNyZWF0ZUdyaWRQb3NpdGlvbihDU1NWYWx1ZSogdmFsdWUsIEdyaWRQb3NpdGlvbiYgcG9zaXRp
b24pCi17Ci0gICAgLy8gRm9yIG5vdywgd2Ugb25seSBhY2NlcHQ6ICdhdXRvJyB8IDxpbnRlZ2Vy
PiB8IHNwYW4gJiYgPGludGVnZXI+PwotICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1
ZVNwYW4pIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSA8aW50ZWdlcj4gaXMgb21pdHRlZCwgaXQg
ZGVmYXVsdHMgdG8gJzEnLgotICAgICAgICAgICAgcG9zaXRpb24uc2V0U3BhblBvc2l0aW9uKDEp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQo
cHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpOwotICAgICAgICBwb3NpdGlvbi5zZXRJbnRlZ2Vy
UG9zaXRpb24ocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih2YWx1
ZS0+aXNWYWx1ZUxpc3QoKSk7Ci0gICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMgPSBzdGF0aWNfY2Fz
dDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgQVNTRVJUKHZhbHVlcy0+bGVuZ3RoKCkgPT0g
Mik7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04odmFsdWVzLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDEpLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBudW1lcmljVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgQVNTRVJUKG51bWVyaWNWYWx1
ZS0+aXNOdW1iZXIoKSk7Ci0gICAgcG9zaXRpb24uc2V0U3BhblBvc2l0aW9uKG51bWVyaWNWYWx1
ZS0+Z2V0SW50VmFsdWUoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NT
X1ZBUklBQkxFUykKLXN0YXRpYyBib29sIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKENTU1ZhbHVlKiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLT5oYXNWYXJp
YWJsZVJlZmVyZW5jZSgpOwotICAgIH0KLQotICAgIGlmICh2YWx1ZS0+aXNDYWxjdWxhdGlvblZh
bHVlKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NDYWxjVmFsdWUqPih2YWx1ZSkt
Pmhhc1ZhcmlhYmxlUmVmZXJlbmNlKCk7Ci0KLSAgICBpZiAodmFsdWUtPmlzUmVmbGVjdFZhbHVl
KCkpIHsKLSAgICAgICAgQ1NTUmVmbGVjdFZhbHVlKiByZWZsZWN0VmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NSZWZsZWN0VmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBk
aXJlY3Rpb24gPSByZWZsZWN0VmFsdWUtPmRpcmVjdGlvbigpOwotICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogb2Zmc2V0ID0gcmVmbGVjdFZhbHVlLT5vZmZzZXQoKTsKLSAgICAgICAgQ1NTVmFs
dWUqIG1hc2sgPSByZWZsZWN0VmFsdWUtPm1hc2soKTsKLSAgICAgICAgcmV0dXJuIChkaXJlY3Rp
b24gJiYgaGFzVmFyaWFibGVSZWZlcmVuY2UoZGlyZWN0aW9uKSkgfHwgKG9mZnNldCAmJiBoYXNW
YXJpYWJsZVJlZmVyZW5jZShvZmZzZXQpKSB8fCAobWFzayAmJiBoYXNWYXJpYWJsZVJlZmVyZW5j
ZShtYXNrKSk7Ci0gICAgfQotCi0gICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFs
dWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICBpZiAoaGFzVmFyaWFibGVS
ZWZlcmVuY2UoaS52YWx1ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFi
bGVzKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPHN0ZDo6cGFpcjxD
U1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4mIGtub3duRXhwcmVzc2lvbnMpCi17Ci0gICAgc3RkOjpw
YWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwgdmFsdWUtPnNlcmlhbGl6
ZVJlc29sdmluZ1ZhcmlhYmxlcygqbV9zdGF0ZS5zdHlsZSgpLT52YXJpYWJsZXMoKSkpOwotCi0g
ICAgaWYgKGtub3duRXhwcmVzc2lvbnMuY29udGFpbnMoZXhwcmVzc2lvbikpCi0gICAgICAgIHJl
dHVybjsgLy8gY3ljbGUgZGV0ZWN0ZWQuCi0KLSAgICBrbm93bkV4cHJlc3Npb25zLmFwcGVuZChl
eHByZXNzaW9uKTsKLQotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBmYXN0ZXIgbm90IHRvIHJl
LXBhcnNlIGZyb20gc3RyaW5ncywgYnV0IGZvciBub3cgQ1NTIHByb3BlcnR5IHZhbGlkYXRpb24g
bGl2ZXMgaW5zaWRlIHRoZSBwYXJzZXIgc28gd2UgZG8gaXQgdGhlcmUuCi0gICAgUmVmUHRyPE11
dGFibGVTdHlsZVByb3BlcnR5U2V0PiByZXN1bHRTZXQgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0eVNl
dDo6Y3JlYXRlKCk7Ci0gICAgaWYgKCFDU1NQYXJzZXI6OnBhcnNlVmFsdWUocmVzdWx0U2V0Lmdl
dCgpLCBpZCwgZXhwcmVzc2lvbi5zZWNvbmQsIGZhbHNlLCBkb2N1bWVudCgpKSkKLSAgICAgICAg
cmV0dXJuOyAvLyBleHByZXNzaW9uIGZhaWxlZCB0byBwYXJzZS4KLQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZXN1bHRTZXQtPnByb3BlcnR5Q291bnQoKTsgaSsrKSB7Ci0gICAgICAg
IFN0eWxlUHJvcGVydHlTZXQ6OlByb3BlcnR5UmVmZXJlbmNlIHByb3BlcnR5ID0gcmVzdWx0U2V0
LT5wcm9wZXJ0eUF0KGkpOwotICAgICAgICBpZiAocHJvcGVydHkuaWQoKSAhPSBDU1NQcm9wZXJ0
eVZhcmlhYmxlICYmIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKHByb3BlcnR5LnZhbHVlKCkpKQotICAg
ICAgICAgICAgcmVzb2x2ZVZhcmlhYmxlcyhwcm9wZXJ0eS5pZCgpLCBwcm9wZXJ0eS52YWx1ZSgp
LCBrbm93bkV4cHJlc3Npb25zKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwbHlQcm9w
ZXJ0eShwcm9wZXJ0eS5pZCgpLCBwcm9wZXJ0eS52YWx1ZSgpKTsKLSAgICB9Ci19Ci0jZW5kaWYK
LQotdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKLSAgICBpZiAoaWQg
IT0gQ1NTUHJvcGVydHlWYXJpYWJsZSAmJiBoYXNWYXJpYWJsZVJlZmVyZW5jZSh2YWx1ZSkpIHsK
LSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4ga25vd25F
eHByZXNzaW9uczsKLSAgICAgICAgcmVzb2x2ZVZhcmlhYmxlcyhpZCwgdmFsdWUsIGtub3duRXhw
cmVzc2lvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBDU1Mg
dmFyaWFibGVzIGRvbid0IHJlc29sdmUgc2hvcnRoYW5kcyBhdCBwYXJzaW5nIHRpbWUsIHNvIHRo
aXMgc2hvdWxkIGJlICphZnRlciogaGFuZGxpbmcgdmFyaWFibGVzLgotICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoIWlzRXhwYW5kZWRTaG9ydGhhbmQoaWQpLCAiU2hvcnRoYW5kIHByb3BlcnR5IGlk
ID0gJWQgd2Fzbid0IGV4cGFuZGVkIGF0IHBhcnNpbmcgdGltZSIsIGlkKTsKLQotICAgIFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnROb2Rl
KCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKLSAgICBib29sIGlzSW5pdGlhbCA9IHZh
bHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5p
c0luaGVyaXRlZFZhbHVlKCkpOwotCi0gICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgIWlzSW5pdGlh
bCk7IC8vIGlzSW5oZXJpdCAtPiAhaXNJbml0aWFsICYmIGlzSW5pdGlhbCAtPiAhaXNJbmhlcml0
Ci0gICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgKHN0YXRlLnBhcmVudE5vZGUoKSAmJiBzdGF0ZS5w
YXJlbnRTdHlsZSgpKSk7IC8vIGlzSW5oZXJpdCAtPiAoc3RhdGUucGFyZW50Tm9kZSgpICYmIHN0
YXRlLnBhcmVudFN0eWxlKCkpCi0KLSAgICBpZiAoIXN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSgpICYmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIHx8
ICFpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkpKSB7Ci0gICAgICAgIC8vIExpbWl0IHRo
ZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUgb25lcyBob25vcmVk
IGJ5IDp2aXNpdGVkLgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlzSW5oZXJp
dCAmJiAhc3RhdGUucGFyZW50U3R5bGUoKS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRp
ZXMoKSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQotICAgICAgICBz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygp
OwotCi0jaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCi0gICAgaWYgKGlkID09IENTU1Byb3BlcnR5
VmFyaWFibGUpIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04odmFs
dWUtPmlzVmFyaWFibGVWYWx1ZSgpKTsKLSAgICAgICAgQ1NTVmFyaWFibGVWYWx1ZSogdmFyaWFi
bGUgPSBzdGF0aWNfY2FzdDxDU1NWYXJpYWJsZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBBU1NF
UlQoIXZhcmlhYmxlLT5uYW1lKCkuaXNFbXB0eSgpKTsKLSAgICAgICAgQVNTRVJUKCF2YXJpYWJs
ZS0+dmFsdWUoKS5pc0VtcHR5KCkpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRWYXJpYWJs
ZSh2YXJpYWJsZS0+bmFtZSgpLCB2YXJpYWJsZS0+dmFsdWUoKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIENoZWNrIGxvb2t1cCB0YWJsZSBmb3IgaW1wbGVtZW50
YXRpb25zIGFuZCB1c2Ugd2hlbiBhdmFpbGFibGUuCi0gICAgY29uc3QgUHJvcGVydHlIYW5kbGVy
JiBoYW5kbGVyID0gbV9kZXByZWNhdGVkU3R5bGVCdWlsZGVyLnByb3BlcnR5SGFuZGxlcihpZCk7
Ci0gICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGlmIChpc0luaGVyaXQpCi0g
ICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKGlkLCB0aGlzKTsKLSAgICAgICAg
ZWxzZSBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1
ZShpZCwgdGhpcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1
ZShpZCwgdGhpcywgdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSA/
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpIDogMDsKLQotICAgIGZsb2F0
IHpvb21GYWN0b3IgPSBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0KLSAgICAvLyBX
aGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3BlcnRpZXMgaW50byB0
aGVpciBjb3JyZXNwb25kaW5nIGZyb250LWVuZAotICAgIC8vIFJlbmRlclN0eWxlIHZhbHVlcy4K
LSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgLy8gbGlzdHMKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29u
dGVudDoKLSAgICAgICAgLy8gbGlzdCBvZiBzdHJpbmcsIHVyaSwgY291bnRlciwgYXR0ciwgaQot
ICAgICAgICB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSW4gQ1NTMywgaXQgd2lsbCBiZSBwb3Nz
aWJsZSB0byBpbmhlcml0IGNvbnRlbnQuIEluIENTUzIgaXQgaXMgbm90LiBUaGlzCi0gICAgICAg
ICAgICAvLyBub3RlIGlzIGEgcmVtaW5kZXIgdGhhdCBldmVudHVhbGx5ICJpbmhlcml0IiBuZWVk
cyB0byBiZSBzdXBwb3J0ZWQuCi0KLSAgICAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckNvbnRlbnQoKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUtPmlzVmFs
dWVMaXN0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBib29sIGRp
ZFNldCA9IGZhbHNlOwotICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0g
dmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICAgICAgICAgIENTU1Zh
bHVlKiBpdGVtID0gaS52YWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0ltYWdl
R2VuZXJhdG9yVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNHcmFk
aWVudFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRD
b250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NHcmFkaWVu
dFZhbHVlKj4oaXRlbSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdldCgpKSwg
ZGlkU2V0KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUo
c3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKLSAg
ICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NF
VCkKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzSW1hZ2VTZXRWYWx1ZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoc2V0T3JQZW5k
aW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRW
YWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1
ZTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChpdGVt
LT5pc0ltYWdlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0
YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghaXRlbS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KGl0ZW0pOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNT
dHJpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50
KGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChj
b250ZW50VmFsdWUtPmlzQXR0cigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBD
YW4gYSBuYW1lc3BhY2UgYmUgc3BlY2lmaWVkIGZvciBhbiBhdHRyKGZvbyk/Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVuaXF1ZSgpOwotICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wYXJlbnRT
dHlsZSgpLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSBh
dHRyKG51bGxBdG9tLCBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBudWxs
QXRvbSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBz
dGF0ZS5lbGVtZW50KCktPmdldEF0dHJpYnV0ZShhdHRyKTsKLSAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHZh
bHVlLmltcGwoKSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0aGUgYXR0cmli
dXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0eWxlCi0gICAgICAgICAgICAgICAgICAgIG1fcnVsZVNl
dHMuZmVhdHVyZXMoKS5hdHRyc0luUnVsZXMuYWRkKGF0dHIubG9jYWxOYW1lKCkuaW1wbCgpKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNDb3VudGVyKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgQ291bnRlciogY291bnRlclZhbHVlID0gY29udGVudFZhbHVl
LT5nZXRDb3VudGVyVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgRUxpc3RTdHlsZVR5cGUg
bGlzdFN0eWxlVHlwZSA9IE5vbmVMaXN0U3R5bGU7Ci0gICAgICAgICAgICAgICAgICAgIENTU1Zh
bHVlSUQgbGlzdFN0eWxlSWRlbnQgPSBjb3VudGVyVmFsdWUtPmxpc3RTdHlsZUlkZW50KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBsaXN0U3R5bGVUeXBlID0gc3RhdGljX2Nhc3Q8RUxpc3RT
dHlsZVR5cGU+KGxpc3RTdHlsZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsKLSAgICAgICAgICAgICAg
ICAgICAgT3duUHRyPENvdW50ZXJDb250ZW50PiBjb3VudGVyID0gYWRvcHRQdHIobmV3IENvdW50
ZXJDb250ZW50KGNvdW50ZXJWYWx1ZS0+aWRlbnRpZmllcigpLCBsaXN0U3R5bGVUeXBlLCBjb3Vu
dGVyVmFsdWUtPnNlcGFyYXRvcigpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldENvbnRlbnQoY291bnRlci5yZWxlYXNlKCksIGRpZFNldCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldFZhbHVlSUQoKSkgewotICAgICAg
ICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlT3BlblF1b3RlOgotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90ZToK
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoQ0xPU0Vf
UVVPVEUsIGRpZFNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVOb09wZW5RdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xvc2VRdW90ZToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoTk9fQ0xPU0VfUVVPVEUsIGRp
ZFNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWwgYW5kIG5vbmUgZG8gbm90IGhhdmUgYW55IGVm
ZmVjdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIHsgfQotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFkaWRT
ZXQpCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJDb250ZW50KCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5UXVvdGVzOgot
ICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRR
dW90ZXMoc3RhdGUucGFyZW50U3R5bGUoKS0+cXVvdGVzKCkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldFF1b3RlcygwKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVl
TGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAg
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4gcXVvdGVzOwotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsgaSArPSAyKSB7Ci0gICAg
ICAgICAgICAgICAgQ1NTVmFsdWUqIGZpcnN0ID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
ayhpKTsKLSAgICAgICAgICAgICAgICAvLyBpdGVtKCkgcmV0dXJucyBudWxsIGlmIG91dCBvZiBi
b3VuZHMgc28gdGhpcyBpcyBzYWZlLgotICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBzZWNvbmQg
PSBsaXN0LT5pdGVtKGkgKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNlY29uZCkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oZmlyc3QtPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc2Vjb25kLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpOwotICAgICAgICAgICAgICAgIFN0cmluZyBzdGFydFF1b3RlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihmaXJzdCktPmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgU3RyaW5nIGVuZFF1b3RlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
PihzZWNvbmQpLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgICAgIHF1b3Rlcy5hcHBl
bmQoc3RkOjptYWtlX3BhaXIoc3RhcnRRdW90ZSwgZW5kUXVvdGUpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUo
cXVvdGVzKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVl
SUQoKSA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
UXVvdGVzKFF1b3Rlc0RhdGE6OmNyZWF0ZShWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5n
PiA+KCkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgLy8gU2hvcnRoYW5kIHBy
b3BlcnRpZXMuCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnQ6Ci0gICAgICAgIGlmIChpc0luaGVy
aXQpIHsKLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0
ZS5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldExpbmVIZWlnaHQoc3RhdGUucGFyZW50U3R5bGUoKS0+c3BlY2lmaWVkTGluZUhl
aWdodCgpKTsKLSAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKLSAgICAg
ICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICB9IGVs
c2UgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9j
dW1lbnRTZXR0aW5ncygpOwotICAgICAgICAgICAgQVNTRVJUKHNldHRpbmdzKTsgLy8gSWYgd2Un
cmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwgdGhpcyBkb2N1bWVudCBzaG91bGQgYWx3YXlzIGJl
IGluIGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBzZXR0aW5ncwotICAgICAgICAgICAgaWYgKCFzZXR0
aW5ncykKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpbml0aWFsaXplRm9u
dFN0eWxlKHNldHRpbmdzKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZSkgewot
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUo
MCk7Ci0KLSAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247Ci0gICAg
ICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUZvbnQocHJpbWl0aXZl
VmFsdWUtPmdldFZhbHVlSUQoKSwgZm9udERlc2NyaXB0aW9uKTsKLQotICAgICAgICAgICAgLy8g
RG91YmxlLWNoZWNrIGFuZCBzZWUgaWYgdGhlIHRoZW1lIGRpZCBhbnl0aGluZy4gSWYgbm90LCBk
b24ndCBib3RoZXIgdXBkYXRpbmcgdGhlIGZvbnQuCi0gICAgICAgICAgICBpZiAoZm9udERlc2Ny
aXB0aW9uLmlzQWJzb2x1dGVTaXplKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUg
dGhlIHJlbmRlcmluZyBtb2RlIGFuZCBwcmludGVyIGZvbnQgc2V0dGluZ3MgYXJlIHVwZGF0ZWQu
Ci0gICAgICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygp
OwotICAgICAgICAgICAgICAgIEFTU0VSVChzZXR0aW5ncyk7IC8vIElmIHdlJ3JlIGRvaW5nIHN0
eWxlIHJlc29sdXRpb24sIHRoaXMgZG9jdW1lbnQgc2hvdWxkIGFsd2F5cyBiZSBpbiBhIGZyYW1l
IGFuZCB0aHVzIGhhdmUgc2V0dGluZ3MKLSAgICAgICAgICAgICAgICBpZiAoIXNldHRpbmdzKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOwotICAg
ICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChkb2N1bWVudCgp
LT5wcmludGluZygpIHx8ICFzZXR0aW5ncy0+c2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQo
KSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20gZmFjdG9yLgotICAgICAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXpl
RnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUoKSwgZm9udERlc2NyaXB0
aW9uLmlzQWJzb2x1dGVTaXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIHVz
ZVNWR1pvb21SdWxlcygpKSk7Ci0gICAgICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUt
PmlzRm9udFZhbHVlKCkpIHsKLSAgICAgICAgICAgIEZvbnRWYWx1ZSogZm9udCA9IHN0YXRpY19j
YXN0PEZvbnRWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghZm9udC0+c3R5bGUgfHwg
IWZvbnQtPnZhcmlhbnQgfHwgIWZvbnQtPndlaWdodAotICAgICAgICAgICAgICAgIHx8ICFmb250
LT5zaXplIHx8ICFmb250LT5saW5lSGVpZ2h0IHx8ICFmb250LT5mYW1pbHkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRT
dHlsZSwgZm9udC0+c3R5bGUuZ2V0KCkpOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUZvbnRWYXJpYW50LCBmb250LT52YXJpYW50LmdldCgpKTsKLSAgICAgICAgICAgIGFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250LT53ZWlnaHQuZ2V0KCkpOwot
ICAgICAgICAgICAgLy8gVGhlIHByZXZpb3VzIHByb3BlcnRpZXMgY2FuIGRpcnR5IG91ciBmb250
IGJ1dCB0aGV5IGRvbid0IHRyeSB0byByZWFkIHRoZSBmb250J3MKLSAgICAgICAgICAgIC8vIHBy
b3BlcnRpZXMgYmFjaywgd2hpY2ggaXMgc2FmZS4gSG93ZXZlciBpZiBmb250LXNpemUgaXMgdXNp
bmcgdGhlICdleCcgdW5pdCwgaXQgd2lsbAotICAgICAgICAgICAgLy8gbmVlZCBxdWVyeSB0aGUg
ZGlydGllZCBmb250J3MgeC1oZWlnaHQgdG8gZ2V0IHRoZSBjb21wdXRlZCBzaXplLiBUbyBiZSBz
YWZlIGluIHRoaXMKLSAgICAgICAgICAgIC8vIGNhc2UsIGxldCdzIGp1c3QgdXBkYXRlIHRoZSBm
b250IG5vdy4KLSAgICAgICAgICAgIHVwZGF0ZUZvbnQoKTsKLSAgICAgICAgICAgIGFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC0+c2l6ZS5nZXQoKSk7Ci0KLSAgICAgICAg
ICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShmb250LT5saW5lSGVpZ2h0LmdldCgpKTsKLQot
ICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZvbnQtPmZh
bWlseS5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlv
bjoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdDoKLSAgICBjYXNlIENTU1By
b3BlcnR5Qm9yZGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b206Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlckNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFn
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyUmFkaXVzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyU3BhY2luZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyU3R5
bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZToKLSAgICBjYXNlIENT
U1Byb3BlcnR5TWFyZ2luOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlPdmVyZmxvdzoKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZzoKLSAgICBj
YXNlIENTU1Byb3BlcnR5VHJhbnNpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5p
bWF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJBZnRlcjoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJFbmQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtbnM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGU6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEZsZXhGbG93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkQ29sdW1uOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkUm93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXJnaW5Db2xsYXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFz
a1Bvc2l0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRleHRTdHJva2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpbjoKLSAgICAgICAgQVNTRVJU
KGlzRXhwYW5kZWRTaG9ydGhhbmQoaWQpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgLy8gQ1NTMyBQcm9wZXJ0aWVzCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVRleHRTaGFkb3c6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJveFNoYWRvdzoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93OiB7Ci0gICAgICAgIGlmIChpc0luaGVyaXQp
IHsKLSAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFkb3coc3RhdGUucGFyZW50
U3R5bGUoKS0+dGV4dFNoYWRvdygpID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKnN0YXRlLnBh
cmVudFN0eWxlKCktPnRleHRTaGFkb3coKSkpIDogbnVsbHB0cik7Ci0gICAgICAgICAgICByZXR1
cm4gc3RhdGUuc3R5bGUoKS0+c2V0Qm94U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlKCktPmJveFNo
YWRvdygpID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKnN0YXRlLnBhcmVudFN0eWxlKCktPmJv
eFNoYWRvdygpKSkgOiBudWxscHRyKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNJbml0aWFs
IHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwgbm9uZQotICAgICAgICAgICAgcmV0dXJu
IGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/IHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFk
b3cobnVsbHB0cikgOiBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Ci0KLSAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7
IGkuYWR2YW5jZSgpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1
ZSgpOwotICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVtID0gc3Rh
dGljX2Nhc3Q8U2hhZG93VmFsdWUqPihjdXJyVmFsdWUpOwotICAgICAgICAgICAgaW50IHggPSBp
dGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwg
em9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5i
bHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSgpLCB6b29tRmFjdG9yKSA6IDA7Ci0gICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS0+
c3ByZWFkID8gaXRlbS0+c3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKSA6IDA7Ci0gICAgICAgICAgICBT
aGFkb3dTdHlsZSBzaGFkb3dTdHlsZSA9IGl0ZW0tPnN0eWxlICYmIGl0ZW0tPnN0eWxlLT5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwotICAgICAgICAgICAg
Q29sb3IgY29sb3I7Ci0gICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCi0gICAgICAgICAgICAg
ICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHlsZSgpKQotICAgICAgICAgICAgICAgIGNvbG9y
ID0gc3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKLQotICAgICAgICAgICAgT3duUHRyPFNoYWRvd0Rh
dGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0cihuZXcgU2hhZG93RGF0YShJbnRQb2ludCh4LCB5KSwg
Ymx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgaWQgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFk
b3csIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50KSk7Ci0gICAg
ICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5k
ZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hT
aGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlz
dCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKLSAgICAgICAgfQotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0OiB7Ci0gICAg
ICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGJveFJlZmxlY3QsIEJveFJlZmxlY3QpCi0g
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0Qm94UmVmbGVjdChSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJlZmxlY3QoKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbHVlLT5pc1JlZmxlY3RW
YWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU1JlZmxlY3RWYWx1ZSog
cmVmbGVjdFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUmVmbGVjdFZhbHVlKj4odmFsdWUpOwotICAg
ICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0gU3R5bGVSZWZsZWN0aW9u
OjpjcmVhdGUoKTsKLSAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKCpyZWZsZWN0VmFs
dWUtPmRpcmVjdGlvbigpKTsKLSAgICAgICAgaWYgKHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCkpCi0g
ICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+
Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lv
biB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCksIHpvb21GYWN0b3IpKTsKLSAgICAgICAgTmluZVBpZWNlSW1hZ2UgbWFzazsKLSAg
ICAgICAgbWFzay5zZXRNYXNrRGVmYXVsdHMoKTsKLSAgICAgICAgbV9zdHlsZU1hcC5tYXBOaW5l
UGllY2VJbWFnZShpZCwgcmVmbGVjdFZhbHVlLT5tYXNrKCksIG1hc2spOwotICAgICAgICByZWZs
ZWN0aW9uLT5zZXRNYXNrKG1hc2spOwotCi0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJveFJl
ZmxlY3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGNhc2UgQ1NTUHJvcGVydHlTcmM6IC8vIE9ubHkgdXNlZCBpbiBAZm9udC1mYWNlIHJ1bGVzLgot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVVuaWNvZGVSYW5nZTogLy8gT25s
eSB1c2VkIGluIEBmb250LWZhY2UgcnVsZXMuCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TG9jYWxlOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklU
SUFMKGxvY2FsZSwgTG9jYWxlKTsKLSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkg
PT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TG9jYWxlKG51
bGxBdG9tKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TG9j
YWxlKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigp
OwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZv
ckZvbnRTZWxlY3Rpb24oc3RhdGUuc3R5bGUoKS0+bG9jYWxlKCkpKTsKLSAgICAgICAgc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
aWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRE
YXNoYm9hcmRSZWdpb246Ci0gICAgewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TChkYXNoYm9hcmRSZWdpb25zLCBEYXNoYm9hcmRSZWdpb25zKQotICAgICAgICBpZiAoIXByaW1p
dGl2ZVZhbHVlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9uZURhc2hib2FyZFJl
Z2lvbnMoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBEYXNo
Ym9hcmRSZWdpb24qIHJlZ2lvbiA9IHByaW1pdGl2ZVZhbHVlLT5nZXREYXNoYm9hcmRSZWdpb25W
YWx1ZSgpOwotICAgICAgICBpZiAoIXJlZ2lvbikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBEYXNoYm9hcmRSZWdpb24qIGZpcnN0ID0gcmVnaW9uOwotICAgICAgICB3aGlsZSAocmVn
aW9uKSB7Ci0gICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lv
bi0+dG9wKCksIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7Ci0gICAg
ICAgICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5yaWdodCgp
LCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwotICAgICAgICAgICAg
TGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdGF0
ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwotICAgICAgICAgICAgTGVuZ3Ro
IGxlZnQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5sZWZ0KCksIHN0YXRlLnN0eWxlKCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7Ci0KLSAgICAgICAgICAgIGlmICh0b3AuaXNVbmRl
ZmluZWQoKSkKLSAgICAgICAgICAgICAgICB0b3AgPSBMZW5ndGgoKTsKLSAgICAgICAgICAgIGlm
IChyaWdodC5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIHJpZ2h0ID0gTGVuZ3RoKCk7
Ci0gICAgICAgICAgICBpZiAoYm90dG9tLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAg
Ym90dG9tID0gTGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAobGVmdC5pc1VuZGVmaW5lZCgpKQot
ICAgICAgICAgICAgICAgIGxlZnQgPSBMZW5ndGgoKTsKLQotICAgICAgICAgICAgaWYgKHJlZ2lv
bi0+bV9pc0NpcmNsZSkKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREYXNoYm9h
cmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OkNpcmNsZSwgcmVnaW9uLT5tX2xhYmVsLCB0
b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7
Ci0gICAgICAgICAgICBlbHNlIGlmIChyZWdpb24tPm1faXNSZWN0YW5nbGUpCi0gICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJkUmVn
aW9uOjpSZWN0YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0
LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwotICAgICAgICAgICAgcmVnaW9uID0g
cmVnaW9uLT5tX25leHQuZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0ZS5kb2N1bWVu
dCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOwotCi0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoRFJBR0dBQkxFX1JFR0lPTikKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0QXBwUmVnaW9uOiB7Ci0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgfHwg
IXByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldERyYWdnYWJsZVJlZ2lvbk1vZGUocHJpbWl0aXZlVmFsdWUt
PmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZURyYWcgPyBEcmFnZ2FibGVSZWdpb25EcmFnIDogRHJh
Z2dhYmxlUmVnaW9uTm9EcmFnKTsKLSAgICAgICAgc3RhdGUuZG9jdW1lbnQoKS0+c2V0SGFzQW5u
b3RhdGVkUmVnaW9ucyh0cnVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlV2lkdGg6IHsKLSAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dFN0cm9rZVdpZHRoLCBUZXh0U3Ryb2tlV2lkdGgpCi0g
ICAgICAgIGZsb2F0IHdpZHRoID0gMDsKLSAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+
Z2V0VmFsdWVJRCgpKSB7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVUaGluOgotICAgICAgICBjYXNl
IENTU1ZhbHVlTWVkaXVtOgotICAgICAgICBjYXNlIENTU1ZhbHVlVGhpY2s6IHsKLSAgICAgICAg
ICAgIGRvdWJsZSByZXN1bHQgPSAxLjAgLyA0ODsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTWVkaXVtKQotICAgICAgICAgICAgICAgIHJl
c3VsdCAqPSAzOwotICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVl
SUQoKSA9PSBDU1NWYWx1ZVRoaWNrKQotICAgICAgICAgICAgICAgIHJlc3VsdCAqPSA1OwotICAg
ICAgICAgICAgd2lkdGggPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19FTVMpLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZSgp
LCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHdpZHRoID0gcHJp
bWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJv
b3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0U3Ryb2tlV2lkdGgod2lkdGgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zv
cm06IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodHJhbnNmb3JtLCBUcmFu
c2Zvcm0pOwotICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgICAg
IHRyYW5zZm9ybXNGb3JWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
KCksIHZhbHVlLCBvcGVyYXRpb25zKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VHJhbnNm
b3JtKG9wZXJhdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRQZXJzcGVjdGl2ZTogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTChwZXJzcGVjdGl2ZSwgUGVyc3BlY3RpdmUpCi0KLSAgICAgICAgaWYgKCFwcmltaXRpdmVW
YWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldFBlcnNwZWN0aXZlKDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgZmxvYXQgcGVyc3BlY3RpdmVWYWx1ZTsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IHByaW1pdGl2
ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCksIHpvb21GYWN0b3IpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNOdW1iZXIoKSkgewotICAgICAgICAgICAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxp
dHksIHRyZWF0IHZhbHVlbGVzcyBudW1iZXJzIGFzIHB4LgotICAgICAgICAgICAgcGVyc3BlY3Rp
dmVWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUtPmdldERv
dWJsZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5jb21wdXRlTGVuZ3RoPGZs
b2F0PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3Ip
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAocGVy
c3BlY3RpdmVWYWx1ZSA+PSAwLjBmKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGVy
c3BlY3RpdmUocGVyc3BlY3RpdmVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGFwSGlnaGxp
Z2h0Q29sb3I6IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGFwSGlnaGxp
Z2h0Q29sb3IsIFRhcEhpZ2hsaWdodENvbG9yKTsKLSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1
ZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJvbVBy
aW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCi0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklU
X0FORF9JTklUSUFMKHVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcsIFVzZVRvdWNoT3ZlcmZsb3dT
Y3JvbGxpbmcpOwotICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmco
cHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVRvdWNoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlJbnZhbGlkOgotICAg
ICAgICByZXR1cm47Ci0gICAgLy8gRGlyZWN0aW9uYWwgcHJvcGVydGllcyBhcmUgcmVzb2x2ZWQg
YnkgcmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoKSBiZWZvcmUgdGhlIHN3aXRjaC4KLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlckVuZFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3Jk
ZXJFbmRXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRDb2xvcjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRTdHlsZToKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyQmVmb3JlQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJl
Zm9yZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmVXaWR0aDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJDb2xvcjoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyQWZ0ZXJXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luRW5k
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5TdGFydDoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFyZ2luQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJn
aW5BZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQmVmb3JlQ29sbGFwc2U6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNlOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXJnaW5BZnRlckNvbGxhcHNlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXJnaW5Cb3R0b21Db2xsYXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
UGFkZGluZ0VuZDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ1N0YXJ0OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRQYWRkaW5nQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvZ2ljYWxX
aWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9naWNhbEhlaWdodDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWluTG9naWNhbFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNaW5Mb2dpY2FsSGVpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dp
Y2FsV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2ljYWxIZWlnaHQ6Ci0g
ICAgewotICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVE
aXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5zdHlsZSgpLT5kaXJlY3Rpb24oKSwgc3Rh
dGUuc3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7Ci0gICAgICAgIEFTU0VSVChuZXdJZCAhPSBpZCk7
Ci0gICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5KG5ld0lkLCB2YWx1ZSk7Ci0gICAgfQotICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250U3RyZXRjaDoKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFnZToK
LSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlUZXh0TGluZVRocm91Z2hDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJv
dWdoTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoU3R5bGU6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlUZXh0T3ZlcmxpbmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZUNvbG9yOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlUZXh0T3ZlcmxpbmVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lV2lk
dGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmU6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVRleHRVbmRlcmxpbmVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGlu
ZU1vZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVTdHlsZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5VGV4dFVuZGVybGluZVdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRGb250U2l6ZURlbHRhOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdDoKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ1NTIFRleHQgTGF5b3V0IE1v
ZHVsZSBMZXZlbCAzOiBWZXJ0aWNhbCB3cml0aW5nIHN1cHBvcnQKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0V3JpdGluZ01vZGU6IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJ
QUwod3JpdGluZ01vZGUsIFdyaXRpbmdNb2RlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwcmlt
aXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHNldFdyaXRpbmdNb2RlKCpwcmltaXRpdmVWYWx1ZSk7
Ci0KLSAgICAgICAgLy8gRklYTUU6IEl0IGlzIG5vdCBvayB0byBtb2RpZnkgZG9jdW1lbnQgc3Rh
dGUgd2hpbGUgYXBwbHlpbmcgc3R5bGUuCi0gICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCkgJiYg
c3RhdGUuZWxlbWVudCgpID09IHN0YXRlLmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQot
ICAgICAgICAgICAgc3RhdGUuZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50
RWxlbWVudCh0cnVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUZXh0T3JpZW50YXRpb246IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5E
X0lOSVRJQUwodGV4dE9yaWVudGF0aW9uLCBUZXh0T3JpZW50YXRpb24pOwotCi0gICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHNldFRleHRPcmllbnRhdGlvbigqcHJpbWl0
aXZlVmFsdWUpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TGluZUJveENvbnRhaW46IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwobGluZUJveENvbnRhaW4sIExpbmVCb3hDb250YWluKQotICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUp
IHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVCb3hDb250YWluKExpbmVCb3hD
b250YWluTm9uZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIXZhbHVlLT5pc0NTU0xpbmVCb3hDb250YWluVmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBDU1NMaW5lQm94Q29udGFpblZhbHVlKiBsaW5lQm94Q29udGFpblZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTTGluZUJveENvbnRhaW5WYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4obGluZUJveENvbnRhaW5WYWx1ZS0+dmFs
dWUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDU1MgRm9udHMgTW9kdWxl
IExldmVsIDMKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEZlYXR1cmVTZXR0aW5nczog
ewotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVl
SUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgewotICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9u
KHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLm1ha2VOb3JtYWxGZWF0dXJlU2V0dGlu
Z3MoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZh
bHVlLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKTsKLSAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVM
aXN0Kj4odmFsdWUpOwotICAgICAgICBSZWZQdHI8Rm9udEZlYXR1cmVTZXR0aW5ncz4gc2V0dGlu
Z3MgPSBGb250RmVhdHVyZVNldHRpbmdzOjpjcmVhdGUoKTsKLSAgICAgICAgaW50IGxlbiA9IGxp
c3QtPmxlbmd0aCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0g
ICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
aSk7Ci0gICAgICAgICAgICBpZiAoIWl0ZW0tPmlzRm9udEZlYXR1cmVWYWx1ZSgpKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgRm9udEZlYXR1cmVWYWx1ZSogZmVhdHVy
ZSA9IHN0YXRpY19jYXN0PEZvbnRGZWF0dXJlVmFsdWUqPihpdGVtKTsKLSAgICAgICAgICAgIHNl
dHRpbmdzLT5hcHBlbmQoRm9udEZlYXR1cmUoZmVhdHVyZS0+dGFnKCksIGZlYXR1cmUtPnZhbHVl
KCkpKTsKLSAgICAgICAgfQotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmVhdHVyZVNldHRp
bmdzKHNldHRpbmdzLnJlbGVhc2UoKSk7Ci0gICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKENTU19G
SUxURVJTKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXI6IHsKLSAgICAgICAgSEFO
RExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoZmlsdGVyLCBGaWx0ZXIpOwotICAgICAgICBGaWx0ZXJP
cGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgICAgIGlmIChjcmVhdGVGaWx0ZXJPcGVyYXRpb25z
KHZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIG9wZXJhdGlv
bnMpKQotICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RmlsdGVyKG9wZXJhdGlvbnMpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEdyaWRBdXRvQ29sdW1uczogewotICAgICAgICBHcmlkVHJhY2tTaXplIHRyYWNrU2l6ZTsKLSAg
ICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tTaXplKHZhbHVlLCB0cmFja1NpemUsIHN0YXRlKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZEF1dG9D
b2x1bW5zKHRyYWNrU2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEdyaWRBdXRvUm93czogewotICAgICAgICBHcmlkVHJhY2tTaXplIHRyYWNr
U2l6ZTsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tTaXplKHZhbHVlLCB0cmFja1NpemUs
IHN0YXRlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
R3JpZEF1dG9Sb3dzKHRyYWNrU2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWREZWZpbml0aW9uQ29sdW1uczogewotICAgICAgICBWZWN0
b3I8R3JpZFRyYWNrU2l6ZT4gdHJhY2tTaXplczsKLSAgICAgICAgTmFtZWRHcmlkTGluZXNNYXAg
bmFtZWRHcmlkTGluZXM7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwg
dHJhY2tTaXplcywgbmFtZWRHcmlkTGluZXMsIHN0YXRlKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZENvbHVtbnModHJhY2tTaXplcyk7Ci0gICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldE5hbWVkR3JpZENvbHVtbkxpbmVzKG5hbWVkR3JpZExpbmVz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3Jp
ZERlZmluaXRpb25Sb3dzOiB7Ci0gICAgICAgIFZlY3RvcjxHcmlkVHJhY2tTaXplPiB0cmFja1Np
emVzOwotICAgICAgICBOYW1lZEdyaWRMaW5lc01hcCBuYW1lZEdyaWRMaW5lczsKLSAgICAgICAg
aWYgKCFjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCB0cmFja1NpemVzLCBuYW1lZEdyaWRMaW5l
cywgc3RhdGUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRHcmlkUm93cyh0cmFja1NpemVzKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRH
cmlkUm93TGluZXMobmFtZWRHcmlkTGluZXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRDb2x1bW5TdGFydDogewotICAgICAgICBHcmlk
UG9zaXRpb24gY29sdW1uU3RhcnRQb3NpdGlvbjsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkUG9z
aXRpb24odmFsdWUsIGNvbHVtblN0YXJ0UG9zaXRpb24pKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkSXRlbUNvbHVtblN0YXJ0KGNvbHVtblN0YXJ0
UG9zaXRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRHcmlkQ29sdW1uRW5kOiB7Ci0gICAgICAgIEdyaWRQb3NpdGlvbiBjb2x1bW5FbmRQb3Np
dGlvbjsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIGNvbHVtbkVuZFBv
c2l0aW9uKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
R3JpZEl0ZW1Db2x1bW5FbmQoY29sdW1uRW5kUG9zaXRpb24pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRSb3dTdGFydDogewotICAgICAg
ICBHcmlkUG9zaXRpb24gcm93U3RhcnRQb3NpdGlvbjsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlk
UG9zaXRpb24odmFsdWUsIHJvd1N0YXJ0UG9zaXRpb24pKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkSXRlbVJvd1N0YXJ0KHJvd1N0YXJ0UG9zaXRp
b24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRH
cmlkUm93RW5kOiB7Ci0gICAgICAgIEdyaWRQb3NpdGlvbiByb3dFbmRQb3NpdGlvbjsKLSAgICAg
ICAgaWYgKCFjcmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIHJvd0VuZFBvc2l0aW9uKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZEl0ZW1Sb3dFbmQo
cm93RW5kUG9zaXRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVGhlc2Ug
cHJvcGVydGllcyBhcmUgYWxpYXNlZCBhbmQgRGVwcmVjYXRlZFN0eWxlQnVpbGRlciBhbHJlYWR5
IGFwcGxpZWQgdGhlIHByb3BlcnR5IG9uIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlUcmFuc2l0aW9uRGVsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zaXRp
b25EdXJhdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlvblByb3BlcnR5OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246Ci0gICAgICAgIHJldHVy
bjsKLSAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGUgRGVwcmVj
YXRlZFN0eWxlQnVpbGRlciBsb29rdXAgdGFibGUuCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRBdHRhY2htZW50OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kSW1hZ2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW46Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblg6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRS
ZXBlYXRYOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WToKLSAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21MZWZ0UmFkaXVzOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21SaWdodFJhZGl1czoKLSAgICBjYXNlIENT
U1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbVdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VPdXRzZXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
ckltYWdlUmVwZWF0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNsaWNlOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUJvcmRlckxlZnRXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyUmlnaHRXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3I6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXM6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlclRvcFJpZ2h0UmFkaXVzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJU
b3BTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGg6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUJvdHRvbToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm94U2l6aW5nOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlDYXB0aW9uU2lkZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Q2xlYXI6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUNsaXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlDb3VudGVySW5jcmVtZW50OgotICAgIGNhc2UgQ1NTUHJvcGVydHlD
b3VudGVyUmVzZXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjoKLSAgICBjYXNlIENTU1By
b3BlcnR5RGlyZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlEaXNwbGF5OgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlFbXB0eUNlbGxzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9hdDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udFNpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZToK
LSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZv
bnRXZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUhlaWdodDoKLSNpZiBFTkFCTEUoQ1NTX0lN
QUdFX09SSUVOVEFUSU9OKQotICAgIGNhc2UgQ1NTUHJvcGVydHlJbWFnZU9yaWVudGF0aW9uOgot
I2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUltYWdlUmVuZGVyaW5nOgotI2lmIEVOQUJMRShD
U1NfSU1BR0VfUkVTT0xVVElPTikKLSAgICBjYXNlIENTU1Byb3BlcnR5SW1hZ2VSZXNvbHV0aW9u
OgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUxlZnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUxldHRlclNwYWNpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5
bGVQb3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlVHlwZToKLSAgICBjYXNl
IENTU1Byb3BlcnR5TWFyZ2luQm90dG9tOgotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5SaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
TWFyZ2luVG9wOgotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhIZWlnaHQ6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eU1heFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5IZWlnaHQ6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eU1pbldpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPcGFjaXR5OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlPcnBoYW5zOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29s
b3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQ6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eU91dGxpbmVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVdpZHRoOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1dyYXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJm
bG93WDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dZOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlQYWRkaW5nQm90dG9tOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nTGVmdDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5n
VG9wOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtBZnRlcjoKLSAgICBjYXNlIENTU1By
b3BlcnR5UGFnZUJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtJbnNp
ZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBvaW50ZXJFdmVudHM6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVBvc2l0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlSZXNpemU6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVJpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlTaXplOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlTcGVhazoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGFiU2l6ZToKLSAgICBjYXNlIENTU1By
b3BlcnR5VGFibGVMYXlvdXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRBbGlnbjoKLSAgICBj
YXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRJ
bmRlbnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdzoKLSAgICBjYXNlIENTU1By
b3BlcnR5VGV4dFJlbmRlcmluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFRyYW5zZm9ybToK
LSAgICBjYXNlIENTU1Byb3BlcnR5VG9wOgotICAgIGNhc2UgQ1NTUHJvcGVydHlVbmljb2RlQmlk
aToKLSNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKLSAgICBjYXNlIENTU1Byb3BlcnR5VmFyaWFi
bGU6Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5VmVydGljYWxBbGlnbjoKLSAgICBjYXNl
IENTU1Byb3BlcnR5VmlzaWJpbGl0eToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0
aW9uRGVsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRpcmVjdGlvbjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb246Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkZpbGxNb2RlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
QW5pbWF0aW9uTmFtZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uUGxheVN0
YXRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlvbjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXBwZWFyYW5jZToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QXNwZWN0UmF0aW86Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tmYWNl
VmlzaWJpbGl0eToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENsaXA6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGU6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRPcmlnaW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJhY2tncm91bmRTaXplOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJGaXQ6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJJbWFnZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
b3hBbGlnbjoKLSNpZiBFTkFCTEUoQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKQotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRCb3hEZWNvcmF0aW9uQnJlYWs6Ci0jZW5kaWYKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm94RGlyZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
b3hGbGV4OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hGbGV4R3JvdXA6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEJveExpbmVzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
b3hPcmRpbmFsR3JvdXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9yaWVudDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UGFjazoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Q29sb3JDb3JyZWN0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5BeGlz
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0FmdGVyOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Q29sdW1uQnJlYWtJbnNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVt
bkNvdW50OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5HYXA6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtblByb2dyZXNzaW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRDb2x1bW5SdWxlQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1
bGVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVdpZHRoOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5TcGFuOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRDb2x1bW5XaWR0aDoKLSNpZiBFTkFCTEUoQ1VSU09SX1ZJU0lCSUxJVFkpCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEN1cnNvclZpc2liaWxpdHk6Ci0jZW5kaWYKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0QWxpZ25Db250ZW50OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRB
bGlnbkl0ZW1zOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbGlnblNlbGY6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhCYXNpczoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
RmxleERpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleEdyb3c6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhTaHJpbms6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEZsZXhXcmFwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRKdXN0aWZ5Q29udGVudDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0T3JkZXI6Ci0jaWYgRU5BQkxFKENTU19SRUdJT05T
KQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbG93RnJvbToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Rmxvd0ludG86Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9u
dEtlcm5pbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTbW9vdGhpbmc6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRWYXJpYW50TGlnYXR1cmVzOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRIaWdobGlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhl
bmF0ZUNoYXJhY3RlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRB
ZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRCZWZvcmU6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXM6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEh5cGhlbnM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVB
bGlnbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUJyZWFrOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRMaW5lQ2xhbXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVH
cmlkOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lU25hcDoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFycXVlZURpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFycXVlZUluY3JlbWVudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVJlcGV0
aXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTcGVlZDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrQm94SW1hZ2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZU91
dHNldDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlUmVwZWF0OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTbGljZToKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrQm94SW1hZ2VXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXA6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDb21wb3NpdGU6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tJbWFnZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza09y
aWdpbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFza1JlcGVhdFg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TmJzcE1vZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlT3Jp
Z2luOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZU9yaWdpblg6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luWToKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0UHJpbnRDb2xvckFkanVzdDoKLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrQmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRSZWdpb25CcmVha0luc2lkZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uRnJh
Z21lbnQ6Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UnRsT3JkZXJpbmc6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dENvbWJpbmU6Ci0jaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25MaW5lOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RGVjb3JhdGlvblN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0
RGVjb3JhdGlvbkNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0QWxpZ25MYXN0
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0SnVzdGlmeToKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VGV4dFVuZGVybGluZVBvc2l0aW9uOgotI2VuZGlmIC8vIENTUzNfVEVYVAot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xvcjoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzUG9zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0
RmlsbENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U2VjdXJpdHk6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJh
bnNmb3JtT3JpZ2luWToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2lu
WjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtU3R5bGU6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNpdGlvbkR1cmF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uUHJvcGVydHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdG
dW5jdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWc6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFVzZXJNb2RpZnk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVz
ZXJTZWxlY3Q6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENsaXBQYXRoOgotI2lmIEVOQUJM
RShDU1NfU0hBUEVTKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZU1hcmdpbjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVQYWRkaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRTaGFwZUluc2lkZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRz
aWRlOgotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRXcmFwRmxvdzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JhcFRocm91
Z2g6Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgY2FzZSBDU1NQcm9wZXJ0
eU1peDoKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFyYW1ldGVyczoKLSNlbmRpZgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXaGl0ZVNwYWNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXaWRvd3M6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkQnJlYWs6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRTcGFjaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXb3Jk
V3JhcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5WkluZGV4OgotICAgIGNhc2UgQ1NTUHJvcGVydHla
b29tOgotI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eU1heFpvb206Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1pblpvb206Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eU9yaWVudGF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlVc2VyWm9vbToKLSNlbmRp
ZgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGRl
ZmF1bHQ6Ci0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgLy8gVHJ5IHRoZSBTVkcgcHJvcGVydGll
cwotICAgICAgICBhcHBseVNWR1Byb3BlcnR5KGlkLCB2YWx1ZSk7Ci0jZW5kaWYKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVy
OjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkT3JQ
ZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4odmFs
dWUpKTsKLQotICAgIGlmICh2YWx1ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKLSAgICAg
ICAgaWYgKHZhbHVlLT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBnZW5l
cmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0dyYWRpZW50
VmFsdWUqPih2YWx1ZSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpLmdldCgpKTsK
LSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3Rh
dGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KHZhbHVlKSk7Ci0gICAgfQotCi0jaWYg
RU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgaWYgKHZhbHVlLT5pc0ltYWdlU2V0VmFsdWUoKSkK
LSAgICAgICAgcmV0dXJuIHNldE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nh
c3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KHZhbHVlKSk7Ci0jZW5kaWYKLQotICAgIGlmICh2YWx1ZS0+
aXNDdXJzb3JJbWFnZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBjdXJzb3JPclBlbmRpbmdGcm9t
VmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0N1cnNvckltYWdlVmFsdWUqPih2YWx1ZSkp
OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNv
bHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENT
U0ltYWdlVmFsdWUqIHZhbHVlKQotewotICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZh
bHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOwotICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCku
c2V0KHByb3BlcnR5LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKLX0KLQot
UGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdG
cm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSog
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5pc1BlbmRpbmcoKSkgewotICAgICAgICBtX3N0YXRl
LnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKLSAgICAgICAg
cmV0dXJuIFN0eWxlUGVuZGluZ0ltYWdlOjpjcmVhdGUodmFsdWUpOwotICAgIH0KLSAgICByZXR1
cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKLX0KLQotI2lmIEVOQUJMRShD
U1NfSU1BR0VfU0VUKQotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzZXRP
clBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VTZXRWYWx1
ZSogdmFsdWUpCi17Ci0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hl
ZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOwotICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+
aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVz
KCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKLX0K
LSNlbmRpZgotCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmN1cnNvck9y
UGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NDdXJzb3JJbWFnZVZh
bHVlKiB2YWx1ZSkKLXsKLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2Fj
aGVkT3JQZW5kaW5nSW1hZ2UoZG9jdW1lbnQoKSk7Ci0gICAgaWYgKGltYWdlICYmIGltYWdlLT5p
c1BlbmRpbmdJbWFnZSgpKQotICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMo
KS5zZXQocHJvcGVydHksIHZhbHVlKTsKLSAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwotfQot
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSogc3R5
bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLXsKLSAgICBpZiAoc3R5bGUtPmVmZmVjdGl2
ZVpvb20oKSA9PSBwYXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVz
Y3JpcHRpb24oKTsKLSAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxk
Rm9udCk7Ci0gICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBjaGlsZEZvbnQuc3Bl
Y2lmaWVkU2l6ZSgpKTsKLSAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNj
cmlwdGlvbik7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5
Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQotewot
ICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpOwotCi0gICAgaWYgKGNoaWxkRm9udC5pc0Fic29sdXRlU2l6ZSgpIHx8ICFwYXJlbnRT
dHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJl
bnRGb250ID0gcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgIGlmIChjaGlsZEZv
bnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID09IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0U2l6
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGb3Igbm93LCBsdW1wIGFsbCBmYW1pbGll
cyBidXQgbW9ub3NwYWNlIHRvZ2V0aGVyLgotICAgIGlmIChjaGlsZEZvbnQuZ2VuZXJpY0ZhbWls
eSgpICE9IEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5Ci0gICAgICAgICYmIHBhcmVu
dEZvbnQuZ2VuZXJpY0ZhbWlseSgpICE9IEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBrbm93IHRoZSBwYXJlbnQgaXMgbW9ub3Nw
YWNlIG9yIHRoZSBjaGlsZCBpcyBtb25vc3BhY2UsIGFuZCB0aGF0IGZvbnQKLSAgICAvLyBzaXpl
IHdhcyB1bnNwZWNpZmllZC4gV2Ugd2FudCB0byBzY2FsZSBvdXIgZm9udCBzaXplIGFzIGFwcHJv
cHJpYXRlLgotICAgIC8vIElmIHRoZSBmb250IHVzZXMgYSBrZXl3b3JkIHNpemUsIHRoZW4gd2Ug
cmVmZXRjaCBmcm9tIHRoZSB0YWJsZSByYXRoZXIgdGhhbgotICAgIC8vIG11bHRpcGx5aW5nIGJ5
IG91ciBzY2FsZSBmYWN0b3IuCi0gICAgZmxvYXQgc2l6ZTsKLSAgICBpZiAoY2hpbGRGb250Lmtl
eXdvcmRTaXplKCkpCi0gICAgICAgIHNpemUgPSBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQo
KSwgQ1NTVmFsdWVYeFNtYWxsICsgY2hpbGRGb250LmtleXdvcmRTaXplKCkgLSAxLCBjaGlsZEZv
bnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgU2V0dGluZ3Mq
IHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpOwotICAgICAgICBmbG9hdCBmaXhlZFNjYWxl
RmFjdG9yID0gKHNldHRpbmdzICYmIHNldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpICYm
IHNldHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKSkKLSAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHNldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpKSAvIHNldHRpbmdzLT5kZWZh
dWx0Rm9udFNpemUoKQotICAgICAgICAgICAgOiAxOwotICAgICAgICBzaXplID0gcGFyZW50Rm9u
dC51c2VGaXhlZERlZmF1bHRTaXplKCkgPwotICAgICAgICAgICAgICAgIGNoaWxkRm9udC5zcGVj
aWZpZWRTaXplKCkgLyBmaXhlZFNjYWxlRmFjdG9yIDoKLSAgICAgICAgICAgICAgICBjaGlsZEZv
bnQuc3BlY2lmaWVkU2l6ZSgpICogZml4ZWRTY2FsZUZhY3RvcjsKLSAgICB9Ci0KLSAgICBGb250
RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9udCk7Ci0gICAgc2V0Rm9udFNp
emUobmV3Rm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0
aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlh
bGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0dGluZ3MpCi17Ci0gICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbjsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShG
b250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5KTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0
UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7Ci0gICAgZm9udERl
c2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGRvY3VtZW50KCktPnByaW50aW5nKCkgfHwgIXNl
dHRpbmdzLT5zY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZCgpKTsKLSAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHN0YW5kYXJkRm9udEZhbWlseSA9IGRvY3VtZW50U2V0dGluZ3MoKS0+c3RhbmRh
cmRGb250RmFtaWx5KCk7Ci0gICAgaWYgKCFzdGFuZGFyZEZvbnRGYW1pbHkuaXNFbXB0eSgpKQot
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KHN0YW5kYXJkRm9udEZhbWlseSk7
Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NT
VmFsdWVYeFNtYWxsICsgMSk7Ci0gICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250
U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKSk7Ci0gICAg
bV9zdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhl
aWdodCgpKTsKLSAgICBtX3N0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKLSAgICBzZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpz
ZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkK
LXsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICBmb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRT
aXplKGRvY3VtZW50KCksIG1fc3RhdGUuc3R5bGUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1
dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7Ci19CituYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWZsb2F0IFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRT
aXplKERvY3VtZW50KiBkb2N1bWVudCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIGlzQWJzb2x1
dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcykKLXsKLSAg
ICBmbG9hdCB6b29tRmFjdG9yID0gMS4wZjsKLSAgICBpZiAoIXVzZVNWR1pvb21SdWxlcykgewot
ICAgICAgICB6b29tRmFjdG9yID0gc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgaWYg
KEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICAgICAgem9vbUZhY3Rv
ciAqPSBmcmFtZS0+dGV4dFpvb21GYWN0b3IoKTsKLSAgICB9CituYW1lc3BhY2UgU3R5bGUgewog
Ci0gICAgcmV0dXJuIFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRT
aXplKGRvY3VtZW50LCB6b29tRmFjdG9yLCBpc0Fic29sdXRlU2l6ZSwgc3BlY2lmaWVkU2l6ZSk7
Ci19CitlbnVtIEVTbWFydE1pbmltdW1Gb3JGb250U2l6ZSB7IERvTm90VXNlU21hcnRNaW5pbXVt
Rm9yRm9udFNpemUsIFVzZVNtYXJ0TWluaW11bUZvckZvbnRGaXplIH07CiAKLWZsb2F0IFN0eWxl
UmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiBkb2N1
bWVudCwgZmxvYXQgem9vbUZhY3RvciwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lm
aWVkU2l6ZSwgRVNtYXJ0TWluaW11bUZvckZvbnRTaXplIHVzZVNtYXJ0TWluaW11bUZvckZvbnRT
aXplKQorc3RhdGljIGZsb2F0IGNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShmbG9h
dCBzcGVjaWZpZWRTaXplLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCB6b29tRmFjdG9yLCBF
U21hcnRNaW5pbXVtRm9yRm9udFNpemUgdXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUsIGNvbnN0
IFNldHRpbmdzKiBzZXR0aW5ncykKIHsKICAgICAvLyBUZXh0IHdpdGggYSAwcHggZm9udCBzaXpl
IHNob3VsZCBub3QgYmUgdmlzaWJsZSBhbmQgdGhlcmVmb3JlIG5lZWRzIHRvIGJlCiAgICAgLy8g
ZXhlbXB0IGZyb20gbWluaW11bSBmb250IHNpemUgcnVsZXMuIEFjaWQzIHJlbGllcyBvbiB0aGlz
IGZvciBwaXhlbC1wZXJmZWN0CkBAIC0zMzM3LDcgKzYwLDYgQEAgZmxvYXQgU3R5bGVSZXNvbHZl
cjo6Z2V0Q29tcHV0ZWRTaXplRnJvbQogICAgIC8vIEhvd2V2ZXIgd2UgYWx3YXlzIGFsbG93IHRo
ZSBwYWdlIHRvIHNldCBhbiBleHBsaWNpdCBwaXhlbCBzaXplIHRoYXQgaXMgc21hbGxlciwKICAg
ICAvLyBzaW5jZSBzaXRlcyB3aWxsIG1pcy1yZW5kZXIgb3RoZXJ3aXNlIChlLmcuLCBodHRwOi8v
d3d3LmdhbWVzcG90LmNvbSB3aXRoIGEgOXB4IG1pbmltdW0pLgogCi0gICAgU2V0dGluZ3MqIHNl
dHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7CiAgICAgaWYgKCFzZXR0aW5ncykKICAgICAg
ICAgcmV0dXJuIDEuMGY7CiAKQEAgLTMzNTgsNyArODAsMjMgQEAgZmxvYXQgU3R5bGVSZXNvbHZl
cjo6Z2V0Q29tcHV0ZWRTaXplRnJvbQogCiAgICAgLy8gQWxzbyBjbGFtcCB0byBhIHJlYXNvbmFi
bGUgbWF4aW11bSB0byBwcmV2ZW50IGluc2FuZSBmb250IHNpemVzIGZyb20gY2F1c2luZyBjcmFz
aGVzIG9uIHZhcmlvdXMKICAgICAvLyBwbGF0Zm9ybXMgKEknbSBsb29raW5nIGF0IHlvdSwgV2lu
ZG93cy4pCi0gICAgcmV0dXJuIG1pbihtYXhpbXVtQWxsb3dlZEZvbnRTaXplLCB6b29tZWRTaXpl
KTsKKyAgICByZXR1cm4gc3RkOjptaW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwgem9vbWVkU2l6
ZSk7Cit9CisKK2Zsb2F0IGNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShmbG9hdCBz
cGVjaWZpZWRTaXplLCBib29sIGlzQWJzb2x1dGVTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcywg
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit7Cisg
ICAgZmxvYXQgem9vbUZhY3RvciA9IDEuMGY7CisgICAgaWYgKCF1c2VTVkdab29tUnVsZXMpIHsK
KyAgICAgICAgem9vbUZhY3RvciA9IHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgIGlm
IChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgICAgIHpvb21GYWN0
b3IgKj0gZnJhbWUtPnRleHRab29tRmFjdG9yKCk7CisgICAgfQorICAgIHJldHVybiBjb21wdXRl
ZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoc3BlY2lmaWVkU2l6ZSwgaXNBYnNvbHV0ZVNpemUs
IHpvb21GYWN0b3IsIFVzZVNtYXJ0TWluaW11bUZvckZvbnRGaXplLCBkb2N1bWVudC0+c2V0dGlu
Z3MoKSk7Cit9CisKK2Zsb2F0IGNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZUZvclNW
R0lubGluZVRleHQoZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxv
YXQgem9vbUZhY3RvciwgY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBj
b21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoc3BlY2lmaWVkU2l6ZSwgaXNBYnNvbHV0
ZVNpemUsIHpvb21GYWN0b3IsIERvTm90VXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUsIGRvY3Vt
ZW50LT5zZXR0aW5ncygpKTsKIH0KIAogY29uc3QgaW50IGZvbnRTaXplVGFibGVNYXggPSAxNjsK
QEAgLTM0MDMsNyArMTQxLDcgQEAgc3RhdGljIGNvbnN0IGludCBzdHJpY3RGb250U2l6ZVRhYmxl
W2ZvbgogLy8gZmFjdG9ycyBmb3IgZWFjaCBrZXl3b3JkIHZhbHVlLgogc3RhdGljIGNvbnN0IGZs
b2F0IGZvbnRTaXplRmFjdG9yc1t0b3RhbEtleXdvcmRzXSA9IHsgMC42MGYsIDAuNzVmLCAwLjg5
ZiwgMS4wZiwgMS4yZiwgMS41ZiwgMi4wZiwgMy4wZiB9OwogCi1mbG9hdCBTdHlsZVJlc29sdmVy
Ojpmb250U2l6ZUZvcktleXdvcmQoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQga2V5d29yZCwgYm9v
bCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKQorZmxvYXQgZm9udFNpemVGb3JLZXl3b3JkKHVu
c2lnbmVkIGtleXdvcmRJRCwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplLCBjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQt
PnNldHRpbmdzKCk7CiAgICAgaWYgKCFzZXR0aW5ncykKQEAgLTM0MTQsMTMgKzE1MiwxMyBAQCBm
bG9hdCBTdHlsZVJlc29sdmVyOjpmb250U2l6ZUZvcktleXdvcmQoCiAgICAgaWYgKG1lZGl1bVNp
emUgPj0gZm9udFNpemVUYWJsZU1pbiAmJiBtZWRpdW1TaXplIDw9IGZvbnRTaXplVGFibGVNYXgp
IHsKICAgICAgICAgLy8gTG9vayB1cCB0aGUgZW50cnkgaW4gdGhlIHRhYmxlLgogICAgICAgICBp
bnQgcm93ID0gbWVkaXVtU2l6ZSAtIGZvbnRTaXplVGFibGVNaW47Ci0gICAgICAgIGludCBjb2wg
PSAoa2V5d29yZCAtIENTU1ZhbHVlWHhTbWFsbCk7CisgICAgICAgIGludCBjb2wgPSAoa2V5d29y
ZElEIC0gQ1NTVmFsdWVYeFNtYWxsKTsKICAgICAgICAgcmV0dXJuIHF1aXJrc01vZGUgPyBxdWly
a3NGb250U2l6ZVRhYmxlW3Jvd11bY29sXSA6IHN0cmljdEZvbnRTaXplVGFibGVbcm93XVtjb2xd
OwogICAgIH0KIAogICAgIC8vIFZhbHVlIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSB0YWJs
ZS4gQXBwbHkgdGhlIHNjYWxlIGZhY3RvciBpbnN0ZWFkLgogICAgIGZsb2F0IG1pbkxvZ2ljYWxT
aXplID0gbWF4KHNldHRpbmdzLT5taW5pbXVtTG9naWNhbEZvbnRTaXplKCksIDEpOwotICAgIHJl
dHVybiBtYXgoZm9udFNpemVGYWN0b3JzW2tleXdvcmQgLSBDU1NWYWx1ZVh4U21hbGxdKm1lZGl1
bVNpemUsIG1pbkxvZ2ljYWxTaXplKTsKKyAgICByZXR1cm4gbWF4KGZvbnRTaXplRmFjdG9yc1tr
ZXl3b3JkSUQgLSBDU1NWYWx1ZVh4U21hbGxdICogbWVkaXVtU2l6ZSwgbWluTG9naWNhbFNpemUp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMzQzNCw3ICsxNzIsNyBAQCBzdGF0aWMg
aW50IGZpbmROZWFyZXN0TGVnYWN5Rm9udFNpemUoaW50CiAgICAgcmV0dXJuIHRvdGFsS2V5d29y
ZHMgLSAxOwogfQogCi1pbnQgU3R5bGVSZXNvbHZlcjo6bGVnYWN5Rm9udFNpemUoRG9jdW1lbnQq
IGRvY3VtZW50LCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRT
aXplKQoraW50IGxlZ2FjeUZvbnRTaXplRm9yUGl4ZWxTaXplKGludCBwaXhlbEZvbnRTaXplLCBi
b29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUsIGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkK
IHsKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKTsKICAgICBp
ZiAoIXNldHRpbmdzKQpAQCAtMzQ1MCw4MzcgKzE4OCw1IEBAIGludCBTdHlsZVJlc29sdmVyOjps
ZWdhY3lGb250U2l6ZShEb2N1bWUKICAgICByZXR1cm4gZmluZE5lYXJlc3RMZWdhY3lGb250U2l6
ZTxmbG9hdD4ocGl4ZWxGb250U2l6ZSwgZm9udFNpemVGYWN0b3JzLCBtZWRpdW1TaXplKTsKIH0K
IAotc3RhdGljIENvbG9yIGNvbG9yRm9yQ1NTVmFsdWUoQ1NTVmFsdWVJRCBjc3NWYWx1ZUlkKQot
ewotICAgIHN0cnVjdCBDb2xvclZhbHVlIHsKLSAgICAgICAgQ1NTVmFsdWVJRCBjc3NWYWx1ZUlk
OwotICAgICAgICBSR0JBMzIgY29sb3I7Ci0gICAgfTsKLQotICAgIHN0YXRpYyBjb25zdCBDb2xv
clZhbHVlIGNvbG9yVmFsdWVzW10gPSB7Ci0gICAgICAgIHsgQ1NTVmFsdWVBcXVhLCAweEZGMDBG
RkZGIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVCbGFjaywgMHhGRjAwMDAwMCB9LAotICAgICAgICB7
IENTU1ZhbHVlQmx1ZSwgMHhGRjAwMDBGRiB9LAotICAgICAgICB7IENTU1ZhbHVlRnVjaHNpYSwg
MHhGRkZGMDBGRiB9LAotICAgICAgICB7IENTU1ZhbHVlR3JheSwgMHhGRjgwODA4MCB9LAotICAg
ICAgICB7IENTU1ZhbHVlR3JlZW4sIDB4RkYwMDgwMDAgIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVH
cmV5LCAweEZGODA4MDgwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVMaW1lLCAweEZGMDBGRjAwIH0s
Ci0gICAgICAgIHsgQ1NTVmFsdWVNYXJvb24sIDB4RkY4MDAwMDAgfSwKLSAgICAgICAgeyBDU1NW
YWx1ZU5hdnksIDB4RkYwMDAwODAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZU9saXZlLCAweEZGODA4
MDAwICB9LAotICAgICAgICB7IENTU1ZhbHVlT3JhbmdlLCAweEZGRkZBNTAwIH0sCi0gICAgICAg
IHsgQ1NTVmFsdWVQdXJwbGUsIDB4RkY4MDAwODAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZVJlZCwg
MHhGRkZGMDAwMCB9LAotICAgICAgICB7IENTU1ZhbHVlU2lsdmVyLCAweEZGQzBDMEMwIH0sCi0g
ICAgICAgIHsgQ1NTVmFsdWVUZWFsLCAweEZGMDA4MDgwICB9LAotICAgICAgICB7IENTU1ZhbHVl
VHJhbnNwYXJlbnQsIDB4MDAwMDAwMDAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZVdoaXRlLCAweEZG
RkZGRkZGIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVZZWxsb3csIDB4RkZGRkZGMDAgfSwKLSAgICAg
ICAgeyBDU1NWYWx1ZUludmFsaWQsIENTU1ZhbHVlSW52YWxpZCB9Ci0gICAgfTsKLQotICAgIGZv
ciAoY29uc3QgQ29sb3JWYWx1ZSogY29sID0gY29sb3JWYWx1ZXM7IGNvbC0+Y3NzVmFsdWVJZDsg
Kytjb2wpIHsKLSAgICAgICAgaWYgKGNvbC0+Y3NzVmFsdWVJZCA9PSBjc3NWYWx1ZUlkKQotICAg
ICAgICAgICAgcmV0dXJuIGNvbC0+Y29sb3I7Ci0gICAgfQotICAgIHJldHVybiBSZW5kZXJUaGVt
ZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOwotfQotCi1ib29sIFN0
eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQo
Q1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlKQotewotICAgIGludCBpZGVudCA9IHZhbHVlLT5nZXRW
YWx1ZUlEKCk7Ci0gICAgc3dpdGNoIChpZGVudCkgewotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRU
ZXh0OgotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRMaW5rOgotICAgIGNhc2UgQ1NTVmFsdWVXZWJr
aXRBY3RpdmVsaW5rOgotICAgIGNhc2UgQ1NTVmFsdWVDdXJyZW50Y29sb3I6Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLUNvbG9yIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1p
dGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykgY29uc3QKLXsKLSAgICBpZiAo
dmFsdWUtPmlzUkdCQ29sb3IoKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKHZhbHVlLT5nZXRSR0JB
MzJWYWx1ZSgpKTsKLQotICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgQ1NT
VmFsdWVJRCBpZGVudCA9IHZhbHVlLT5nZXRWYWx1ZUlEKCk7Ci0gICAgc3dpdGNoIChpZGVudCkg
ewotICAgIGNhc2UgMDoKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAgY2FzZSBDU1NWYWx1
ZVdlYmtpdFRleHQ6Ci0gICAgICAgIHJldHVybiBzdGF0ZS5kb2N1bWVudCgpLT50ZXh0Q29sb3Io
KTsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0TGluazoKLSAgICAgICAgcmV0dXJuIChzdGF0ZS5l
bGVtZW50KCktPmlzTGluaygpICYmIGZvclZpc2l0ZWRMaW5rKSA/IHN0YXRlLmRvY3VtZW50KCkt
PnZpc2l0ZWRMaW5rQ29sb3IoKSA6IHN0YXRlLmRvY3VtZW50KCktPmxpbmtDb2xvcigpOwotICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRBY3RpdmVsaW5rOgotICAgICAgICByZXR1cm4gc3RhdGUuZG9j
dW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3Vz
UmluZ0NvbG9yOgotICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmZvY3VzUmluZ0NvbG9yKCk7
Ci0gICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKLSAgICAgICAgcmV0dXJuIHN0YXRlLnN0
eWxlKCktPmNvbG9yKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGNvbG9yRm9yQ1NT
VmFsdWUoaWRlbnQpOwotICAgIH0KLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjphZGRWaWV3cG9y
dERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCogZXhwciwgYm9v
bCByZXN1bHQpCi17Ci0gICAgbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLmFw
cGVuZChhZG9wdFB0cihuZXcgTWVkaWFRdWVyeVJlc3VsdCgqZXhwciwgcmVzdWx0KSkpOwotfQot
Ci1ib29sIFN0eWxlUmVzb2x2ZXI6OmFmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNvbnN0Ci17
Ci0gICAgdW5zaWduZWQgcyA9IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5z
aXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHM7IGkrKykgewotICAgICAgICBp
ZiAobV9tZWRpdW0tPmV2YWwoJm1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0c1tp
XS0+bV9leHByZXNzaW9uKSAhPSBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHNb
aV0tPm1fcmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXN0YXRpYyBGaWx0ZXJPcGVy
YXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6RmlsdGVyT3BlcmF0aW9uVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlJlZmVyZW5jZUZpbHRlck9wZXJhdGlv
bjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOwotICAgIGNhc2Ug
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkdyYXlzY2FsZUZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAg
cmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOwotICAgIGNhc2UgV2ViS2l0Q1NTRmls
dGVyVmFsdWU6OlNlcGlhRmlsdGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3Bl
cmF0aW9uOjpTRVBJQTsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTYXR1cmF0ZUZp
bHRlck9wZXJhdGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU7
Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVlUm90YXRlRmlsdGVyT3BlcmF0aW9u
OgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOwotICAgIGNhc2Ug
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkludmVydEZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgcmV0
dXJuIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOwotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFs
dWU6Ok9wYWNpdHlGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRp
b246Ok9QQUNJVFk7Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0Zp
bHRlck9wZXJhdGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVT
UzsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJhdGlv
bjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q7Ci0gICAgY2FzZSBX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Qmx1ckZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgcmV0dXJu
IEZpbHRlck9wZXJhdGlvbjo6QkxVUjsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpE
cm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9u
OjpEUk9QX1NIQURPVzsKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgY2FzZSBXZWJLaXRD
U1NGaWx0ZXJWYWx1ZTo6Q3VzdG9tRmlsdGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1cm4gRmls
dGVyT3BlcmF0aW9uOjpDVVNUT007Ci0jZW5kaWYKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZh
bHVlOjpVbmtub3duRmlsdGVyT3BlcmF0aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0
aW9uOjpOT05FOwotICAgIH0KLSAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpOT05FOwotfQot
Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQotdm9pZCBTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCi17Ci0gICAgU3RhdGUmIHN0YXRlID0gbV9z
dGF0ZTsKLQotICAgIC8vIENyYXNoIHJlcG9ydHMgaW5kaWNhdGUgdGhhdCB3ZSd2ZSBzZWVuIGNh
bGxzIHRvIHRoaXMgZnVuY3Rpb24gd2hlbiBvdXIKLSAgICAvLyBzdHlsZSBpcyBOVUxMLiBXZSBk
b24ndCBrbm93IGV4YWN0bHkgd2h5IHRoaXMgaGFwcGVucy4gT3VyIGd1ZXNzIGlzCi0gICAgLy8g
cmVlbnRlcmluZyBzdHlsZUZvckVsZW1lbnQoKS4KLSAgICBBU1NFUlQoc3RhdGUuc3R5bGUoKSk7
Ci0gICAgaWYgKCFzdGF0ZS5zdHlsZSgpIHx8ICFzdGF0ZS5zdHlsZSgpLT5oYXNGaWx0ZXIoKSB8
fCBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBzdGF0
ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwotICAgIFZlY3RvcjxSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0gc3RhdGUuc3R5bGUoKS0+bXV0
YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBSZWZQdHI8RmlsdGVyT3Bl
cmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24gPSBmaWx0ZXJPcGVyYXRpb25zLmF0KGkpOwotICAgICAg
ICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0
aW9uOjpSRUZFUkVOQ0UpIHsKLSAgICAgICAgICAgIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiog
cmVmZXJlbmNlRmlsdGVyID0gc3RhdGljX2Nhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKj4o
ZmlsdGVyT3BlcmF0aW9uLmdldCgpKTsKLQotICAgICAgICAgICAgV2ViS2l0Q1NTU1ZHRG9jdW1l
bnRWYWx1ZSogdmFsdWUgPSBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuZ2V0KHJlZmVyZW5j
ZUZpbHRlcik7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgQ2FjaGVkU1ZHRG9jdW1lbnQqIGNhY2hlZERvY3VtZW50ID0gdmFs
dWUtPmxvYWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwotICAgICAgICAgICAgaWYgKCFjYWNoZWRE
b2N1bWVudCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gU3Rh
c2ggdGhlIENhY2hlZFNWR0RvY3VtZW50IG9uIHRoZSByZWZlcmVuY2UgZmlsdGVyLgotICAgICAg
ICAgICAgcmVmZXJlbmNlRmlsdGVyLT5zZXRDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShhZG9w
dFB0cihuZXcgQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoY2FjaGVkRG9jdW1lbnQpKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLmNsZWFyKCk7
Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLVN0eWxlU2hhZGVyKiBTdHls
ZVJlc29sdmVyOjpzdHlsZVNoYWRlcihDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
LT5pc1dlYktpdENTU1NoYWRlclZhbHVlKCkpCi0gICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRp
bmdTdHlsZVNoYWRlckZyb21WYWx1ZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NTaGFkZXJWYWx1ZSo+
KHZhbHVlKSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVN0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVy
OjpjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShXZWJLaXRDU1NTaGFkZXJWYWx1
ZSogdmFsdWUpCi17Ci0gICAgU3R5bGVTaGFkZXIqIHNoYWRlciA9IHZhbHVlLT5jYWNoZWRPclBl
bmRpbmdTaGFkZXIoKTsKLSAgICBpZiAoc2hhZGVyICYmIHNoYWRlci0+aXNQZW5kaW5nU2hhZGVy
KCkpCi0gICAgICAgIG1fc3RhdGUuc2V0SGFzUGVuZGluZ1NoYWRlcnModHJ1ZSk7Ci0gICAgcmV0
dXJuIHNoYWRlcjsKLX0KLQotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQcm9ncmFtPiBTdHlsZVJl
c29sdmVyOjpsb29rdXBDdXN0b21GaWx0ZXJQcm9ncmFtKFdlYktpdENTU1NoYWRlclZhbHVlKiB2
ZXJ0ZXhTaGFkZXIsIFdlYktpdENTU1NoYWRlclZhbHVlKiBmcmFnbWVudFNoYWRlciwgCi0gICAg
Q3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGUsIGNvbnN0IEN1c3RvbUZpbHRlclBy
b2dyYW1NaXhTZXR0aW5ncyYgbWl4U2V0dGluZ3MsIEN1c3RvbUZpbHRlck1lc2hUeXBlIG1lc2hU
eXBlKQotewotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9
IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLSAgICBLVVJMIHZl
cnRleFNoYWRlclVSTCA9IHZlcnRleFNoYWRlciA/IHZlcnRleFNoYWRlci0+Y29tcGxldGVVUkwo
Y2FjaGVkUmVzb3VyY2VMb2FkZXIpIDogS1VSTCgpOwotICAgIEtVUkwgZnJhZ21lbnRTaGFkZXJV
UkwgPSBmcmFnbWVudFNoYWRlciA/IGZyYWdtZW50U2hhZGVyLT5jb21wbGV0ZVVSTChjYWNoZWRS
ZXNvdXJjZUxvYWRlcikgOiBLVVJMKCk7Ci0gICAgUmVmUHRyPFN0eWxlQ3VzdG9tRmlsdGVyUHJv
Z3JhbT4gcHJvZ3JhbTsKLSAgICBpZiAobV9jdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUpCi0gICAg
ICAgIHByb2dyYW0gPSBtX2N1c3RvbUZpbHRlclByb2dyYW1DYWNoZS0+bG9va3VwKEN1c3RvbUZp
bHRlclByb2dyYW1JbmZvKHZlcnRleFNoYWRlclVSTCwgZnJhZ21lbnRTaGFkZXJVUkwsIHByb2dy
YW1UeXBlLCBtaXhTZXR0aW5ncywgbWVzaFR5cGUpKTsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAg
ICAgICAgLy8gQ3JlYXRlIGEgbmV3IFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbSB0aGF0IHdpbGwg
YmUgcmVzb2x2ZWQgZHVyaW5nIHRoZSBsb2FkUGVuZGluZ1NoYWRlcnMgYW5kIGFkZGVkIHRvIHRo
ZSBjYWNoZS4KLSAgICAgICAgcHJvZ3JhbSA9IFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3Jl
YXRlKHZlcnRleFNoYWRlclVSTCwgdmVydGV4U2hhZGVyID8gc3R5bGVTaGFkZXIodmVydGV4U2hh
ZGVyKSA6IDAsIAotICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXJVUkwsIGZyYWdtZW50U2hhZGVy
ID8gc3R5bGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpIDogMCwgcHJvZ3JhbVR5cGUsIG1peFNldHRp
bmdzLCBtZXNoVHlwZSk7Ci0gICAgfQotICAgIHJldHVybiBwcm9ncmFtLnJlbGVhc2UoKTsKLX0K
LQotdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NoYWRlcnMoKQotewotICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBjaGVjayB0aGF0IHN0eWxlIGlzIG5vbi1udWxsLiBU
aGlzIGlzIGEgc3BlY3VsYXRpdmUgZml4IGZvcjoKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3NjY1Ci0gICAgaWYgKCFtX3N0YXRlLmhhc1BlbmRpbmdT
aGFkZXJzKCkgfHwgIW1fc3RhdGUuc3R5bGUoKSB8fCAhbV9zdGF0ZS5zdHlsZSgpLT5oYXNGaWx0
ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hl
ZFJlc291cmNlTG9hZGVyID0gbV9zdGF0ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJh
dGlvbnMgPSBtX3N0YXRlLnN0eWxlKCktPm11dGFibGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbHRlck9wZXJhdGlvbnMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZmlsdGVyT3BlcmF0aW9uID0gZmls
dGVyT3BlcmF0aW9ucy5hdChpKTsKLSAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi0+Z2V0T3Bl
cmF0aW9uVHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NKSB7Ci0gICAgICAgICAgICBD
dXN0b21GaWx0ZXJPcGVyYXRpb24qIGN1c3RvbUZpbHRlciA9IHN0YXRpY19jYXN0PEN1c3RvbUZp
bHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbi5nZXQoKSk7Ci0gICAgICAgICAgICBBU1NF
UlQoY3VzdG9tRmlsdGVyLT5wcm9ncmFtKCkpOwotICAgICAgICAgICAgU3R5bGVDdXN0b21GaWx0
ZXJQcm9ncmFtKiBwcm9ncmFtID0gc3RhdGljX2Nhc3Q8U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFt
Kj4oY3VzdG9tRmlsdGVyLT5wcm9ncmFtKCkpOwotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRo
ZSBTdHlsZVBlbmRpbmdTaGFkZXJzIGNvdWxkIGJlIGFscmVhZHkgcmVzb2x2ZWQgdG8gU3R5bGVD
YWNoZWRTaGFkZXJzLiBUaGF0J3MgYmVjYXVzZSB0aGUgcnVsZSB3YXMgbWF0Y2hlZCBiZWZvcmUu
Ci0gICAgICAgICAgICAvLyBIb3dldmVyLCB0aGUgU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtIHRo
YXQgd2FzIGluaXRpYWxseSBjcmVhdGVkIGNvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhl
IGNhY2hlIGluIHRoZSBtZWFud2hpbGUsCi0gICAgICAgICAgICAvLyBtZWFuaW5nIHRoYXQgd2Ug
Z2V0IGEgbmV3IFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbSBoZXJlIHRoYXQgaXMgbm90IHlldCBp
biB0aGUgY2FjaGUsIGJ1dCBhbHJlYWR5IGhhcyBsb2FkZWQgU3R5bGVTaGFkZXJzLgotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtLT5oYXNQZW5kaW5nU2hhZGVycygpICYmIHByb2dyYW0tPmluQ2Fj
aGUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghbV9jdXN0
b21GaWx0ZXJQcm9ncmFtQ2FjaGUpCi0gICAgICAgICAgICAgICAgbV9jdXN0b21GaWx0ZXJQcm9n
cmFtQ2FjaGUgPSBhZG9wdFB0cihuZXcgU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUoKSk7
Ci0gICAgICAgICAgICBSZWZQdHI8U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtPiBzdHlsZVByb2dy
YW0gPSBtX2N1c3RvbUZpbHRlclByb2dyYW1DYWNoZS0+bG9va3VwKHByb2dyYW0pOwotICAgICAg
ICAgICAgaWYgKHN0eWxlUHJvZ3JhbS5nZXQoKSkKLSAgICAgICAgICAgICAgICBjdXN0b21GaWx0
ZXItPnNldFByb2dyYW0oc3R5bGVQcm9ncmFtLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICBpZiAocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkgJiYgcHJvZ3Jh
bS0+dmVydGV4U2hhZGVyKCktPmlzUGVuZGluZ1NoYWRlcigpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFdlYktpdENTU1NoYWRlclZhbHVlKiBzaGFkZXJWYWx1ZSA9IHN0YXRpY19jYXN0PFN0eWxl
UGVuZGluZ1NoYWRlcio+KHByb2dyYW0tPnZlcnRleFNoYWRlcigpKS0+Y3NzU2hhZGVyVmFsdWUo
KTsKLSAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+c2V0VmVydGV4U2hhZGVyKHNoYWRlclZh
bHVlLT5jYWNoZWRTaGFkZXIoY2FjaGVkUmVzb3VyY2VMb2FkZXIpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkgJiYgcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS0+aXNQZW5kaW5nU2hhZGVyKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgV2ViS2l0Q1NTU2hhZGVyVmFsdWUqIHNoYWRlclZhbHVlID0gc3RhdGljX2Nhc3Q8
U3R5bGVQZW5kaW5nU2hhZGVyKj4ocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKSktPmNzc1NoYWRl
clZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnNldEZyYWdtZW50U2hhZGVy
KHNoYWRlclZhbHVlLT5jYWNoZWRTaGFkZXIoY2FjaGVkUmVzb3VyY2VMb2FkZXIpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUt
PmFkZChwcm9ncmFtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBtX3N0
YXRlLnNldEhhc1BlbmRpbmdTaGFkZXJzKGZhbHNlKTsKLX0KLQotc3RhdGljIGJvb2wgc29ydFBh
cmFtZXRlcnNCeU5hbWVDb21wYXJhdG9yKGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0
ZXI+JiBhLCBjb25zdCBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiYgYikKLXsKLSAgICBy
ZXR1cm4gY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGEtPm5hbWUoKSwgYi0+bmFtZSgpKTsKLX0K
LQotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNl
Q3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxp
c3QqIHZhbHVlcywgYm9vbCBpc0FycmF5KQotewotICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJBcnJh
eVBhcmFtZXRlcj4gYXJyYXlQYXJhbWV0ZXIgPSBDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcjo6
Y3JlYXRlKG5hbWUsIGlzQXJyYXkgPyBDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcjo6QVJSQVkg
OiBDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcjo6TUFUUklYKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwLCBsZW5ndGggPSB2YWx1ZXMtPmxlbmd0aCgpOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gdmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkp
OwotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGFycmF5UGFyYW1ldGVyLT5hZGRWYWx1
ZShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBh
cnJheVBhcmFtZXRlci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFy
YW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlckNvbG9yUGFyYW1ldGVyKGNv
bnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMpCi17Ci0gICAgQVNTRVJUKHZh
bHVlcy0+bGVuZ3RoKCkpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFByaW1pdGl2ZVZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZXMtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soMCkpOwotICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJDb2xvclBhcmFtZXRlcj4g
Y29sb3JQYXJhbWV0ZXIgPSBDdXN0b21GaWx0ZXJDb2xvclBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUp
OwotICAgIGNvbG9yUGFyYW1ldGVyLT5zZXRDb2xvcihDb2xvcihmaXJzdFByaW1pdGl2ZVZhbHVl
LT5nZXRSR0JBMzJWYWx1ZSgpKSk7Ci0gICAgcmV0dXJuIGNvbG9yUGFyYW1ldGVyLnJlbGVhc2Uo
KTsKLX0KLQotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6
OnBhcnNlQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NT
VmFsdWVMaXN0KiB2YWx1ZXMpCi17Ci0gICAgUmVmUHRyPEN1c3RvbUZpbHRlck51bWJlclBhcmFt
ZXRlcj4gbnVtYmVyUGFyYW1ldGVyID0gQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyOjpjcmVh
dGUobmFtZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy0+bGVuZ3RoKCk7
ICsraSkgewotICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSB2YWx1ZXMtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soaSk7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgbnVtYmVyUGFyYW1l
dGVyLT5hZGRWYWx1ZShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSk7Ci0gICAgfQot
ICAgIHJldHVybiBudW1iZXJQYXJhbWV0ZXIucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPEN1
c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFu
c2Zvcm1QYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqIHZhbHVlcykK
LXsKLSAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyPiB0cmFuc2Zvcm1Q
YXJhbWV0ZXIgPSBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI6OmNyZWF0ZShuYW1lKTsK
LSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgdHJhbnNmb3Jtc0ZvclZh
bHVlKG1fc3RhdGUuc3R5bGUoKSwgbV9zdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHZhbHVlcywg
b3BlcmF0aW9ucyk7Ci0gICAgdHJhbnNmb3JtUGFyYW1ldGVyLT5zZXRPcGVyYXRpb25zKG9wZXJh
dGlvbnMpOwotICAgIHJldHVybiB0cmFuc2Zvcm1QYXJhbWV0ZXIucmVsZWFzZSgpOwotfQotCi1Q
YXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0
b21GaWx0ZXJQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZSogcGFyYW1ldGVy
VmFsdWUpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBvdGhlciBwYXJhbWV0ZXJzIHR5cGVz
IHBhcnNpbmcuCi0gICAgLy8gdGV4dHVyZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MTQ0MgotICAgIC8vIG1hdDIsIG1hdDMsIG1hdDQ6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTQ0NAotICAgIC8vIE51bWJlciBwYXJhbWV0ZXJz
IGFyZSB3cmFwcGVkIGluc2lkZSBhIENTU1ZhbHVlTGlzdCBhbmQgYWxsCi0gICAgLy8gdGhlIG90
aGVyIGZ1bmN0aW9ucyB2YWx1ZXMgaW5oZXJpdCBmcm9tIENTU1ZhbHVlTGlzdC4KLSAgICBpZiAo
IXBhcmFtZXRlclZhbHVlLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IENTU1ZhbHVlTGlzdCogdmFsdWVzID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4ocGFyYW1l
dGVyVmFsdWUpOwotICAgIGlmICghdmFsdWVzLT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBpZiAocGFyYW1ldGVyVmFsdWUtPmlzV2ViS2l0Q1NTQXJyYXlGdW5jdGlvblZhbHVl
KCkpCi0gICAgICAgIHJldHVybiBwYXJzZUN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKG5hbWUs
IHZhbHVlcywgdHJ1ZSk7Ci0KLSAgICBpZiAocGFyYW1ldGVyVmFsdWUtPmlzV2ViS2l0Q1NTTWF0
RnVuY3Rpb25WYWx1ZSgpKQotICAgICAgICByZXR1cm4gcGFyc2VDdXN0b21GaWx0ZXJBcnJheVBh
cmFtZXRlcihuYW1lLCB2YWx1ZXMsIGZhbHNlKTsKLQotICAgIC8vIElmIHRoZSBmaXJzdCB2YWx1
ZSBvZiB0aGUgbGlzdCBpcyBhIHRyYW5zZm9ybSBmdW5jdGlvbiwKLSAgICAvLyB0aGVuIHdlIGNv
dWxkIHNhZmVseSBhc3N1bWUgdGhhdCBhbGwgdGhlIHJlbWFpbmluZyBpdGVtcwotICAgIC8vIGFy
ZSB0cmFuc2Zvcm1zLiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlciB3aWxsCi0g
ICAgLy8gcmV0dXJuIDAgaWYgdGhhdCBhc3N1bXB0aW9uIGlzIGluY29ycmVjdC4KLSAgICBpZiAo
dmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApLT5pc1dlYktpdENTU1RyYW5zZm9ybVZh
bHVlKCkpCi0gICAgICAgIHJldHVybiBwYXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRl
cihuYW1lLCB2YWx1ZXMpOwotCi0gICAgLy8gV2UgY2FuIG9ubHkgaGF2ZSBhcnJheXMgb2YgY29s
b3JzIG9yIG51bWJlcnMsIHNvIHVzZSB0aGUgZmlyc3QgdmFsdWUgdG8gY2hvb3NlIGJldHdlZW4g
dGhvc2UgdHdvLgotICAgIC8vIFdlIG5lZWQgdXAgdG8gNCB2YWx1ZXMgKGFsbCBib29sZWFucyBv
ciBhbGwgbnVtYmVycykuCi0gICAgaWYgKCF2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MCktPmlzUHJpbWl0aXZlVmFsdWUoKSB8fCB2YWx1ZXMtPmxlbmd0aCgpID4gNCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0UHJpbWl0aXZlVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlcy0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygwKSk7Ci0gICAgaWYgKGZpcnN0UHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5
cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKLSAgICAgICAgcmV0dXJuIHBh
cnNlQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyKG5hbWUsIHZhbHVlcyk7Ci0KLSAgICBpZiAo
Zmlyc3RQcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUkdCQ09MT1IpCi0gICAgICAgIHJldHVybiBwYXJzZUN1c3RvbUZpbHRlckNvbG9yUGFy
YW1ldGVyKG5hbWUsIHZhbHVlcyk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBTdHlsZVJl
c29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqIHBhcmFtZXRl
cnNWYWx1ZSwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVyTGlzdCkKLXsKLSAg
ICBIYXNoU2V0PFN0cmluZz4ga25vd25QYXJhbWV0ZXJOYW1lczsKLSAgICBDU1NWYWx1ZUxpc3RJ
dGVyYXRvciBwYXJhbWV0ZXJJdGVyYXRvcihwYXJhbWV0ZXJzVmFsdWUpOwotICAgIGZvciAoOyBw
YXJhbWV0ZXJJdGVyYXRvci5oYXNNb3JlKCk7IHBhcmFtZXRlckl0ZXJhdG9yLmFkdmFuY2UoKSkg
ewotICAgICAgICBpZiAoIXBhcmFtZXRlckl0ZXJhdG9yLnZhbHVlKCktPmlzVmFsdWVMaXN0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9y
IGl0ZXJhdG9yKHBhcmFtZXRlckl0ZXJhdG9yLnZhbHVlKCkpOwotICAgICAgICBpZiAoIWl0ZXJh
dG9yLmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPihpdGVyYXRvci52YWx1ZSgpKTsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5wcmltaXRpdmVUeXBlKCkgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgbmFtZSA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAvLyBEbyBub3QgYWxs
b3cgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcy4KLSAgICAgICAgaWYgKGtub3duUGFyYW1ldGVy
TmFtZXMuY29udGFpbnMobmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGtub3duUGFyYW1ldGVyTmFtZXMuYWRkKG5hbWUpOwotICAgICAgICAKLSAgICAgICAgaXRlcmF0
b3IuYWR2YW5jZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFpdGVyYXRvci5oYXNNb3JlKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8Q3Vz
dG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJhbWV0ZXIgPSBwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRl
cihuYW1lLCBpdGVyYXRvci52YWx1ZSgpKTsKLSAgICAgICAgaWYgKCFwYXJhbWV0ZXIpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHBhcmFtZXRlckxpc3QuYXBwZW5kKHBhcmFt
ZXRlci5yZWxlYXNlKCkpOwotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIHN1cmUgd2Ugc29ydCB0
aGUgcGFyYW1ldGVycyBiZWZvcmUgcGFzc2luZyB0aGVtIGRvd24gdG8gdGhlIEN1c3RvbUZpbHRl
ck9wZXJhdGlvbi4KLSAgICBzdGQ6OnNvcnQocGFyYW1ldGVyTGlzdC5iZWdpbigpLCBwYXJhbWV0
ZXJMaXN0LmVuZCgpLCBzb3J0UGFyYW1ldGVyc0J5TmFtZUNvbXBhcmF0b3IpOwotICAgIAotICAg
IHJldHVybiB0cnVlOwotfQotCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5
bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aEF0UnVsZVJlZmVyZW5j
ZVN5bnRheChXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUpCi17Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudCBzdHlsZSByZXNvbHV0aW9uIGZvciB0aGUgY3VzdG9tIGZpbHRlciBhdC1y
dWxlIHJlZmVyZW5jZSBzeW50YXguCi0gICAgVU5VU0VEX1BBUkFNKGZpbHRlclZhbHVlKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxl
UmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGhJbmxpbmVTeW50YXgoV2Vi
S2l0Q1NTRmlsdGVyVmFsdWUqIGZpbHRlclZhbHVlKQotewotICAgIENTU1ZhbHVlKiBzaGFkZXJz
VmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKLSAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzaGFkZXJzVmFsdWUtPmlzVmFsdWVMaXN0KCkp
OwotICAgIENTU1ZhbHVlTGlzdCogc2hhZGVyc0xpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3QqPihzaGFkZXJzVmFsdWUpOwotCi0gICAgdW5zaWduZWQgc2hhZGVyc0xpc3RMZW5ndGggPSBz
aGFkZXJzTGlzdC0+bGVuZ3RoKCk7Ci0gICAgQVNTRVJUKHNoYWRlcnNMaXN0TGVuZ3RoKTsKLQot
ICAgIFdlYktpdENTU1NoYWRlclZhbHVlKiB2ZXJ0ZXhTaGFkZXIgPSB0b1dlYktpdENTU1NoYWRl
clZhbHVlKHNoYWRlcnNMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKLSAgICBXZWJL
aXRDU1NTaGFkZXJWYWx1ZSogZnJhZ21lbnRTaGFkZXIgPSAwOwotICAgIEN1c3RvbUZpbHRlclBy
b2dyYW1UeXBlIHByb2dyYW1UeXBlID0gUFJPR1JBTV9UWVBFX0JMRU5EU19FTEVNRU5UX1RFWFRV
UkU7Ci0gICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbU1peFNldHRpbmdzIG1peFNldHRpbmdzOwotCi0g
ICAgaWYgKHNoYWRlcnNMaXN0TGVuZ3RoID4gMSkgewotICAgICAgICBDU1NWYWx1ZSogZnJhZ21l
bnRTaGFkZXJPck1peEZ1bmN0aW9uID0gc2hhZGVyc0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soMSk7Ci0gICAgICAgIGlmIChmcmFnbWVudFNoYWRlck9yTWl4RnVuY3Rpb24tPmlzV2ViS2l0
Q1NTTWl4RnVuY3Rpb25WYWx1ZSgpKSB7Ci0gICAgICAgICAgICBXZWJLaXRDU1NNaXhGdW5jdGlv
blZhbHVlKiBtaXhGdW5jdGlvbiA9IHN0YXRpY19jYXN0PFdlYktpdENTU01peEZ1bmN0aW9uVmFs
dWUqPihmcmFnbWVudFNoYWRlck9yTWl4RnVuY3Rpb24pOwotICAgICAgICAgICAgQ1NTVmFsdWVM
aXN0SXRlcmF0b3IgaXRlcmF0b3IobWl4RnVuY3Rpb24pOwotCi0gICAgICAgICAgICBBU1NFUlQo
bWl4RnVuY3Rpb24tPmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyID0gdG9X
ZWJLaXRDU1NTaGFkZXJWYWx1ZShpdGVyYXRvci52YWx1ZSgpKTsKLSAgICAgICAgICAgIGl0ZXJh
dG9yLmFkdmFuY2UoKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1peEZ1bmN0aW9uLT5sZW5ndGgo
KSA8PSAzKTsKLSAgICAgICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNNb3JlKCkpIHsKLSAgICAg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZhbHVlKCkpOwotICAgICAgICAgICAgICAg
IGlmIChDU1NQYXJzZXI6OmlzQmxlbmRNb2RlKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkp
KQotICAgICAgICAgICAgICAgICAgICBtaXhTZXR0aW5ncy5ibGVuZE1vZGUgPSAqcHJpbWl0aXZl
VmFsdWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoQ1NTUGFyc2VyOjppc0NvbXBvc2l0ZU9w
ZXJhdG9yKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpKQotICAgICAgICAgICAgICAgICAg
ICBtaXhTZXR0aW5ncy5jb21wb3NpdGVPcGVyYXRvciA9ICpwcmltaXRpdmVWYWx1ZTsKLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByb2dyYW1UeXBlID0gUFJPR1JBTV9UWVBFX05P
X0VMRU1FTlRfVEVYVFVSRTsKLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyID0gdG9XZWJLaXRD
U1NTaGFkZXJWYWx1ZShmcmFnbWVudFNoYWRlck9yTWl4RnVuY3Rpb24pOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgJiYgIWZyYWdtZW50U2hhZGVyKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICAKLSAgICB1bnNpZ25lZCBtZXNoUm93cyA9IDE7Ci0gICAgdW5zaWdu
ZWQgbWVzaENvbHVtbnMgPSAxOwotICAgIEN1c3RvbUZpbHRlck1lc2hUeXBlIG1lc2hUeXBlID0g
TWVzaFR5cGVBdHRhY2hlZDsKLSAgICAKLSAgICBDU1NWYWx1ZSogcGFyYW1ldGVyc1ZhbHVlID0g
MDsKLSAgICAKLSAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID4gMSkgewotICAgICAgICBD
U1NWYWx1ZUxpc3RJdGVyYXRvciBpdGVyYXRvcihmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjaygxKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgc2Vjb25kIHZhbHVlIG1pZ2h0
IGJlIHRoZSBtZXNoIGJveCBvciB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzOgotICAgICAgICAvLyBJ
ZiBpdCBzdGFydHMgd2l0aCBhIG51bWJlciBvciBhbnkgb2YgdGhlIG1lc2gtYm94IGlkZW50aWZp
ZXJzIGl0IGlzIAotICAgICAgICAvLyB0aGUgbWVzaC1ib3ggbGlzdCwgaWYgbm90IGl0IG1lYW5z
IGl0IGlzIHRoZSBwYXJhbWV0ZXJzIGxpc3QuCi0KLSAgICAgICAgaWYgKGl0ZXJhdG9yLmhhc01v
cmUoKSAmJiBpdGVyYXRvci5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiBvbmx5IG9uZSBpbnRlZ2VyIHZh
bHVlIGlzIHNwZWNpZmllZCwgaXQgd2lsbCBzZXQgYm90aAotICAgICAgICAgICAgICAgIC8vIHRo
ZSByb3dzIGFuZCB0aGUgY29sdW1ucy4KLSAgICAgICAgICAgICAgICBtZXNoQ29sdW1ucyA9IG1l
c2hSb3dzID0gcHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAg
aXRlcmF0b3IuYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8v
IFRyeSB0byBtYXRjaCBhbm90aGVyIG51bWJlciBmb3IgdGhlIHJvd3MuCi0gICAgICAgICAgICAg
ICAgaWYgKGl0ZXJhdG9yLmhhc01vcmUoKSAmJiBpdGVyYXRvci5pc1ByaW1pdGl2ZVZhbHVlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVyYXRvci52YWx1ZSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtZXNoUm93cyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1
ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXRlcmF0b3IuaGFzTW9yZSgpICYmIGl0ZXJhdG9y
LmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVyYXRvci52
YWx1ZSgpKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09
IENTU1ZhbHVlRGV0YWNoZWQpIHsKLSAgICAgICAgICAgICAgICBtZXNoVHlwZSA9IE1lc2hUeXBl
RGV0YWNoZWQ7Ci0gICAgICAgICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWl0ZXJhdG9yLmluZGV4KCkp
IHsKLSAgICAgICAgICAgIC8vIElmIG5vIHZhbHVlIHdhcyBjb25zdW1lZCBmcm9tIHRoZSBtZXNo
IHZhbHVlLCB0aGVuIGl0IGlzIGp1c3QgYSBwYXJhbWV0ZXIgbGlzdCwgbWVhbmluZyB0aGF0IHdl
IGVuZCB1cAotICAgICAgICAgICAgLy8gaGF2aW5nIGp1c3QgdHdvIENTU0xpc3RWYWx1ZXM6IGxp
c3Qgb2Ygc2hhZGVycyBhbmQgbGlzdCBvZiBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgQVNTRVJU
KGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9PSAyKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnNWYWx1
ZSA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPiAyICYmICFwYXJhbWV0
ZXJzVmFsdWUpCi0gICAgICAgIHBhcmFtZXRlcnNWYWx1ZSA9IGZpbHRlclZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDIpOwotICAgIAotICAgIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3Qg
cGFyYW1ldGVyTGlzdDsKLSAgICBpZiAocGFyYW1ldGVyc1ZhbHVlICYmICFwYXJzZUN1c3RvbUZp
bHRlclBhcmFtZXRlckxpc3QocGFyYW1ldGVyc1ZhbHVlLCBwYXJhbWV0ZXJMaXN0KSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9
IGxvb2t1cEN1c3RvbUZpbHRlclByb2dyYW0odmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlciwg
cHJvZ3JhbVR5cGUsIG1peFNldHRpbmdzLCBtZXNoVHlwZSk7Ci0gICAgcmV0dXJuIEN1c3RvbUZp
bHRlck9wZXJhdGlvbjo6Y3JlYXRlKHByb2dyYW0ucmVsZWFzZSgpLCBwYXJhbWV0ZXJMaXN0LCBt
ZXNoUm93cywgbWVzaENvbHVtbnMpOwotfQotCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJh
dGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdlYktpdENT
U0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSkKLXsKLSAgICBBU1NFUlQoZmlsdGVyVmFsdWUtPmxl
bmd0aCgpKTsKLSAgICBib29sIGlzQXRSdWxlUmVmZXJlbmNlU3ludGF4ID0gZmlsdGVyVmFsdWUt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCktPmlzUHJpbWl0aXZlVmFsdWUoKTsKLSAgICByZXR1
cm4gaXNBdFJ1bGVSZWZlcmVuY2VTeW50YXggPyBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25X
aXRoQXRSdWxlUmVmZXJlbmNlU3ludGF4KGZpbHRlclZhbHVlKSA6IGNyZWF0ZUN1c3RvbUZpbHRl
ck9wZXJhdGlvbldpdGhJbmxpbmVTeW50YXgoZmlsdGVyVmFsdWUpOwogfQotCi0jZW5kaWYKLQot
Ym9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZh
bHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9w
ZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCi17Ci0gICAgQVNTRVJUKG91dE9wZXJhdGlvbnMuaXNF
bXB0eSgpKTsKLSAgICAKLSAgICBpZiAoIWluVmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBpZiAoaW5WYWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4oaW5WYWx1ZSk7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICAKLSAgICBpZiAoIWluVmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdHlsZSA/IHN0eWxlLT5lZmZlY3RpdmVab29t
KCkgOiAxOwotICAgIEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBmb3IgKENTU1Zh
bHVlTGlzdEl0ZXJhdG9yIGkgPSBpblZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsK
LSAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKLSAgICAgICAgaWYgKCFj
dXJyVmFsdWUtPmlzV2ViS2l0Q1NTRmlsdGVyVmFsdWUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIFdlYktpdENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19j
YXN0PFdlYktpdENTU0ZpbHRlclZhbHVlKj4oaS52YWx1ZSgpKTsKLSAgICAgICAgRmlsdGVyT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBmaWx0ZXJPcGVyYXRpb25Gb3JU
eXBlKGZpbHRlclZhbHVlLT5vcGVyYXRpb25UeXBlKCkpOwotCi0jaWYgRU5BQkxFKENTU19TSEFE
RVJTKQotICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OlZBTElE
QVRFRF9DVVNUT00pIHsKLSAgICAgICAgICAgIC8vIFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJh
dGlvbiBpcyBub3Qgc3VwcG9zZWQgdG8gZW5kIHVwIGluIHRoZSBSZW5kZXJTdHlsZS4KLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG9wZXJhdGlvblR5cGUgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNU
T00pIHsKLSAgICAgICAgICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlv
biA9IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihmaWx0ZXJWYWx1ZSk7Ci0gICAgICAgICAg
ICBpZiAoIW9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRp
b24pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBp
ZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgewotI2lmIEVO
QUJMRShTVkcpCi0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpICE9IDEpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogYXJndW1lbnQg
PSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKLQotICAgICAgICAgICAg
aWYgKCFhcmd1bWVudC0+aXNXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUq
IHN2Z0RvY3VtZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVl
Kj4oYXJndW1lbnQpOwotICAgICAgICAgICAgS1VSTCB1cmwgPSBtX3N0YXRlLmRvY3VtZW50KCkt
PmNvbXBsZXRlVVJMKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpKTsKLQotICAgICAgICAgICAgUmVm
UHRyPFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0gUmVmZXJlbmNlRmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIHVybC5mcmFnbWVudElk
ZW50aWZpZXIoKSwgb3BlcmF0aW9uVHlwZSk7Ci0gICAgICAgICAgICBpZiAoU1ZHVVJJUmVmZXJl
bmNlOjppc0V4dGVybmFsVVJJUmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpLCBtX3N0
YXRlLmRvY3VtZW50KCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdmdEb2N1bWVudFZhbHVl
LT5sb2FkUmVxdWVzdGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUucGVuZGluZ1NW
R0RvY3VtZW50cygpLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOwotICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHN2Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0RvY3VtZW50
KCkpCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi0+c2V0Q2FjaGVkU1ZHRG9jdW1lbnRS
ZWZlcmVuY2UoYWRvcHRQdHIobmV3IENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKHN2Z0RvY3Vt
ZW50VmFsdWUtPmNhY2hlZFNWR0RvY3VtZW50KCkpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQob3BlcmF0aW9uKTsKLSNlbmRpZgot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDaGVjayB0aGF0
IGFsbCBwYXJhbWV0ZXJzIGFyZSBwcmltaXRpdmUgdmFsdWVzLCB3aXRoIHRoZQotICAgICAgICAv
LyBleGNlcHRpb24gb2YgZHJvcCBzaGFkb3cgd2hpY2ggaGFzIGEgU2hhZG93VmFsdWUgcGFyYW1l
dGVyLgotICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSAhPSBGaWx0ZXJPcGVyYXRpb246OkRST1Bf
U0hBRE9XKSB7Ci0gICAgICAgICAgICBib29sIGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9IGZhbHNl
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGZpbHRlclZhbHVlLT5sZW5n
dGgoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjayhqKS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICho
YXZlTm9uUHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RWYWx1ZSA9IGZpbHRlclZhbHVl
LT5sZW5ndGgoKSA/IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oZmlsdGVyVmFsdWUt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpIDogMDsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJW
YWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFs
dWU6OkdyYXlzY2FsZUZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6U2VwaWFGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTRmls
dGVyVmFsdWU6OlNhdHVyYXRlRmlsdGVyT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBkb3VibGUg
YW1vdW50ID0gMTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMSkg
ewotICAgICAgICAgICAgICAgIGFtb3VudCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPmlzUGVyY2VudGFnZSgpKQotICAgICAg
ICAgICAgICAgICAgICBhbW91bnQgLz0gMTAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbjo6Y3JlYXRlKGFtb3VudCwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVlUm90
YXRlRmlsdGVyT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBkb3VibGUgYW5nbGUgPSAwOwotICAg
ICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9PSAxKQotICAgICAgICAgICAgICAg
IGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKLQotICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b246OmNyZWF0ZShhbmdsZSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SW52ZXJ0RmlsdGVy
T3BlcmF0aW9uOgotICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmlnaHRuZXNz
RmlsdGVyT3BlcmF0aW9uOgotICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250
cmFzdEZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6
T3BhY2l0eUZpbHRlck9wZXJhdGlvbjogewotICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IChm
aWx0ZXJWYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmln
aHRuZXNzRmlsdGVyT3BlcmF0aW9uKSA/IDAgOiAxOwotICAgICAgICAgICAgaWYgKGZpbHRlclZh
bHVlLT5sZW5ndGgoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RWYWx1
ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQ
ZXJjZW50YWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIGFtb3VudCAvPSAxMDA7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW1vdW50LCBvcGVyYXRp
b25UeXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdl
YktpdENTU0ZpbHRlclZhbHVlOjpCbHVyRmlsdGVyT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBM
ZW5ndGggc3RkRGV2aWF0aW9uID0gTGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgIGlmIChm
aWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPj0gMSkKLSAgICAgICAgICAgICAgICBzdGREZXZpYXRpb24g
PSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29t
RmFjdG9yKTsKLSAgICAgICAgICAgIGlmIChzdGREZXZpYXRpb24uaXNVbmRlZmluZWQoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3Bl
cmF0aW9ucygpLmFwcGVuZChCbHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoc3RkRGV2aWF0aW9u
LCBvcGVyYXRpb25UeXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOiB7
Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpICE9IDEpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBDU1NWYWx1ZSogY3NzVmFsdWUgPSBm
aWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKLSAgICAgICAgICAgIGlmICgh
Y3NzVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAgICAgU2hhZG93VmFsdWUqIGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+
KGNzc1ZhbHVlKTsKLSAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0tPngtPmNvbXB1
dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9v
dFN0eWxlLCB6b29tRmFjdG9yKSk7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIg
PyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZh
Y3RvcikgOiAwOwotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBpZiAoaXRl
bS0+Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1
ZShpdGVtLT5jb2xvci5nZXQoKSk7Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9u
cygpLmFwcGVuZChEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobG9jYXRpb24sIGJs
dXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50LCBvcGVyYXRp
b25UeXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdl
YktpdENTU0ZpbHRlclZhbHVlOjpVbmtub3duRmlsdGVyT3BlcmF0aW9uOgotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG91dE9wZXJhdGlvbnMgPSBvcGVyYXRpb25zOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi0jZW5kaWYKLQotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBT
dHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5n
SW1hZ2UpCi17Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVy
ID0gbV9zdGF0ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwotCi0gICAgaWYg
KHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgIENTU0ltYWdlVmFsdWUq
IGltYWdlVmFsdWUgPSBwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlVmFsdWUoKTsKLSAgICAgICAgcmV0
dXJuIGltYWdlVmFsdWUtPmNhY2hlZEltYWdlKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKLSAgICB9
Ci0KLSAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKLSAg
ICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogaW1hZ2VHZW5lcmF0b3JWYWx1ZSA9IHBlbmRp
bmdJbWFnZS0+Y3NzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpOwotICAgICAgICBpbWFnZUdlbmVyYXRv
clZhbHVlLT5sb2FkU3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKLSAgICAgICAgcmV0
dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShpbWFnZUdlbmVyYXRvclZhbHVlKTsKLSAg
ICB9Ci0KLSAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NDdXJzb3JJbWFnZVZhbHVlKCkpIHsKLSAg
ICAgICAgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogY3Vyc29ySW1hZ2VWYWx1ZSA9IHBlbmRpbmdJbWFn
ZS0+Y3NzQ3Vyc29ySW1hZ2VWYWx1ZSgpOwotICAgICAgICByZXR1cm4gY3Vyc29ySW1hZ2VWYWx1
ZS0+Y2FjaGVkSW1hZ2UoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwotICAgIH0KLQotI2lmIEVOQUJM
RShDU1NfSU1BR0VfU0VUKQotICAgIGlmIChwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlU2V0VmFsdWUo
KSkgewotICAgICAgICBDU1NJbWFnZVNldFZhbHVlKiBpbWFnZVNldFZhbHVlID0gcGVuZGluZ0lt
YWdlLT5jc3NJbWFnZVNldFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBpbWFnZVNldFZhbHVlLT5j
YWNoZWRJbWFnZVNldChjYWNoZWRSZXNvdXJjZUxvYWRlcik7Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICByZXR1cm4gMDsKLX0KLQotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi12b2lkIFN0eWxlUmVz
b2x2ZXI6OmxvYWRQZW5kaW5nU2hhcGVJbWFnZShTaGFwZVZhbHVlKiBzaGFwZVZhbHVlKQotewot
ICAgIGlmICghc2hhcGVWYWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3R5bGVJbWFnZSog
aW1hZ2UgPSBzaGFwZVZhbHVlLT5pbWFnZSgpOwotICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5p
c1BlbmRpbmdJbWFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHlsZVBlbmRpbmdJbWFn
ZSogcGVuZGluZ0ltYWdlID0gc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSk7
Ci0gICAgQ1NTSW1hZ2VWYWx1ZSogY3NzSW1hZ2VWYWx1ZSA9ICBwZW5kaW5nSW1hZ2UtPmNzc0lt
YWdlVmFsdWUoKTsKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIgPSBtX3N0YXRlLmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0KLSAgICBS
ZXNvdXJjZUxvYWRlck9wdGlvbnMgb3B0aW9ucyA9IENhY2hlZFJlc291cmNlTG9hZGVyOjpkZWZh
dWx0Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCk7Ci0gICAgb3B0aW9ucy5yZXF1ZXN0T3JpZ2luUG9s
aWN5ID0gUmVzdHJpY3RUb1NhbWVPcmlnaW47Ci0KLSAgICBzaGFwZVZhbHVlLT5zZXRJbWFnZShj
c3NJbWFnZVZhbHVlLT5jYWNoZWRJbWFnZShjYWNoZWRSZXNvdXJjZUxvYWRlciwgb3B0aW9ucykp
OwotfQotI2VuZGlmCi0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQot
ewotICAgIGlmIChtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVy
YXRvcjo6S2V5cyBlbmQgPSBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5lbmQoKS5r
ZXlzKCk7Ci0gICAgZm9yIChQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6
OktleXMgaXQgPSBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5iZWdpbigpLmtleXMo
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIENTU1Byb3BlcnR5SUQgY3VycmVudFByb3Bl
cnR5ID0gKml0OwotCi0gICAgICAgIHN3aXRjaCAoY3VycmVudFByb3BlcnR5KSB7Ci0gICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoRmls
bExheWVyKiBiYWNrZ3JvdW5kTGF5ZXIgPSBtX3N0YXRlLnN0eWxlKCktPmFjY2Vzc0JhY2tncm91
bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5k
TGF5ZXItPm5leHQoKSkgewotICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXItPmlt
YWdlKCkgJiYgYmFja2dyb3VuZExheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAg
ICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1h
Z2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihiYWNrZ3JvdW5kTGF5ZXItPmltYWdl
KCkpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Q29udGVudDogewotICAgICAgICAgICAgZm9yIChDb250ZW50
RGF0YSogY29udGVudERhdGEgPSBjb25zdF9jYXN0PENvbnRlbnREYXRhKj4obV9zdGF0ZS5zdHls
ZSgpLT5jb250ZW50RGF0YSgpKTsgY29udGVudERhdGE7IGNvbnRlbnREYXRhID0gY29udGVudERh
dGEtPm5leHQoKSkgewotICAgICAgICAgICAgICAgIGlmIChjb250ZW50RGF0YS0+aXNJbWFnZSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8
SW1hZ2VDb250ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+aW1hZ2UoKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0
YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChsb2FkZWRJbWFnZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5zZXRJbWFnZShsb2FkZWRJ
bWFnZS5yZWxlYXNlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjogewotICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1
cnNvckxpc3QgPSBtX3N0YXRlLnN0eWxlKCktPmN1cnNvcnMoKSkgewotICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3Vyc29yTGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICAgICAgQ3Vyc29yRGF0YSYgY3VycmVudEN1cnNvciA9IGN1cnNvckxpc3QtPmF0
KGkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSogaW1hZ2UgPSBjdXJyZW50
Q3Vyc29yLmltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q3Vyc29y
LnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2Uq
PihpbWFnZSkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZTogewotICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5
bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdl
KCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5z
ZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGlu
Z0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdl
U291cmNlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNv
dXJjZSgpICYmIG1fc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5n
SW1hZ2UoKSkKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNldEJvcmRlckltYWdl
U291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPiht
X3N0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCkpKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDog
ewotICAgICAgICAgICAgaWYgKFN0eWxlUmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1fc3RhdGUu
c3R5bGUoKS0+Ym94UmVmbGVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgTmluZVBpZWNl
SW1hZ2UmIG1hc2tJbWFnZSA9IHJlZmxlY3Rpb24tPm1hc2soKTsKLSAgICAgICAgICAgICAgICBp
ZiAobWFza0ltYWdlLmltYWdlKCkgJiYgbWFza0ltYWdlLmltYWdlKCktPmlzUGVuZGluZ0ltYWdl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdl
ID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tJ
bWFnZS5pbWFnZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2so
TmluZVBpZWNlSW1hZ2UobG9hZGVkSW1hZ2UucmVsZWFzZSgpLCBtYXNrSW1hZ2UuaW1hZ2VTbGlj
ZXMoKSwgbWFza0ltYWdlLmZpbGwoKSwgbWFza0ltYWdlLmJvcmRlclNsaWNlcygpLCBtYXNrSW1h
Z2Uub3V0c2V0KCksIG1hc2tJbWFnZS5ob3Jpem9udGFsUnVsZSgpLCBtYXNrSW1hZ2UudmVydGlj
YWxSdWxlKCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0Jv
eEltYWdlU291cmNlOiB7Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94
SW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5p
c1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0TWFz
a0JveEltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5n
SW1hZ2UqPihtX3N0YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tJbWFnZTogewotICAgICAgICAgICAgZm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3Rh
dGUuc3R5bGUoKS0+YWNjZXNzTWFza0xheWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9IG1h
c2tMYXllci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1hc2tMYXllci0+aW1hZ2Uo
KSAmJiBtYXNrTGF5ZXItPmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAg
ICAgICAgIG1hc2tMYXllci0+c2V0SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxT
dHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tMYXllci0+aW1hZ2UoKSkpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0g
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZUluc2lkZToKLSAgICAgICAgICAgIGxv
YWRQZW5kaW5nU2hhcGVJbWFnZShtX3N0YXRlLnN0eWxlKCktPnNoYXBlSW5zaWRlKCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZU91dHNp
ZGU6Ci0gICAgICAgICAgICBsb2FkUGVuZGluZ1NoYXBlSW1hZ2UobV9zdGF0ZS5zdHlsZSgpLT5z
aGFwZU91dHNpZGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5jbGVhcigpOwotfQotCi0j
aWZuZGVmIE5ERUJVRwotc3RhdGljIGJvb2wgaW5Mb2FkUGVuZGluZ1Jlc291cmNlcyA9IGZhbHNl
OwotI2VuZGlmCi0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKQot
ewotICAgIC8vIFdlJ3ZlIHNlZW4gY3Jhc2hlcyBpbiBhbGwgdGhyZWUgb2YgdGhlIGZ1bmN0aW9u
cyBiZWxvdy4gU29tZSBvZiB0aGVtCi0gICAgLy8gaW5kaWNhdGUgdGhhdCBzdHlsZSgpIGlzIE5V
TEwuIFRoaXMgTlVMTCBjaGVjayB3aWxsIGN1dCBkb3duIG9uIHRvdGFsCi0gICAgLy8gY3Jhc2hl
cywgd2hpbGUgdGhlIEFTU0VSVCB3aWxsIGhlbHAgdXMgZmluZCB0aGUgY2F1c2UgaW4gZGVidWcg
YnVpbGRzLgotICAgIEFTU0VSVChzdHlsZSgpKTsKLSAgICBpZiAoIXN0eWxlKCkpCi0gICAgICAg
IHJldHVybjsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAvLyBSZS1lbnRlcmluZyB0aGlzIGZ1bmN0
aW9uIHdpbGwgcHJvYmFibHkgbWVhbiB0cm91YmxlLiBDYXRjaCBpdCBpbiBkZWJ1ZyBidWlsZHMu
Ci0gICAgQVNTRVJUKCFpbkxvYWRQZW5kaW5nUmVzb3VyY2VzKTsKLSAgICBpbkxvYWRQZW5kaW5n
UmVzb3VyY2VzID0gdHJ1ZTsKLSNlbmRpZgotCi0gICAgLy8gU3RhcnQgbG9hZGluZyBpbWFnZXMg
cmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nSW1hZ2VzKCk7Ci0KLSNp
ZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgc2hhZGVycyBy
ZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdTaGFkZXJzKCk7Ci0jZW5k
aWYKLSAgICAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCi0gICAgLy8g
U3RhcnQgbG9hZGluZyB0aGUgU1ZHIERvY3VtZW50cyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUu
Ci0gICAgbG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoKTsKLSNlbmRpZgotCi0jaWZuZGVmIE5ERUJV
RwotICAgIGluTG9hZFBlbmRpbmdSZXNvdXJjZXMgPSBmYWxzZTsKLSNlbmRpZgotfQotCi1pbmxp
bmUgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXM6Ok1hdGNoZWRQcm9wZXJ0aWVzKCkK
LSAgICA6IHBvc3NpYmx5UGFkZGVkTWVtYmVyKDApCi17CiB9Ci0KLWlubGluZSBTdHlsZVJlc29s
dmVyOjpNYXRjaGVkUHJvcGVydGllczo6fk1hdGNoZWRQcm9wZXJ0aWVzKCkKLXsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVGb250
U2l6ZUZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
Rm9udFNpemVGdW5jdGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlRm9udFNpemVGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBA
CisgICAgLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgU3R5bGVGb250U2l6ZUZ1bmN0aW9uc19oCisjZGVmaW5lIFN0eWxlRm9udFNpemVGdW5jdGlv
bnNfaAorCisjaW5jbHVkZSAiRm9udE9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTm9uQ0pLR2x5
cGhPcmllbnRhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBSZW5kZXJTdHlsZTsKK2NsYXNz
IFNldHRpbmdzOworCituYW1lc3BhY2UgU3R5bGUgeworCitmbG9hdCBjb21wdXRlZEZvbnRTaXpl
RnJvbVNwZWNpZmllZFNpemUoZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCBpc0Fic29sdXRlU2l6
ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMsIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgRG9jdW1l
bnQqKTsKK2Zsb2F0IGNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZUZvclNWR0lubGlu
ZVRleHQoZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgem9v
bUZhY3RvciwgY29uc3QgRG9jdW1lbnQqKTsKKworLy8gR2l2ZW4gYSBDU1Mga2V5d29yZCBpZCBp
biB0aGUgcmFuZ2UgKENTU1ZhbHVlWHhTbWFsbCB0byBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlKSwg
dGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybgorLy8gdGhlIGNvcnJlY3QgZm9udCBzaXplIHNjYWxl
ZCByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGRlZmF1bHQgKG1lZGl1bSkuCitmbG9hdCBmb250U2l6
ZUZvcktleXdvcmQodW5zaWduZWQga2V5d29yZElELCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVs
dFNpemUsIGNvbnN0IERvY3VtZW50Kik7CisKKy8vIEdpdmVuIGEgZm9udCBzaXplIGluIHBpeGVs
LCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGxlZ2FjeSBmb250IHNpemUgYmV0d2VlbiAxIGFu
ZCA3LgoraW50IGxlZ2FjeUZvbnRTaXplRm9yUGl4ZWxTaXplKGludCBwaXhlbEZvbnRTaXplLCBi
b29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUsIGNvbnN0IERvY3VtZW50Kik7CisKK30KK30K
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZl
Rm9yRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisg
KiAgICAgICAgICAgKEMpIDIwMDQtMjAwNSBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJl
d29sZi5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTmljaG9sYXMgU2hhbmtzICh3
ZWJraXRAbmlja3NoYW5rcy5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFw
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQor
ICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlRm9yRG9jdW1lbnQuaCIKKworI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKKyNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIkxvY2FsZVRv
U2NyaXB0TWFwcGluZy5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNldHRpbmdz
LmgiCisjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgU3R5bGUgewor
CitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiByZXNvbHZlRm9yRG9jdW1lbnQoY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50KQoreworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwor
CisgICAgLy8gSFRNTDUgc3RhdGVzIHRoYXQgc2VhbWxlc3MgaWZyYW1lcyBzaG91bGQgcmVwbGFj
ZSBkZWZhdWx0IENTUyB2YWx1ZXMKKyAgICAvLyB3aXRoIHZhbHVlcyBpbmhlcml0ZWQgZnJvbSB0
aGUgY29udGFpbmluZyBpZnJhbWUgZWxlbWVudC4gSG93ZXZlciwKKyAgICAvLyBzb21lIHZhbHVl
cyAoc3VjaCBhcyB0aGUgY2FzZSBvZiBkZXNpZ25Nb2RlID0gIm9uIikgc3RpbGwgbmVlZCB0bwor
ICAgIC8vIGJlIHNldCBieSB0aGlzICJkb2N1bWVudCBzdHlsZSIuCisgICAgUmVmUHRyPFJlbmRl
clN0eWxlPiBkb2N1bWVudFN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIGJvb2wg
c2VhbWxlc3NXaXRoUGFyZW50ID0gZG9jdW1lbnQtPnNob3VsZERpc3BsYXlTZWFtbGVzc2x5V2l0
aFBhcmVudCgpOworICAgIGlmIChzZWFtbGVzc1dpdGhQYXJlbnQpIHsKKyAgICAgICAgUmVuZGVy
U3R5bGUqIGlmcmFtZVN0eWxlID0gZG9jdW1lbnQtPnNlYW1sZXNzUGFyZW50SUZyYW1lKCktPnJl
bmRlclN0eWxlKCk7CisgICAgICAgIGlmIChpZnJhbWVTdHlsZSkKKyAgICAgICAgICAgIGRvY3Vt
ZW50U3R5bGUtPmluaGVyaXRGcm9tKGlmcmFtZVN0eWxlKTsKKyAgICB9CisKKyAgICAvLyBGSVhN
RTogSXQncyBub3QgY2xlYXIgd2hpY2ggdmFsdWVzIGJlbG93IHdlIHdhbnQgdG8gb3ZlcnJpZGUg
aW4gdGhlIHNlYW1sZXNzIGNhc2UhCisgICAgZG9jdW1lbnRTdHlsZS0+c2V0RGlzcGxheShCTE9D
Syk7CisgICAgaWYgKCFzZWFtbGVzc1dpdGhQYXJlbnQpIHsKKyAgICAgICAgZG9jdW1lbnRTdHls
ZS0+c2V0UlRMT3JkZXJpbmcoZG9jdW1lbnQtPnZpc3VhbGx5T3JkZXJlZCgpID8gVmlzdWFsT3Jk
ZXIgOiBMb2dpY2FsT3JkZXIpOworICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRab29tKGZyYW1l
ICYmICFkb2N1bWVudC0+cHJpbnRpbmcoKSA/IGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpIDogMSk7
CisgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFBhZ2VTY2FsZVRyYW5zZm9ybShmcmFtZSA/IGZy
YW1lLT5mcmFtZVNjYWxlRmFjdG9yKCkgOiAxKTsKKyAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0
TG9jYWxlKGRvY3VtZW50LT5jb250ZW50TGFuZ3VhZ2UoKSk7CisgICAgfQorICAgIC8vIFRoaXMg
b3ZlcnJpZGVzIGFueSAtd2Via2l0LXVzZXItbW9kaWZ5IGluaGVyaXRlZCBmcm9tIHRoZSBwYXJl
bnQgaWZyYW1lLgorICAgIGRvY3VtZW50U3R5bGUtPnNldFVzZXJNb2RpZnkoZG9jdW1lbnQtPmlu
RGVzaWduTW9kZSgpID8gUkVBRF9XUklURSA6IFJFQURfT05MWSk7CisKKyAgICBFbGVtZW50KiBk
b2NFbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIFJlbmRlck9iamVj
dCogZG9jRWxlbWVudFJlbmRlcmVyID0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlcmVy
KCkgOiAwOworICAgIGlmIChkb2NFbGVtZW50UmVuZGVyZXIpIHsKKyAgICAgICAgLy8gVXNlIHRo
ZSBkaXJlY3Rpb24gYW5kIHdyaXRpbmctbW9kZSBvZiB0aGUgYm9keSB0byBzZXQgdGhlCisgICAg
ICAgIC8vIHZpZXdwb3J0J3MgZGlyZWN0aW9uIGFuZCB3cml0aW5nLW1vZGUgdW5sZXNzIHRoZSBw
cm9wZXJ0eSBpcyBzZXQgb24gdGhlIGRvY3VtZW50IGVsZW1lbnQuCisgICAgICAgIC8vIElmIHRo
ZXJlIGlzIG5vIGJvZHksIHRoZW4gdXNlIHRoZSBkb2N1bWVudCBlbGVtZW50LgorICAgICAgICBS
ZW5kZXJPYmplY3QqIGJvZHlSZW5kZXJlciA9IGRvY3VtZW50LT5ib2R5KCkgPyBkb2N1bWVudC0+
Ym9keSgpLT5yZW5kZXJlcigpIDogMDsKKyAgICAgICAgaWYgKGJvZHlSZW5kZXJlciAmJiAhZG9j
dW1lbnQtPndyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGRv
Y3VtZW50U3R5bGUtPnNldFdyaXRpbmdNb2RlKGJvZHlSZW5kZXJlci0+c3R5bGUoKS0+d3JpdGlu
Z01vZGUoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFdy
aXRpbmdNb2RlKGRvY0VsZW1lbnRSZW5kZXJlci0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7Cisg
ICAgICAgIGlmIChib2R5UmVuZGVyZXIgJiYgIWRvY3VtZW50LT5kaXJlY3Rpb25TZXRPbkRvY3Vt
ZW50RWxlbWVudCgpKQorICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0RGlyZWN0aW9uKGJv
ZHlSZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBkb2N1bWVudFN0eWxlLT5zZXREaXJlY3Rpb24oZG9jRWxlbWVudFJlbmRlcmVyLT5zdHls
ZSgpLT5kaXJlY3Rpb24oKSk7CisgICAgfQorCisgICAgaWYgKGZyYW1lKSB7CisgICAgICAgIGlm
IChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCkpIHsKKyAgICAgICAgICAgIGNv
bnN0IFBhZ2luYXRpb24mIHBhZ2luYXRpb24gPSBmcmFtZVZpZXctPnBhZ2luYXRpb24oKTsKKyAg
ICAgICAgICAgIGlmIChwYWdpbmF0aW9uLm1vZGUgIT0gUGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQp
IHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRDb2x1bW5TdHlsZXNGcm9tUGFn
aW5hdGlvbk1vZGUocGFnaW5hdGlvbi5tb2RlKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudFN0
eWxlLT5zZXRDb2x1bW5HYXAocGFnaW5hdGlvbi5nYXApOworICAgICAgICAgICAgICAgIGlmIChS
ZW5kZXJWaWV3KiB2aWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodmlldy0+aGFzQ29sdW1ucygpKQorICAgICAgICAgICAgICAgICAgICAgICAg
dmlldy0+dXBkYXRlQ29sdW1uSW5mb0Zyb21TdHlsZShkb2N1bWVudFN0eWxlLmdldCgpKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBTZWFtbGVzcyBpZnJhbWVzIHdhbnQgdG8gaW5oZXJpdCB0aGVpciBmb250IGZyb20gdGhlaXIg
cGFyZW50IGlmcmFtZSwgc28gZWFybHkgcmV0dXJuIGJlZm9yZSBzZXR0aW5nIHRoZSBmb250Lgor
ICAgIGlmIChzZWFtbGVzc1dpdGhQYXJlbnQpCisgICAgICAgIHJldHVybiBkb2N1bWVudFN0eWxl
LnJlbGVhc2UoKTsKKworICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CisgICAg
Zm9udERlc2NyaXB0aW9uLnNldFNjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0
aW9uKGRvY3VtZW50U3R5bGUtPmxvY2FsZSgpKSk7CisgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5n
cyA9IGRvY3VtZW50LT5zZXR0aW5ncygpKSB7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRV
c2VQcmludGVyRm9udChkb2N1bWVudC0+cHJpbnRpbmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVlbkZv
bnRTdWJzdGl0dXRpb25FbmFibGVkKCkpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVu
ZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7CisgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgc3RhbmRhcmRGb250ID0gc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWls
eShmb250RGVzY3JpcHRpb24uc2NyaXB0KCkpOworICAgICAgICBpZiAoIXN0YW5kYXJkRm9udC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5
KEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHkpOworICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldE9uZUZhbWlseShzdGFuZGFyZEZvbnQpOworICAgICAgICB9CisgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhT
bWFsbCArIDEpOworICAgICAgICBpbnQgc2l6ZSA9IGZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1
ZU1lZGl1bSwgZmFsc2UsIGRvY3VtZW50KTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNw
ZWNpZmllZFNpemUoc2l6ZSk7CisgICAgICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzID0gZG9jdW1l
bnQtPmlzU1ZHRG9jdW1lbnQoKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVk
U2l6ZShjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoc2l6ZSwgZm9udERlc2NyaXB0
aW9uLmlzQWJzb2x1dGVTaXplKCksIHVzZVNWR1pvb21SdWxlcywgZG9jdW1lbnRTdHlsZS5nZXQo
KSwgZG9jdW1lbnQpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVz
ZVByaW50ZXJGb250KGRvY3VtZW50LT5wcmludGluZygpKTsKKworICAgIEZvbnRPcmllbnRhdGlv
biBmb250T3JpZW50YXRpb247CisgICAgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBnbHlwaE9yaWVu
dGF0aW9uOworICAgIGRvY3VtZW50U3R5bGUtPmdldEZvbnRBbmRHbHlwaE9yaWVudGF0aW9uKGZv
bnRPcmllbnRhdGlvbiwgZ2x5cGhPcmllbnRhdGlvbik7CisgICAgZm9udERlc2NyaXB0aW9uLnNl
dE9yaWVudGF0aW9uKGZvbnRPcmllbnRhdGlvbik7CisgICAgZm9udERlc2NyaXB0aW9uLnNldE5v
bkNKS0dseXBoT3JpZW50YXRpb24oZ2x5cGhPcmllbnRhdGlvbik7CisKKyAgICBkb2N1bWVudFN0
eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKworICAgIENTU0ZvbnRT
ZWxlY3RvciogZm9udFNlbGVjdG9yID0gZG9jdW1lbnQtPnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygp
ID8gZG9jdW1lbnQtPnN0eWxlUmVzb2x2ZXJJZkV4aXN0cygpLT5mb250U2VsZWN0b3IoKSA6IDA7
CisgICAgZG9jdW1lbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IpOworCisgICAg
cmV0dXJuIGRvY3VtZW50U3R5bGUucmVsZWFzZSgpOworfQorCit9Cit9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50X2gKKyNkZWZp
bmUgU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnRfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NGb250U2VsZWN0b3I7CitjbGFz
cyBEb2N1bWVudDsKK2NsYXNzIFJlbmRlclN0eWxlOworCituYW1lc3BhY2UgU3R5bGUgeworCitQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiByZXNvbHZlRm9yRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQq
KTsKKworfQorfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208436</attachid>
            <date>2013-08-09 08:18:44 -0700</date>
            <delta_ts>2013-08-09 10:51:32 -0700</delta_ts>
            <desc>rebased</desc>
            <filename>move-styleresolver-statics-2.patch</filename>
            <type>text/plain</type>
            <size>412228</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Mzg5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDEzLTA4LTA5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHN0YXRpYyBTdHlsZVJl
c29sdmVyIGZ1bmN0aW9ucyB0byBTdHlsZSBuYW1lc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTYyOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gTW92ZSBzdGF0aWMgZm9udCBzaXplIGNvbXB1
dGF0aW9uIGZ1bmN0aW9ucyB0byBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgvLmNwcAorICAgICAg
ICAtIE1vdmUgU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JEb2N1bWVudCB0byBTdHlsZTo6cmVzb2x2
ZUZvckRvY3VtZW50CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRGYW1pbHk6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250RmFtaWx5OjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbml0aWFsVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseVZhbHVlKToK
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0Zv
ck9yaWVudGF0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JH
ZW5lcmljRmFtaWx5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Omlu
aXRpYWxpemVGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0
Rm9udFNpemUpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6
CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
bGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUpOgorICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6cHJvY2Vzcyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN0eWxlOjpnZXRGb250QW5kR2x5cGhPcmllbnRhdGlvbik6CisgICAgICAgIAor
ICAgICAgICAgICAgTW92ZWQgZnJvbSBTdHlsZVJlc29sdmVyLmNwcCBzbyBpdCBjYW4gYmUgdXNl
ZCBieSBTdHlsZTo6cmVzb2x2ZUZvckRvY3VtZW50KCkuCisgICAgICAgICAgICBUaGlzIGRlcGVu
ZHMgb24gUmVuZGVyU3R5bGUgb25seSBzbyBpdCBpcyBhIG5hdHVyYWwgbWVtYmVyIGZ1bmN0aW9u
LgorCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR0lubGluZVRleHQ6OmNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUpOgorICAg
ICAgICAqIHN0eWxlL1N0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemVGb3JTVkdJbmxpbmVUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OmxlZ2FjeUZvbnRTaXplRm9yUGl4ZWxTaXplKToKKyAgICAgICAg
KiBzdHlsZS9TdHlsZUZvbnRTaXplRnVuY3Rpb25zLmg6IEFkZGVkLgorICAgICAgICAqIHN0eWxl
L1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6cmVzb2x2ZUZvckRvY3VtZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVG
b3JEb2N1bWVudC5oOiBBZGRlZC4KKwogMjAxMy0wOC0wOCAgQWxsYW4gU2FuZGZlbGQgSmVuc2Vu
ICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dLMl0gQ29tcG9zaXRl
ZCBhbmQgdHJhbnNmb3JtZWQgbGlua3MgYXNzZXJ0cyBpbiB0YXAgaGlnaGxpZ2h0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNTM4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU1NDQsNiArNTU0NCwxMCBAQAogCQlFNEMx
Nzg5QjBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMxNzg5NjBFRTY5MDM4MDA4MjRENjkg
LyogQ1NTU2VsZWN0b3JMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTRDMjc5NTgwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzI3OTU2
MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAgKi87IH07CiAJCUU0QzI3OTU5MENG
OTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1l
ZGlhLmggKi87IH07CisJCUU0RDU4RUI0MTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVG
b3JEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNEQ1OEVCMjE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQu
Y3BwICovOyB9OworCQlFNEQ1OEVCNTE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9y
RG9jdW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0RDU4RUIzMTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oICov
OyB9OworCQlFNEQ1OEVCODE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9u
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ1
OEVCNjE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAgKi87IH07
CisJCUU0RDU4RUI5MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ1OEVCNzE3
QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oICovOyB9OwogCQlFNEQ2
ODc3NzBFRDdBRTNEMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDY4Nzc2MEVEN0FFM0QwMDZF
QTk3OCAvKiBQdXJnZWFibGVCdWZmZXJNYWMuY3BwICovOyB9OwogCQlFNEQ2ODc3OTBFRDdBRTRG
MDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ2ODc3ODBFRDdBRTRGMDA2RUE5NzggLyogUHVyZ2VhYmxl
QnVmZmVyLmggKi87IH07CiAJCUU0REVBQTE3MTdBOTNEQzMwMDBFMDQzMCAvKiBTdHlsZVJlc29s
dmVUcmVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0REVBQTE1MTdBOTNEQzMwMDBFMDQzMCAvKiBTdHlsZVJlc29sdmVUcmVlLmNwcCAqLzsgfTsK
QEAgLTEyMzYyLDYgKzEyMzY2LDEwIEBACiAJCUU0QzE3ODk2MEVFNjkwMzgwMDgyNEQ2OSAvKiBD
U1NTZWxlY3Rvckxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTU2Vs
ZWN0b3JMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QzI3OTU2MENGOTc0
MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJNZWRpYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0QzI3OTU3MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJNZWRpYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFNEQ1OEVCMjE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZXNvbHZl
Rm9yRG9jdW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEQ1OEVCMzE3
QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRENThFQjYxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9u
dFNpemVGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUU0RDU4RUI3MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlRm9udFNpemVGdW5jdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRENjg3NzYwRUQ3QUUzRDAwNkVBOTc4IC8q
IFB1cmdlYWJsZUJ1ZmZlck1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQdXJnZWFibGVCdWZmZXJNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNEQ2ODc3ODBFRDdBRTRGMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1cmdlYWJsZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNERFQUExNTE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVSZXNvbHZl
VHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVJlc29s
dmVUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NjA5LDYgKzE5NjE3
LDEwIEBACiAJCUU0NzYzRDRBMTdCMjcwNDkwMEQzNTIwNiAvKiBzdHlsZSAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRTRENThFQjYxN0I0RUQ4OTAwQ0JE
Q0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwICovLAorCQkJCUU0RDU4RUI3MTdCNEVE
ODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmggKi8sCisJCQkJRTRENThFQjIx
N0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcCAqLywKKwkJCQlF
NEQ1OEVCMzE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCAqLywK
IAkJCQlFNERFQUExNTE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVSZXNvbHZlVHJlZS5jcHAgKi8s
CiAJCQkJRTRERUFBMTYxN0E5M0RDMzAwMEUwNDMwIC8qIFN0eWxlUmVzb2x2ZVRyZWUuaCAqLywK
IAkJCSk7CkBAIC0yMjI0Miw2ICsyMjI1NCw3IEBACiAJCQkJNjVERjMyM0EwOUQxREU2NTAwMEJF
MzI1IC8qIEpTQ2FudmFzR3JhZGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1REYzMjNDMDlE
MURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc1BhdHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
REYzMjNDMDlEMURFNjUwMDFCRTMyNSAvKiBKU0NhbnZhc1Byb3h5LmggaW4gSGVhZGVycyAqLywK
KwkJCQlFNEQ1OEVCNTE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUVEMTQzMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUVEMTQ1MTA1MTk2OTQw
MDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNGOUI3QTEwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKQEAgLTIzODM3LDYgKzIzODUwLDcgQEAKIAkJCQlCQzhCRjE1MTEwNTgxM0JGMDBBNDBB
MDcgLyogVXNlclN0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEJGMTVBMTA1ODE0
MTgwMEE0MEEwNyAvKiBVc2VyU3R5bGVTaGVldFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0RGMzE3QzExRjhENjgzMDAzQzVCRjggLyogVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3IuaCBp
biBIZWFkZXJzICovLAorCQkJCUU0RDU4RUI5MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRT
aXplRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkxRkFGQkYxOTE1QTVGQTc0MDAwODNB
MjAgLyogVVRJVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTNCQkYwODExNjJEQTEx
MDBCOTQwOUEgLyogVVVJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTBEMzI4NTgxNjNCMzEzRjAw
MTYxMTFFIC8qIFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNTA0Myw2ICsyNTA1Nyw3IEBACiAJCQkJNDlFQ0VCNkYxNDk5NzkwRDAwQ0REM0E0IC8q
IEZpbHRlck9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkYwNEQwQTE1NEYw
OTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3
NTM1NjgwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJRTRENThFQjgxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9p
bnQzRC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjc1MzU1OTBCMDUzODE0MDAyQ0U2NEYgLyog
RmxvYXRQb2ludENHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTc4MEIwNTM4MTQwMDJD
RTY0RiAvKiBGbG9hdFBvaW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yNjk3Nyw2ICsyNjk5
Miw3IEBACiAJCQkJQTdENkIzNEEwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRTQzNDY1NDBGNTQ2QTgyMDBCMEYxQkEgLyogV29y
a2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBCOTA1NkY4MEYyNjg1RjMwMDk1RkY2
QSAvKiBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0RDU4
RUI0MTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5N0FBQkQyQzE0RkEwOUQ1MDA3NDU3QUUgLyogV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMjMwOTlFNjQ5
MjAwNTZFNTgxIC8qIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBODMzQzdDQzBBMkNGMDc0MDBENTc2NjQgLyogWExpbmtOYW1lcy5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWls
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxl
QnVpbGRlci5jcHAJKHJldmlzaW9uIDE1Mzg5MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXBy
ZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAog
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgogI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAK
QEAgLTY3OCw3ICs2NzksNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBXZSBuZWVk
IHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkgY2hh
bmdlIGZyb20gbW9ub3NwYWNlIHRvIG5vbi1tb25vc3BhY2UuCiAgICAgICAgIGlmIChmb250RGVz
Y3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0
U2l6ZSgpKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2Ny
aXB0aW9uLCBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+
ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXpl
KCkgLSAxLCBmYWxzZSkpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUo
Zm9udERlc2NyaXB0aW9uLCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlWHhTbWFs
bCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgZmFsc2UsIHN0eWxlUmVzb2x2
ZXItPmRvY3VtZW50KCkpKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1p
bHkoaW5pdGlhbERlc2MuZ2VuZXJpY0ZhbWlseSgpKTsKICAgICAgICAgaWYgKCFpbml0aWFsRGVz
Yy5maXJzdEZhbWlseSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRGYW1pbGllcyhpbml0aWFsRGVzYy5mYW1pbGllcygpKTsKQEAgLTc1Miw3ICs3NTMsNyBAQCBw
dWJsaWM6CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5hZG9wdEZhbWlsaWVzKGZhbWlsaWVzKTsK
IAogICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2Ny
aXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0
U2l6ZSkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlw
dGlvbiwgc3R5bGVSZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2ZXItPmRv
Y3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgp
IC0gMSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CisgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIFN0eWxlOjpmb250U2l6ZUZv
cktleXdvcmQoQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkg
LSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUsIHN0eWxlUmVzb2x2ZXItPmRvY3Vt
ZW50KCkpKTsKIAogICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKICAgICB9CkBAIC03OTYsNyArNzk3LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpCiAgICAgewogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2Ny
aXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAg
ICAgIGZsb2F0IHNpemUgPSBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVS
ZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VG
aXhlZERlZmF1bHRTaXplKCkpOworICAgICAgICBmbG9hdCBzaXplID0gU3R5bGU6OmZvbnRTaXpl
Rm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVs
dFNpemUoKSwgc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSk7CiAKICAgICAgICAgaWYgKHNpemUg
PCAwKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtODM2LDcgKzgzNyw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYTGFyZ2U6CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
WHhMYXJnZToKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJnZToKLSAgICAg
ICAgICAgICAgICBzaXplID0gc3R5bGVSZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxl
UmVzb2x2ZXItPmRvY3VtZW50KCksIGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZh
dWx0U2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5
d29yZChpZGVudCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgc3R5bGVS
ZXNvbHZlci0+ZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dEtleXdvcmRTaXplKGlkZW50IC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2VyOgpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTUzODkzKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1
LDcgQEAKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU2hhZG93VmFsdWUuaCIK
ICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1
bmN0aW9ucy5oIgogI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIKICNpbmNsdWRlICJT
dHlsZVBlbmRpbmdJbWFnZS5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKQEAgLTc4
MiwxMzcgKzc4Myw2IEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWQK
ICAgICByZXR1cm4gc2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogfQogCi1zdGF0aWMgdm9p
ZCBnZXRGb250QW5kR2x5cGhPcmllbnRhdGlvbihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIEZv
bnRPcmllbnRhdGlvbiYgZm9udE9yaWVudGF0aW9uLCBOb25DSktHbHlwaE9yaWVudGF0aW9uJiBn
bHlwaE9yaWVudGF0aW9uKQotewotICAgIGlmIChzdHlsZS0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkgewotICAgICAgICBmb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsOwotICAgICAgICBn
bHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHN0eWxlLT50ZXh0T3JpZW50YXRp
b24oKSkgewotICAgIGNhc2UgVGV4dE9yaWVudGF0aW9uVmVydGljYWxSaWdodDoKLSAgICAgICAg
Zm9udE9yaWVudGF0aW9uID0gVmVydGljYWw7Ci0gICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBO
b25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodDsKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgVGV4dE9yaWVudGF0aW9uVXByaWdodDoKLSAgICAgICAgZm9udE9yaWVudGF0aW9uID0g
VmVydGljYWw7Ci0gICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0
aW9uVXByaWdodDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVGV4dE9yaWVudGF0aW9uU2lk
ZXdheXM6Ci0gICAgICAgIGlmIChzdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBMZWZ0VG9SaWdodFdy
aXRpbmdNb2RlKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbWFwIHRvIHNp
ZGV3YXlzLWxlZnQsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgotICAgICAgICAgICAgZm9u
dE9yaWVudGF0aW9uID0gVmVydGljYWw7Ci0gICAgICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0g
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgZm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbDsKLSAgICAg
ICAgZ2x5cGhPcmllbnRhdGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUZXh0T3JpZW50YXRpb25TaWRld2F5c1JpZ2h0
OgotICAgICAgICBmb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsOwotICAgICAgICBnbHlwaE9y
aWVudGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7Ci0gICAgICAg
IHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgZm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbDsKLSAgICAgICAgZ2x5cGhPcmllbnRh
dGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OwotICAgICAgICByZXR1
cm47Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpz
dHlsZUZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCwgQ1NTRm9udFNlbGVjdG9yKiBmb250
U2VsZWN0b3IpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0KLSAg
ICAvLyBIVE1MNSBzdGF0ZXMgdGhhdCBzZWFtbGVzcyBpZnJhbWVzIHNob3VsZCByZXBsYWNlIGRl
ZmF1bHQgQ1NTIHZhbHVlcwotICAgIC8vIHdpdGggdmFsdWVzIGluaGVyaXRlZCBmcm9tIHRoZSBj
b250YWluaW5nIGlmcmFtZSBlbGVtZW50LiBIb3dldmVyLAotICAgIC8vIHNvbWUgdmFsdWVzIChz
dWNoIGFzIHRoZSBjYXNlIG9mIGRlc2lnbk1vZGUgPSAib24iKSBzdGlsbCBuZWVkIHRvCi0gICAg
Ly8gYmUgc2V0IGJ5IHRoaXMgImRvY3VtZW50IHN0eWxlIi4KLSAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IGRvY3VtZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgYm9vbCBzZWFt
bGVzc1dpdGhQYXJlbnQgPSBkb2N1bWVudC0+c2hvdWxkRGlzcGxheVNlYW1sZXNzbHlXaXRoUGFy
ZW50KCk7Ci0gICAgaWYgKHNlYW1sZXNzV2l0aFBhcmVudCkgewotICAgICAgICBSZW5kZXJTdHls
ZSogaWZyYW1lU3R5bGUgPSBkb2N1bWVudC0+c2VhbWxlc3NQYXJlbnRJRnJhbWUoKS0+cmVuZGVy
U3R5bGUoKTsKLSAgICAgICAgaWYgKGlmcmFtZVN0eWxlKQotICAgICAgICAgICAgZG9jdW1lbnRT
dHlsZS0+aW5oZXJpdEZyb20oaWZyYW1lU3R5bGUpOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBJ
dCdzIG5vdCBjbGVhciB3aGljaCB2YWx1ZXMgYmVsb3cgd2Ugd2FudCB0byBvdmVycmlkZSBpbiB0
aGUgc2VhbWxlc3MgY2FzZSEKLSAgICBkb2N1bWVudFN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsK
LSAgICBpZiAoIXNlYW1sZXNzV2l0aFBhcmVudCkgewotICAgICAgICBkb2N1bWVudFN0eWxlLT5z
ZXRSVExPcmRlcmluZyhkb2N1bWVudC0+dmlzdWFsbHlPcmRlcmVkKCkgPyBWaXN1YWxPcmRlciA6
IExvZ2ljYWxPcmRlcik7Ci0gICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFpvb20oZnJhbWUgJiYg
IWRvY3VtZW50LT5wcmludGluZygpID8gZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCkgOiAxKTsKLSAg
ICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0UGFnZVNjYWxlVHJhbnNmb3JtKGZyYW1lID8gZnJhbWUt
PmZyYW1lU2NhbGVGYWN0b3IoKSA6IDEpOwotICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRMb2Nh
bGUoZG9jdW1lbnQtPmNvbnRlbnRMYW5ndWFnZSgpKTsKLSAgICB9Ci0gICAgLy8gVGhpcyBvdmVy
cmlkZXMgYW55IC13ZWJraXQtdXNlci1tb2RpZnkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBp
ZnJhbWUuCi0gICAgZG9jdW1lbnRTdHlsZS0+c2V0VXNlck1vZGlmeShkb2N1bWVudC0+aW5EZXNp
Z25Nb2RlKCkgPyBSRUFEX1dSSVRFIDogUkVBRF9PTkxZKTsKLQotICAgIEVsZW1lbnQqIGRvY0Vs
ZW1lbnQgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBk
b2NFbGVtZW50UmVuZGVyZXIgPSBkb2NFbGVtZW50ID8gZG9jRWxlbWVudC0+cmVuZGVyZXIoKSA6
IDA7Ci0gICAgaWYgKGRvY0VsZW1lbnRSZW5kZXJlcikgewotICAgICAgICAvLyBVc2UgdGhlIGRp
cmVjdGlvbiBhbmQgd3JpdGluZy1tb2RlIG9mIHRoZSBib2R5IHRvIHNldCB0aGUKLSAgICAgICAg
Ly8gdmlld3BvcnQncyBkaXJlY3Rpb24gYW5kIHdyaXRpbmctbW9kZSB1bmxlc3MgdGhlIHByb3Bl
cnR5IGlzIHNldCBvbiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLSAgICAgICAgLy8gSWYgdGhlcmUg
aXMgbm8gYm9keSwgdGhlbiB1c2UgdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0gICAgICAgIFJlbmRl
ck9iamVjdCogYm9keVJlbmRlcmVyID0gZG9jdW1lbnQtPmJvZHkoKSA/IGRvY3VtZW50LT5ib2R5
KCktPnJlbmRlcmVyKCkgOiAwOwotICAgICAgICBpZiAoYm9keVJlbmRlcmVyICYmICFkb2N1bWVu
dC0+d3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAgICAgZG9jdW1l
bnRTdHlsZS0+c2V0V3JpdGluZ01vZGUoYm9keVJlbmRlcmVyLT5zdHlsZSgpLT53cml0aW5nTW9k
ZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0V3JpdGlu
Z01vZGUoZG9jRWxlbWVudFJlbmRlcmVyLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpKTsKLSAgICAg
ICAgaWYgKGJvZHlSZW5kZXJlciAmJiAhZG9jdW1lbnQtPmRpcmVjdGlvblNldE9uRG9jdW1lbnRF
bGVtZW50KCkpCi0gICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXREaXJlY3Rpb24oYm9keVJl
bmRlcmVyLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGRvY3VtZW50U3R5bGUtPnNldERpcmVjdGlvbihkb2NFbGVtZW50UmVuZGVyZXItPnN0eWxlKCkt
PmRpcmVjdGlvbigpKTsKLSAgICB9Ci0KLSAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgaWYgKEZy
YW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKSkgewotICAgICAgICAgICAgY29uc3Qg
UGFnaW5hdGlvbiYgcGFnaW5hdGlvbiA9IGZyYW1lVmlldy0+cGFnaW5hdGlvbigpOwotICAgICAg
ICAgICAgaWYgKHBhZ2luYXRpb24ubW9kZSAhPSBQYWdpbmF0aW9uOjpVbnBhZ2luYXRlZCkgewot
ICAgICAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldENvbHVtblN0eWxlc0Zyb21QYWdpbmF0
aW9uTW9kZShwYWdpbmF0aW9uLm1vZGUpOwotICAgICAgICAgICAgICAgIGRvY3VtZW50U3R5bGUt
PnNldENvbHVtbkdhcChwYWdpbmF0aW9uLmdhcCk7Ci0gICAgICAgICAgICAgICAgaWYgKFJlbmRl
clZpZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh2aWV3LT5oYXNDb2x1bW5zKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB2aWV3
LT51cGRhdGVDb2x1bW5JbmZvRnJvbVN0eWxlKGRvY3VtZW50U3R5bGUuZ2V0KCkpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFNl
YW1sZXNzIGlmcmFtZXMgd2FudCB0byBpbmhlcml0IHRoZWlyIGZvbnQgZnJvbSB0aGVpciBwYXJl
bnQgaWZyYW1lLCBzbyBlYXJseSByZXR1cm4gYmVmb3JlIHNldHRpbmcgdGhlIGZvbnQuCi0gICAg
aWYgKHNlYW1sZXNzV2l0aFBhcmVudCkKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50U3R5bGUucmVs
ZWFzZSgpOwotCi0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKLSAgICBmb250
RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24o
ZG9jdW1lbnRTdHlsZS0+bG9jYWxlKCkpKTsKLSAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0g
ZG9jdW1lbnQtPnNldHRpbmdzKCkpIHsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVBy
aW50ZXJGb250KGRvY3VtZW50LT5wcmludGluZygpIHx8ICFzZXR0aW5ncy0+c2NyZWVuRm9udFN1
YnN0aXR1dGlvbkVuYWJsZWQoKSk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJp
bmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKLSAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBzdGFuZGFyZEZvbnQgPSBzZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KGZv
bnREZXNjcmlwdGlvbi5zY3JpcHQoKSk7Ci0gICAgICAgIGlmICghc3RhbmRhcmRGb250LmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9u
dERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0T25lRmFtaWx5KHN0YW5kYXJkRm9udCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxs
ICsgMSk7Ci0gICAgICAgIGludCBzaXplID0gU3R5bGVSZXNvbHZlcjo6Zm9udFNpemVGb3JLZXl3
b3JkKGRvY3VtZW50LCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpOwotICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICAgICAgYm9vbCB1c2VTVkdab29tUnVs
ZXMgPSBkb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpOwotICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZp
ZWRTaXplKGRvY3VtZW50LCBkb2N1bWVudFN0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNB
YnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChkb2N1bWVudC0+cHJpbnRpbmco
KSk7Ci0KLSAgICBGb250T3JpZW50YXRpb24gZm9udE9yaWVudGF0aW9uOwotICAgIE5vbkNKS0ds
eXBoT3JpZW50YXRpb24gZ2x5cGhPcmllbnRhdGlvbjsKLSAgICBnZXRGb250QW5kR2x5cGhPcmll
bnRhdGlvbihkb2N1bWVudFN0eWxlLmdldCgpLCBmb250T3JpZW50YXRpb24sIGdseXBoT3JpZW50
YXRpb24pOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPcmllbnRhdGlvbihmb250T3JpZW50YXRp
b24pOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXROb25DSktHbHlwaE9yaWVudGF0aW9uKGdseXBo
T3JpZW50YXRpb24pOwotCi0gICAgZG9jdW1lbnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7Ci0gICAgZG9jdW1lbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZShmb250U2Vs
ZWN0b3IpOwotCi0gICAgcmV0dXJuIGRvY3VtZW50U3R5bGUucmVsZWFzZSgpOwotfQotCiBzdGF0
aWMgaW5saW5lIGJvb2wgaXNBdFNoYWRvd0JvdW5kYXJ5KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
CiB7CiAgICAgaWYgKCFlbGVtZW50KQpAQCAtMTQ1NSw3ICsxMzI1LDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZQogCiAgICAgLy8gQ2FsbCBzZXRTdHlsZXNGb3JQ
YWdpbmF0aW9uTW9kZSgpIGlmIGEgcGFnaW5hdGlvbiBtb2RlIGlzIHNldCBmb3IgYW55IG5vbi1y
b290IGVsZW1lbnRzLiBJZiB0aGVzZQogICAgIC8vIHN0eWxlcyBhcmUgc3BlY2lmaWVkIG9uIGEg
cm9vdCBlbGVtZW50LCB0aGVuIHRoZXkgd2lsbCBiZSBpbmNvcnBvcmF0ZWQgaW4KLSAgICAvLyBT
dHlsZVJlc29sdmVyOjpzdHlsZUZvckRvY3VtZW50KCkuCisgICAgLy8gU3R5bGU6OmNyZWF0ZUZv
ckRvY3VtZW50KCkuCiAgICAgaWYgKChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1BBR0VEWCB8fCBz
dHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1BBR0VEWSkgJiYgIShlICYmIChlLT5oYXNUYWdOYW1lKGh0
bWxUYWcpIHx8IGUtPmhhc1RhZ05hbWUoYm9keVRhZykpKSkKICAgICAgICAgc3R5bGUtPnNldENv
bHVtblN0eWxlc0Zyb21QYWdpbmF0aW9uTW9kZShXZWJDb3JlOjpwYWdpbmF0aW9uTW9kZUZvclJl
bmRlclN0eWxlKHN0eWxlKSk7CiAKQEAgLTE1ODUsNyArMTQ1NSw3IEBAIHN0YXRpYyB2b2lkIGNo
ZWNrRm9yT3JpZW50YXRpb25DaGFuZ2UoUmUKIHsKICAgICBGb250T3JpZW50YXRpb24gZm9udE9y
aWVudGF0aW9uOwogICAgIE5vbkNKS0dseXBoT3JpZW50YXRpb24gZ2x5cGhPcmllbnRhdGlvbjsK
LSAgICBnZXRGb250QW5kR2x5cGhPcmllbnRhdGlvbihzdHlsZSwgZm9udE9yaWVudGF0aW9uLCBn
bHlwaE9yaWVudGF0aW9uKTsKKyAgICBzdHlsZS0+Z2V0Rm9udEFuZEdseXBoT3JpZW50YXRpb24o
Zm9udE9yaWVudGF0aW9uLCBnbHlwaE9yaWVudGF0aW9uKTsKIAogICAgIGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAg
IGlmIChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBmb250T3JpZW50YXRpb24gJiYg
Zm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBnbHlwaE9yaWVudGF0
aW9uKQpAQCAtMjQxNyw3ICsyMjg3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1BybwogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVy
Rm9udChkb2N1bWVudCgpLT5wcmludGluZygpIHx8ICFzZXR0aW5ncy0+c2NyZWVuRm9udFN1YnN0
aXR1dGlvbkVuYWJsZWQoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20g
ZmFjdG9yLgotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUo
KSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVj
aWZpZWRTaXplKCksIHVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVj
aWZpZWRTaXplKGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIGZvbnREZXNjcmlwdGlv
bi5pc0Fic29sdXRlU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSwgc3RhdGUuc3R5bGUoKSwgZG9j
dW1lbnQoKSkpOwogICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRW
YWx1ZSgpKSB7CkBAIC0zMjYzLDcgKzMxMzMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNr
Rm9yR2VuZXJpY0ZhbWlsCiAgICAgLy8gbXVsdGlwbHlpbmcgYnkgb3VyIHNjYWxlIGZhY3Rvci4K
ICAgICBmbG9hdCBzaXplOwogICAgIGlmIChjaGlsZEZvbnQua2V5d29yZFNpemUoKSkKLSAgICAg
ICAgc2l6ZSA9IGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwg
KyBjaGlsZEZvbnQua2V5d29yZFNpemUoKSAtIDEsIGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRT
aXplKCkpOworICAgICAgICBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1
ZVh4U21hbGwgKyBjaGlsZEZvbnQua2V5d29yZFNpemUoKSAtIDEsIGNoaWxkRm9udC51c2VGaXhl
ZERlZmF1bHRTaXplKCksIGRvY3VtZW50KCkpOwogICAgIGVsc2UgewogICAgICAgICBTZXR0aW5n
cyogc2V0dGluZ3MgPSBkb2N1bWVudFNldHRpbmdzKCk7CiAgICAgICAgIGZsb2F0IGZpeGVkU2Nh
bGVGYWN0b3IgPSAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkg
JiYgc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpKQpAQCAtMzI4OSw3ICszMTU5LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKAogICAgIGlmICghc3RhbmRhcmRG
b250RmFtaWx5LmlzRW1wdHkoKSkKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWls
eShzdGFuZGFyZEZvbnRGYW1pbHkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6
ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwotICAgIHNldEZvbnRTaXpl
KGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVl
TWVkaXVtLCBmYWxzZSkpOworICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6
OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3VtZW50KCkpKTsK
ICAgICBtX3N0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxM
aW5lSGVpZ2h0KCkpOwogICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogICAgIHNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwpAQCAtMzI5OCwxNTEgKzMxNjgsNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6OnNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9h
dCBzaXplKQogewogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwot
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNw
ZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgbV9zdGF0ZS5zdHlsZSgpLCBmb250RGVzY3JpcHRpb24u
aXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKLX0KLQotZmxvYXQg
U3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQq
IGRvY3VtZW50LCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0
IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKQotewotICAgIGZsb2F0IHpvb21G
YWN0b3IgPSAxLjBmOwotICAgIGlmICghdXNlU1ZHWm9vbVJ1bGVzKSB7Ci0gICAgICAgIHpvb21G
YWN0b3IgPSBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgICAgICB6b29tRmFjdG9yICo9IGZyYW1lLT50
ZXh0Wm9vbUZhY3RvcigpOwotICAgIH0KLQotICAgIHJldHVybiBTdHlsZVJlc29sdmVyOjpnZXRD
b21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCwgem9vbUZhY3RvciwgaXNBYnNv
bHV0ZVNpemUsIHNwZWNpZmllZFNpemUpOwotfQotCi1mbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRD
b21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIGZsb2F0IHpv
b21GYWN0b3IsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIEVTbWFy
dE1pbmltdW1Gb3JGb250U2l6ZSB1c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSkKLXsKLSAgICAv
LyBUZXh0IHdpdGggYSAwcHggZm9udCBzaXplIHNob3VsZCBub3QgYmUgdmlzaWJsZSBhbmQgdGhl
cmVmb3JlIG5lZWRzIHRvIGJlCi0gICAgLy8gZXhlbXB0IGZyb20gbWluaW11bSBmb250IHNpemUg
cnVsZXMuIEFjaWQzIHJlbGllcyBvbiB0aGlzIGZvciBwaXhlbC1wZXJmZWN0Ci0gICAgLy8gcmVu
ZGVyaW5nLiBUaGlzIGlzIGFsc28gY29tcGF0aWJsZSB3aXRoIG90aGVyIGJyb3dzZXJzIHRoYXQg
aGF2ZSBtaW5pbXVtCi0gICAgLy8gZm9udCBzaXplIHNldHRpbmdzIChlLmcuIEZpcmVmb3gpLgot
ICAgIGlmIChmYWJzZihzcGVjaWZpZWRTaXplKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjplcHNpbG9uKCkpCi0gICAgICAgIHJldHVybiAwLjBmOwotCi0gICAgLy8gV2Ugc3VwcG9ydCB0
d28gdHlwZXMgb2YgbWluaW11bSBmb250IHNpemUuIFRoZSBmaXJzdCBpcyBhIGhhcmQgb3ZlcnJp
ZGUgdGhhdCBhcHBsaWVzIHRvCi0gICAgLy8gYWxsIGZvbnRzLiBUaGlzIGlzICJtaW5TaXplLiIg
VGhlIHNlY29uZCB0eXBlIG9mIG1pbmltdW0gZm9udCBzaXplIGlzIGEgInNtYXJ0IG1pbmltdW0i
Ci0gICAgLy8gdGhhdCBpcyBhcHBsaWVkIG9ubHkgd2hlbiB0aGUgV2ViIHBhZ2UgY2FuJ3Qga25v
dyB3aGF0IHNpemUgaXQgcmVhbGx5IGFza2VkIGZvciwgZS5nLiwKLSAgICAvLyB3aGVuIGl0IHVz
ZXMgbG9naWNhbCBzaXplcyBsaWtlICJzbWFsbCIgb3IgZXhwcmVzc2VzIHRoZSBmb250LXNpemUg
YXMgYSBwZXJjZW50YWdlIG9mCi0gICAgLy8gdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgc2V0dGlu
Zy4KLQotICAgIC8vIFdpdGggdGhlIHNtYXJ0IG1pbmltdW0sIHdlIG5ldmVyIHdhbnQgdG8gZ2V0
IHNtYWxsZXIgdGhhbiB0aGUgbWluaW11bSBmb250IHNpemUgdG8ga2VlcCBmb250cyByZWFkYWJs
ZS4KLSAgICAvLyBIb3dldmVyIHdlIGFsd2F5cyBhbGxvdyB0aGUgcGFnZSB0byBzZXQgYW4gZXhw
bGljaXQgcGl4ZWwgc2l6ZSB0aGF0IGlzIHNtYWxsZXIsCi0gICAgLy8gc2luY2Ugc2l0ZXMgd2ls
bCBtaXMtcmVuZGVyIG90aGVyd2lzZSAoZS5nLiwgaHR0cDovL3d3dy5nYW1lc3BvdC5jb20gd2l0
aCBhIDlweCBtaW5pbXVtKS4KLQotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5z
ZXR0aW5ncygpOwotICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybiAxLjBmOwotCi0g
ICAgaW50IG1pblNpemUgPSBzZXR0aW5ncy0+bWluaW11bUZvbnRTaXplKCk7Ci0gICAgaW50IG1p
bkxvZ2ljYWxTaXplID0gc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKTsKLSAgICBm
bG9hdCB6b29tZWRTaXplID0gc3BlY2lmaWVkU2l6ZSAqIHpvb21GYWN0b3I7Ci0KLSAgICAvLyBB
cHBseSB0aGUgaGFyZCBtaW5pbXVtIGZpcnN0LiBXZSBvbmx5IGFwcGx5IHRoZSBoYXJkIG1pbmlt
dW0gaWYgYWZ0ZXIgem9vbWluZyB3ZSdyZSBzdGlsbCB0b28gc21hbGwuCi0gICAgaWYgKHpvb21l
ZFNpemUgPCBtaW5TaXplKQotICAgICAgICB6b29tZWRTaXplID0gbWluU2l6ZTsKLQotICAgIC8v
IE5vdyBhcHBseSB0aGUgInNtYXJ0IG1pbmltdW0uIiBUaGlzIG1pbmltdW0gaXMgYWxzbyBvbmx5
IGFwcGxpZWQgaWYgd2UncmUgc3RpbGwgdG9vIHNtYWxsCi0gICAgLy8gYWZ0ZXIgem9vbWluZy4g
VGhlIGZvbnQgc2l6ZSBtdXN0IGVpdGhlciBiZSByZWxhdGl2ZSB0byB0aGUgdXNlciBkZWZhdWx0
IG9yIHRoZSBvcmlnaW5hbCBzaXplCi0gICAgLy8gbXVzdCBoYXZlIGJlZW4gYWNjZXB0YWJsZS4g
SW4gb3RoZXIgd29yZHMsIHdlIG9ubHkgYXBwbHkgdGhlIHNtYXJ0IG1pbmltdW0gd2hlbmV2ZXIg
d2UncmUgcG9zaXRpdmUKLSAgICAvLyBkb2luZyBzbyB3b24ndCBkaXNydXB0IHRoZSBsYXlvdXQu
Ci0gICAgaWYgKHVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXplICYmIHpvb21lZFNpemUgPCBtaW5M
b2dpY2FsU2l6ZSAmJiAoc3BlY2lmaWVkU2l6ZSA+PSBtaW5Mb2dpY2FsU2l6ZSB8fCAhaXNBYnNv
bHV0ZVNpemUpKQotICAgICAgICB6b29tZWRTaXplID0gbWluTG9naWNhbFNpemU7Ci0KLSAgICAv
LyBBbHNvIGNsYW1wIHRvIGEgcmVhc29uYWJsZSBtYXhpbXVtIHRvIHByZXZlbnQgaW5zYW5lIGZv
bnQgc2l6ZXMgZnJvbSBjYXVzaW5nIGNyYXNoZXMgb24gdmFyaW91cwotICAgIC8vIHBsYXRmb3Jt
cyAoSSdtIGxvb2tpbmcgYXQgeW91LCBXaW5kb3dzLikKLSAgICByZXR1cm4gbWluKG1heGltdW1B
bGxvd2VkRm9udFNpemUsIHpvb21lZFNpemUpOwotfQotCi1jb25zdCBpbnQgZm9udFNpemVUYWJs
ZU1heCA9IDE2OwotY29uc3QgaW50IGZvbnRTaXplVGFibGVNaW4gPSA5OwotY29uc3QgaW50IHRv
dGFsS2V5d29yZHMgPSA4OwotCi0vLyBXaW5JRS9OYXY0IHRhYmxlIGZvciBmb250IHNpemVzLiBE
ZXNpZ25lZCB0byBtYXRjaCB0aGUgbGVnYWN5IGZvbnQgbWFwcGluZyBzeXN0ZW0gb2YgSFRNTC4K
LXN0YXRpYyBjb25zdCBpbnQgcXVpcmtzRm9udFNpemVUYWJsZVtmb250U2l6ZVRhYmxlTWF4IC0g
Zm9udFNpemVUYWJsZU1pbiArIDFdW3RvdGFsS2V5d29yZHNdID0KLXsKLSAgICAgIHsgOSwgICAg
OSwgICAgIDksICAgICA5LCAgICAxMSwgICAgMTQsICAgIDE4LCAgICAyOCB9LAotICAgICAgeyA5
LCAgICA5LCAgICAgOSwgICAgMTAsICAgIDEyLCAgICAxNSwgICAgMjAsICAgIDMxIH0sCi0gICAg
ICB7IDksICAgIDksICAgICA5LCAgICAxMSwgICAgMTMsICAgIDE3LCAgICAyMiwgICAgMzQgfSwK
LSAgICAgIHsgOSwgICAgOSwgICAgMTAsICAgIDEyLCAgICAxNCwgICAgMTgsICAgIDI0LCAgICAz
NyB9LAotICAgICAgeyA5LCAgICA5LCAgICAxMCwgICAgMTMsICAgIDE2LCAgICAyMCwgICAgMjYs
ICAgIDQwIH0sIC8vIGZpeGVkIGZvbnQgZGVmYXVsdCAoMTMpCi0gICAgICB7IDksICAgIDksICAg
IDExLCAgICAxNCwgICAgMTcsICAgIDIxLCAgICAyOCwgICAgNDIgfSwKLSAgICAgIHsgOSwgICAx
MCwgICAgMTIsICAgIDE1LCAgICAxNywgICAgMjMsICAgIDMwLCAgICA0NSB9LAotICAgICAgeyA5
LCAgIDEwLCAgICAxMywgICAgMTYsICAgIDE4LCAgICAyNCwgICAgMzIsICAgIDQ4IH0gLy8gcHJv
cG9ydGlvbmFsIGZvbnQgZGVmYXVsdCAoMTYpCi19OwotLy8gSFRNTCAgICAgICAxICAgICAgMiAg
ICAgIDMgICAgICA0ICAgICAgNSAgICAgIDYgICAgICA3Ci0vLyBDU1MgIHh4cyAgIHhzICAgICBz
ICAgICAgbSAgICAgIGwgICAgIHhsICAgICB4eGwKLS8vICAgICAgICAgICAgICAgICAgICAgICAg
ICB8Ci0vLyAgICAgICAgICAgICAgICAgICAgICB1c2VyIHByZWYKLQotLy8gU3RyaWN0IG1vZGUg
dGFibGUgbWF0Y2hlcyBNYWNJRSBhbmQgTW96aWxsYSdzIHNldHRpbmdzIGV4YWN0bHkuCi1zdGF0
aWMgY29uc3QgaW50IHN0cmljdEZvbnRTaXplVGFibGVbZm9udFNpemVUYWJsZU1heCAtIGZvbnRT
aXplVGFibGVNaW4gKyAxXVt0b3RhbEtleXdvcmRzXSA9Ci17Ci0gICAgICB7IDksICAgIDksICAg
ICA5LCAgICAgOSwgICAgMTEsICAgIDE0LCAgICAxOCwgICAgMjcgfSwKLSAgICAgIHsgOSwgICAg
OSwgICAgIDksICAgIDEwLCAgICAxMiwgICAgMTUsICAgIDIwLCAgICAzMCB9LAotICAgICAgeyA5
LCAgICA5LCAgICAxMCwgICAgMTEsICAgIDEzLCAgICAxNywgICAgMjIsICAgIDMzIH0sCi0gICAg
ICB7IDksICAgIDksICAgIDEwLCAgICAxMiwgICAgMTQsICAgIDE4LCAgICAyNCwgICAgMzYgfSwK
LSAgICAgIHsgOSwgICAxMCwgICAgMTIsICAgIDEzLCAgICAxNiwgICAgMjAsICAgIDI2LCAgICAz
OSB9LCAvLyBmaXhlZCBmb250IGRlZmF1bHQgKDEzKQotICAgICAgeyA5LCAgIDEwLCAgICAxMiwg
ICAgMTQsICAgIDE3LCAgICAyMSwgICAgMjgsICAgIDQyIH0sCi0gICAgICB7IDksICAgMTAsICAg
IDEzLCAgICAxNSwgICAgMTgsICAgIDIzLCAgICAzMCwgICAgNDUgfSwKLSAgICAgIHsgOSwgICAx
MCwgICAgMTMsICAgIDE2LCAgICAxOCwgICAgMjQsICAgIDMyLCAgICA0OCB9IC8vIHByb3BvcnRp
b25hbCBmb250IGRlZmF1bHQgKDE2KQotfTsKLS8vIEhUTUwgICAgICAgMSAgICAgIDIgICAgICAz
ICAgICAgNCAgICAgIDUgICAgICA2ICAgICAgNwotLy8gQ1NTICB4eHMgICB4cyAgICAgcyAgICAg
IG0gICAgICBsICAgICB4bCAgICAgeHhsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgfAot
Ly8gICAgICAgICAgICAgICAgICAgICAgdXNlciBwcmVmCi0KLS8vIEZvciB2YWx1ZXMgb3V0c2lk
ZSB0aGUgcmFuZ2Ugb2YgdGhlIHRhYmxlLCB3ZSB1c2UgVG9kZCBGYWhybmVyJ3Mgc3VnZ2VzdGVk
IHNjYWxlCi0vLyBmYWN0b3JzIGZvciBlYWNoIGtleXdvcmQgdmFsdWUuCi1zdGF0aWMgY29uc3Qg
ZmxvYXQgZm9udFNpemVGYWN0b3JzW3RvdGFsS2V5d29yZHNdID0geyAwLjYwZiwgMC43NWYsIDAu
ODlmLCAxLjBmLCAxLjJmLCAxLjVmLCAyLjBmLCAzLjBmIH07Ci0KLWZsb2F0IFN0eWxlUmVzb2x2
ZXI6OmZvbnRTaXplRm9yS2V5d29yZChEb2N1bWVudCogZG9jdW1lbnQsIGludCBrZXl3b3JkLCBi
b29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpCi17Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdz
ID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFzZXR0aW5ncykKLSAgICAgICAgcmV0
dXJuIDEuMGY7Ci0KLSAgICBib29sIHF1aXJrc01vZGUgPSBkb2N1bWVudC0+aW5RdWlya3NNb2Rl
KCk7Ci0gICAgaW50IG1lZGl1bVNpemUgPSBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplID8gc2V0
dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkgOiBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXpl
KCk7Ci0gICAgaWYgKG1lZGl1bVNpemUgPj0gZm9udFNpemVUYWJsZU1pbiAmJiBtZWRpdW1TaXpl
IDw9IGZvbnRTaXplVGFibGVNYXgpIHsKLSAgICAgICAgLy8gTG9vayB1cCB0aGUgZW50cnkgaW4g
dGhlIHRhYmxlLgotICAgICAgICBpbnQgcm93ID0gbWVkaXVtU2l6ZSAtIGZvbnRTaXplVGFibGVN
aW47Ci0gICAgICAgIGludCBjb2wgPSAoa2V5d29yZCAtIENTU1ZhbHVlWHhTbWFsbCk7Ci0gICAg
ICAgIHJldHVybiBxdWlya3NNb2RlID8gcXVpcmtzRm9udFNpemVUYWJsZVtyb3ddW2NvbF0gOiBz
dHJpY3RGb250U2l6ZVRhYmxlW3Jvd11bY29sXTsKLSAgICB9Ci0KLSAgICAvLyBWYWx1ZSBpcyBv
dXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgdGFibGUuIEFwcGx5IHRoZSBzY2FsZSBmYWN0b3IgaW5z
dGVhZC4KLSAgICBmbG9hdCBtaW5Mb2dpY2FsU2l6ZSA9IG1heChzZXR0aW5ncy0+bWluaW11bUxv
Z2ljYWxGb250U2l6ZSgpLCAxKTsKLSAgICByZXR1cm4gbWF4KGZvbnRTaXplRmFjdG9yc1trZXl3
b3JkIC0gQ1NTVmFsdWVYeFNtYWxsXSptZWRpdW1TaXplLCBtaW5Mb2dpY2FsU2l6ZSk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW50IGZpbmROZWFyZXN0TGVnYWN5Rm9udFNp
emUoaW50IHBpeGVsRm9udFNpemUsIGNvbnN0IFQqIHRhYmxlLCBpbnQgbXVsdGlwbGllcikKLXsK
LSAgICAvLyBJZ25vcmUgdGFibGVbMF0gYmVjYXVzZSB4eC1zbWFsbCBkb2VzIG5vdCBjb3JyZXNw
b25kIHRvIGFueSBsZWdhY3kgZm9udCBzaXplLgotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgdG90
YWxLZXl3b3JkcyAtIDE7IGkrKykgewotICAgICAgICBpZiAocGl4ZWxGb250U2l6ZSAqIDIgPCAo
dGFibGVbaV0gKyB0YWJsZVtpICsgMV0pICogbXVsdGlwbGllcikKLSAgICAgICAgICAgIHJldHVy
biBpOwotICAgIH0KLSAgICByZXR1cm4gdG90YWxLZXl3b3JkcyAtIDE7Ci19Ci0KLWludCBTdHls
ZVJlc29sdmVyOjpsZWdhY3lGb250U2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIGludCBwaXhlbEZv
bnRTaXplLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpCi17Ci0gICAgU2V0dGluZ3Mq
IHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFzZXR0aW5ncykKLSAg
ICAgICAgcmV0dXJuIDE7Ci0KLSAgICBib29sIHF1aXJrc01vZGUgPSBkb2N1bWVudC0+aW5RdWly
a3NNb2RlKCk7Ci0gICAgaW50IG1lZGl1bVNpemUgPSBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXpl
ID8gc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkgOiBzZXR0aW5ncy0+ZGVmYXVsdEZv
bnRTaXplKCk7Ci0gICAgaWYgKG1lZGl1bVNpemUgPj0gZm9udFNpemVUYWJsZU1pbiAmJiBtZWRp
dW1TaXplIDw9IGZvbnRTaXplVGFibGVNYXgpIHsKLSAgICAgICAgaW50IHJvdyA9IG1lZGl1bVNp
emUgLSBmb250U2l6ZVRhYmxlTWluOwotICAgICAgICByZXR1cm4gZmluZE5lYXJlc3RMZWdhY3lG
b250U2l6ZTxpbnQ+KHBpeGVsRm9udFNpemUsIHF1aXJrc01vZGUgPyBxdWlya3NGb250U2l6ZVRh
YmxlW3Jvd10gOiBzdHJpY3RGb250U2l6ZVRhYmxlW3Jvd10sIDEpOwotICAgIH0KLQotICAgIHJl
dHVybiBmaW5kTmVhcmVzdExlZ2FjeUZvbnRTaXplPGZsb2F0PihwaXhlbEZvbnRTaXplLCBmb250
U2l6ZUZhY3RvcnMsIG1lZGl1bVNpemUpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShzaXplLCBmb250
RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCksIG1fc3RhdGUu
c3R5bGUoKSwgZG9jdW1lbnQoKSkpOwogfQogCiBzdGF0aWMgQ29sb3IgY29sb3JGb3JDU1NWYWx1
ZShDU1NWYWx1ZUlEIGNzc1ZhbHVlSWQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmgJKHJldmlzaW9uIDE1Mzg5MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1lbnVtIEVTbWFydE1pbmltdW1Gb3JGb250U2l6ZSB7IERvTm90VXNlU21hcnRNaW5pbXVt
Rm9yRm9udFNpemUsIFVzZVNtYXJ0TWluaW11bUZvckZvbnRGaXplIH07Ci0KIGNsYXNzIENTU0N1
cnNvckltYWdlVmFsdWU7CiBjbGFzcyBDU1NGb250U2VsZWN0b3I7CiBjbGFzcyBDU1NGb250RmFj
ZTsKQEAgLTE5MCw4ICsxODgsNiBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gc3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpOwogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IGRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBzdHlsZUZvckRvY3VtZW50KERvY3VtZW50KiwgQ1NTRm9udFNlbGVjdG9yKiA9
IDApOwotCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
dHlsZSgpOyB9CiAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5wYXJlbnRTdHlsZSgpOyB9CiAgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKTsgfQpAQCAtMjUw
LDEzICsyNDYsNiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+
IHN0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9
IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4g
PiBwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgUHNldWRvSWQsIHVuc2lnbmVk
IHJ1bGVzVG9JbmNsdWRlID0gQWxsQnV0RW1wdHlDU1NSdWxlcyk7CiAKLSAgICAvLyBHaXZlbiBh
IENTUyBrZXl3b3JkIGluIHRoZSByYW5nZSAoeHgtc21hbGwgdG8gLXdlYmtpdC14eHgtbGFyZ2Up
LCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCi0gICAgLy8gdGhlIGNvcnJlY3QgZm9udCBzaXpl
IHNjYWxlZCByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGRlZmF1bHQgKG1lZGl1bSkuCi0gICAgc3Rh
dGljIGZsb2F0IGZvbnRTaXplRm9yS2V5d29yZChEb2N1bWVudCosIGludCBrZXl3b3JkLCBib29s
IHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOwotCi0gICAgLy8gR2l2ZW4gYSBmb250IHNpemUg
aW4gcGl4ZWwsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gbGVnYWN5IGZvbnQgc2l6ZSBiZXR3
ZWVuIDEgYW5kIDcuCi0gICAgc3RhdGljIGludCBsZWdhY3lGb250U2l6ZShEb2N1bWVudCosIGlu
dCBwaXhlbEZvbnRTaXplLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOwotCiBwdWJs
aWM6CiAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1
ZSosIFJlbmRlclN0eWxlKik7CiAKQEAgLTI2NSwxMyArMjU0LDggQEAgcHVibGljOgogICAgIHZv
aWQgdXBkYXRlRm9udCgpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyop
OwogCi0gICAgc3RhdGljIGZsb2F0IGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERv
Y3VtZW50KiwgZmxvYXQgem9vbUZhY3RvciwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3Bl
Y2lmaWVkU2l6ZSwgRVNtYXJ0TWluaW11bUZvckZvbnRTaXplID0gVXNlU21hcnRNaW5pbXVtRm9y
Rm9udEZpemUpOwotCiAgICAgdm9pZCBzZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mLCBmbG9h
dCBzaXplKTsKIAotcHJpdmF0ZToKLSAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJv
bVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBSZW5kZXJTdHlsZSosIGJvb2wgaXNBYnNvbHV0ZVNp
emUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKTsKLQogcHVibGlj
OgogICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAkocmV2aXNpb24gMTUzODkzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0Niw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5o
IgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmgiCiAjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1ZGUgIlN0
eWxlU2hlZXRMaXN0LmgiCkBAIC0xNzgwLDggKzE3ODEsOSBAQCB2b2lkIERvY3VtZW50OjpyZWNh
bGNTdHlsZShTdHlsZTo6Q2hhbmdlCiAgICAgICAgIGlmICgoY2hhbmdlID09IFN0eWxlOjpGb3Jj
ZSkgfHwgKHNob3VsZERpc3BsYXlTZWFtbGVzc2x5V2l0aFBhcmVudCgpICYmIChjaGFuZ2UgPj0g
U3R5bGU6OkluaGVyaXQpKSkgewogICAgICAgICAgICAgLy8gc3R5bGUgc2VsZWN0b3IgbWF5IHNl
dCB0aGlzIGFnYWluIGR1cmluZyByZWNhbGMKICAgICAgICAgICAgIG1faGFzTm9kZXNXaXRoUGxh
Y2Vob2xkZXJTdHlsZSA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IGRvY3VtZW50U3R5bGUgPSBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckRvY3Vt
ZW50KHRoaXMsIG1fc3R5bGVSZXNvbHZlciA/IG1fc3R5bGVSZXNvbHZlci0+Zm9udFNlbGVjdG9y
KCkgOiAwKTsKKworICAgICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBkb2N1bWVudFN0eWxl
ID0gU3R5bGU6OnJlc29sdmVGb3JEb2N1bWVudCh0aGlzKTsKKwogICAgICAgICAgICAgU3R5bGU6
OkNoYW5nZSBkb2N1bWVudENoYW5nZSA9IFN0eWxlOjpkZXRlcm1pbmVDaGFuZ2UoZG9jdW1lbnRT
dHlsZS5nZXQoKSwgcmVuZGVyZXIoKS0+c3R5bGUoKSwgc2V0dGluZ3MoKSk7CiAgICAgICAgICAg
ICBpZiAoZG9jdW1lbnRDaGFuZ2UgIT0gU3R5bGU6Ok5vQ2hhbmdlKQogICAgICAgICAgICAgICAg
IHJlbmRlcmVyKCktPnNldFN0eWxlKGRvY3VtZW50U3R5bGUucmVsZWFzZSgpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDE1Mzg5MykKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUXVhbGlm
aWVkTmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU3R5bGVGb250
U2l6ZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCkBAIC0xNTY3LDEwICsx
NTY4LDEwIEBAIGludCBsZWdhY3lGb250U2l6ZUZyb21DU1NWYWx1ZShEb2N1bWVudCoKIHsKICAg
ICBpZiAoaXNDU1NWYWx1ZUxlbmd0aCh2YWx1ZSkpIHsKICAgICAgICAgaW50IHBpeGVsRm9udFNp
emUgPSB2YWx1ZS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0gICAg
ICAgIGludCBsZWdhY3lGb250U2l6ZSA9IFN0eWxlUmVzb2x2ZXI6OmxlZ2FjeUZvbnRTaXplKGRv
Y3VtZW50LCBwaXhlbEZvbnRTaXplLCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSk7Cisg
ICAgICAgIGludCBsZWdhY3lGb250U2l6ZSA9IFN0eWxlOjpsZWdhY3lGb250U2l6ZUZvclBpeGVs
U2l6ZShwaXhlbEZvbnRTaXplLCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSwgZG9jdW1l
bnQpOwogICAgICAgICAvLyBVc2UgbGVnYWN5IGZvbnQgc2l6ZSBvbmx5IGlmIHBpeGVsIHZhbHVl
IG1hdGNoZXMgZXhhY3RseSB0byB0aGF0IG9mIGxlZ2FjeSBmb250IHNpemUuCiAgICAgICAgIGlu
dCBjc3NQcmltaXRpdmVFcXVpdmFsZW50ID0gbGVnYWN5Rm9udFNpemUgLSAxICsgQ1NTVmFsdWVY
U21hbGw7Ci0gICAgICAgIGlmIChtb2RlID09IEFsd2F5c1VzZUxlZ2FjeUZvbnRTaXplIHx8IFN0
eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCwgY3NzUHJpbWl0aXZlRXF1
aXZhbGVudCwgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUpID09IHBpeGVsRm9udFNpemUp
CisgICAgICAgIGlmIChtb2RlID09IEFsd2F5c1VzZUxlZ2FjeUZvbnRTaXplIHx8IFN0eWxlOjpm
b250U2l6ZUZvcktleXdvcmQoY3NzUHJpbWl0aXZlRXF1aXZhbGVudCwgc2hvdWxkVXNlRml4ZWRG
b250RGVmYXVsdFNpemUsIGRvY3VtZW50KSA9PSBwaXhlbEZvbnRTaXplKQogICAgICAgICAgICAg
cmV0dXJuIGxlZ2FjeUZvbnRTaXplOwogCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24gMTUzODkzKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxMSArNDMsMTMgQEAKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAi
TWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgotI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlLmgidQorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisj
aW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlRm9y
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTIwNCw3ICsyMDYsNyBAQCB2b2lkIEhUTUxMaW5rRWxl
bWVudDo6cHJvY2VzcygpCiAKICAgICAgICAgYm9vbCBtZWRpYVF1ZXJ5TWF0Y2hlcyA9IHRydWU7
CiAgICAgICAgIGlmICghbV9tZWRpYS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHlsZSA9IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRG9jdW1l
bnQoZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGRvY3VtZW50
U3R5bGUgPSBTdHlsZTo6cmVzb2x2ZUZvckRvY3VtZW50KGRvY3VtZW50KCkpOwogICAgICAgICAg
ICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRlQWxs
b3dpbmdEZXNjcmlwdGlvblN5bnRheChtX21lZGlhKTsKICAgICAgICAgICAgIE1lZGlhUXVlcnlF
dmFsdWF0b3IgZXZhbHVhdG9yKGRvY3VtZW50KCktPmZyYW1lKCktPnZpZXcoKS0+bWVkaWFUeXBl
KCksIGRvY3VtZW50KCktPmZyYW1lKCksIGRvY3VtZW50U3R5bGUuZ2V0KCkpOwogICAgICAgICAg
ICAgbWVkaWFRdWVyeU1hdGNoZXMgPSBldmFsdWF0b3IuZXZhbChtZWRpYS5nZXQoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJl
dmlzaW9uIDE1Mzg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MTYsNiArMTcxNiw0NSBAQCBMYXlvdXRCb3hF
eHRlbnQgUmVuZGVyU3R5bGU6OmltYWdlT3V0c2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOaW5lUGllY2VJbWFnZTo6Y29tcHV0ZU91dHNldChpbWFnZS5vdXRzZXQoKS5sZWZ0KCksIGJv
cmRlckxlZnRXaWR0aCgpKSk7CiB9CiAKK3ZvaWQgUmVuZGVyU3R5bGU6OmdldEZvbnRBbmRHbHlw
aE9yaWVudGF0aW9uKEZvbnRPcmllbnRhdGlvbiYgZm9udE9yaWVudGF0aW9uLCBOb25DSktHbHlw
aE9yaWVudGF0aW9uJiBnbHlwaE9yaWVudGF0aW9uKQoreworICAgIGlmIChpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKSB7CisgICAgICAgIGZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWw7Cisg
ICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxS
aWdodDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaCAodGV4dE9yaWVudGF0
aW9uKCkpIHsKKyAgICBjYXNlIFRleHRPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ6CisgICAgICAg
IGZvbnRPcmllbnRhdGlvbiA9IFZlcnRpY2FsOworICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0g
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFRleHRPcmllbnRhdGlvblVwcmlnaHQ6CisgICAgICAgIGZvbnRPcmllbnRhdGlvbiA9
IFZlcnRpY2FsOworICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRh
dGlvblVwcmlnaHQ7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFRleHRPcmllbnRhdGlvblNp
ZGV3YXlzOgorICAgICAgICBpZiAod3JpdGluZ01vZGUoKSA9PSBMZWZ0VG9SaWdodFdyaXRpbmdN
b2RlKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbWFwIHRvIHNpZGV3YXlz
LWxlZnQsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgorICAgICAgICAgICAgZm9udE9yaWVu
dGF0aW9uID0gVmVydGljYWw7CisgICAgICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0gTm9uQ0pL
R2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgZm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbDsKKyAgICAgICAgZ2x5
cGhPcmllbnRhdGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBUZXh0T3JpZW50YXRpb25TaWRld2F5c1JpZ2h0OgorICAg
ICAgICBmb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsOworICAgICAgICBnbHlwaE9yaWVudGF0
aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7CisgICAgICAgIHJldHVy
bjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
Zm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbDsKKyAgICAgICAgZ2x5cGhPcmllbnRhdGlvbiA9
IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OworICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCiB2b2lkIFJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZVNvdXJjZShQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IGltYWdlKQogewogICAgIGlmIChzdXJyb3VuZC0+Ym9yZGVyLm1faW1h
Z2UuaW1hZ2UoKSA9PSBpbWFnZS5nZXQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAxNTM4OTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTU3
LDYgKzU1Nyw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCBzcGVjaWZpZWRGb250U2l6ZSgpIGNvbnN0
OwogICAgIGZsb2F0IGNvbXB1dGVkRm9udFNpemUoKSBjb25zdDsKICAgICBpbnQgZm9udFNpemUo
KSBjb25zdDsKKyAgICB2b2lkIGdldEZvbnRBbmRHbHlwaE9yaWVudGF0aW9uKEZvbnRPcmllbnRh
dGlvbiYsIE5vbkNKS0dseXBoT3JpZW50YXRpb24mKTsKIAogI2lmIEVOQUJMRShURVhUX0FVVE9T
SVpJTkcpCiAgICAgZmxvYXQgdGV4dEF1dG9zaXppbmdNdWx0aXBsaWVyKCkgY29uc3QgeyByZXR1
cm4gdmlzdWFsLT5tX3RleHRBdXRvc2l6aW5nTXVsdGlwbGllcjsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShy
ZXZpc2lvbiAxNTM4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0lubGluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiU1ZHSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCisjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1
bmN0aW9ucy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJWaXNpYmxl
UG9zaXRpb24uaCIKIApAQCAtMjQxLDcgKzI0Miw3IEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4
dDo6Y29tcHV0ZU5ld1NjYWwKICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKHN0
eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CiAKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBiZXR0
ZXIgaGFuZGxlIHRoZSBjYXNlIHdoZW4gd2UgY29tcHV0ZSB2ZXJ5IHNtYWxsIGZvbnRzIGJlbG93
IChiZWxvdyAxcHQpLgotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGVS
ZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQsIHNjYWxp
bmdGYWN0b3IsIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRp
b24uY29tcHV0ZWRTaXplKCksIERvTm90VXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUpKTsKKyAg
ICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpjb21wdXRlZEZvbnRTaXpl
RnJvbVNwZWNpZmllZFNpemVGb3JTVkdJbmxpbmVUZXh0KGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZFNpemUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNjYWxpbmdGYWN0b3Is
IGRvY3VtZW50KSk7CiAKICAgICBzY2FsZWRGb250ID0gRm9udChmb250RGVzY3JpcHRpb24sIDAs
IDApOwogICAgIHNjYWxlZEZvbnQudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3Rvcigp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlRm9udFNpemVGdW5jdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlRm9udFNpemVGdW5jdGlv
bnMuY3BwCShyZXZpc2lvbiAxNTM4MTYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmNwcDoxNTM4MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUZvbnRTaXpl
RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyODEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAg
ICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNr
c2hhbmtzLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmln
aHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgi
CisKKyNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZS5oIgor
I2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NDdXJzb3JJbWFn
ZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSAi
Q1NTRm9udEZhY2VSdWxlLmgiCisjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCisjaW5jbHVk
ZSAiQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1BhZ2VSdWxlLmgiCisj
aW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5n
cy5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NSZWZsZWN0
VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1NlbGVjdG9y
TGlzdC5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNTU1N1cHBvcnRz
UnVsZS5oIgorI2luY2x1ZGUgIkNTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJD
U1NWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkNhbGN1
bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDb250ZW50RGF0YS5oIgorI2luY2x1ZGUgIkNvbnRl
eHRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIkNvdW50ZXIuaCIKKyNpbmNsdWRlICJDb3VudGVyQ29u
dGVudC5oIgorI2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVkU3R5
bGVCdWlsZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIgor
I2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVjdG9yLmgiCisjaW5jbHVkZSAiRWxlbWVudFNoYWRv
dy5oIgorI2luY2x1ZGUgIkZvbnRGZWF0dXJlVmFsdWUuaCIKKyNpbmNsdWRlICJGb250VmFsdWUu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAi
SFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFByb2dyZXNzRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGFibGVF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgorI2luY2x1ZGUgIklu
c2VydGlvblBvaW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisj
aW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCisjaW5jbHVkZSAiTGlua0hhc2guaCIKKyNpbmNsdWRl
ICJMb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCIKKyNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIk1lZGlhTGlzdC5oIgorI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKKyNp
bmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4
dC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlUnVsZUNvbGxlY3Rvci5oIgor
I2luY2x1ZGUgIlBhaXIuaCIKKyNpbmNsdWRlICJRdW90ZXNEYXRhLmgiCisjaW5jbHVkZSAiUmVj
dC5oIgorI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgorI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJh
ci5oIgorI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAiUmVuZGVy
U3R5bGVDb25zdGFudHMuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKKyNpbmNsdWRlICJSdWxlU2V0LmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRF
eHRlbnNpb25zLmgiCisjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCisjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXJGYXN0UGF0aC5oIgor
I2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2hhZG93RGF0YS5oIgorI2luY2x1ZGUg
IlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTaGFkb3dWYWx1ZS5oIgorI2luY2x1ZGUgIlN0eWxl
Q2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCisjaW5jbHVk
ZSAiU3R5bGVQZW5kaW5nSW1hZ2UuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisj
aW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIgorI2luY2x1ZGUgIlN0eWxlUnVsZS5o
IgorI2luY2x1ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250
ZW50cy5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCisjaW5jbHVkZSAiVGV4dC5oIgor
I2luY2x1ZGUgIlRyYW5zZm9ybUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJh
dGlvbnMuaCIKKyNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgorI2luY2x1ZGUgIlZp
ZXdwb3J0U3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTUmVnaW9uUnVsZS5oIgorI2luY2x1ZGUg
IldlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgiCisjaW5jbHVkZSAiV2ViS2l0Rm9udEZhbWlseU5h
bWVzLmgiCisjaW5jbHVkZSAiWE1MTmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQor
I2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIldlYktpdENTU0ZpbHRlclZh
bHVlLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQorI2luY2x1ZGUgIkNT
U0ltYWdlU2V0VmFsdWUuaCIKKyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlU2V0LmgiCisjZW5k
aWYKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJBcnJh
eVBhcmFtZXRlci5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlckNvbG9yUGFyYW1ldGVyLmgiCisj
aW5jbHVkZSAiQ3VzdG9tRmlsdGVyQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVy
TnVtYmVyUGFyYW1ldGVyLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCisj
aW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFyYW1ldGVyLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVy
UHJvZ3JhbUluZm8uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIu
aCIKKyNpbmNsdWRlICJTdHlsZUNhY2hlZFNoYWRlci5oIgorI2luY2x1ZGUgIlN0eWxlQ3VzdG9t
RmlsdGVyUHJvZ3JhbS5oIgorI2luY2x1ZGUgIlN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hl
LmgiCisjaW5jbHVkZSAiU3R5bGVQZW5kaW5nU2hhZGVyLmgiCisjaW5jbHVkZSAiU3R5bGVTaGFk
ZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NNaXhGdW5jdGlvblZhbHVlLmgiCisjaW5jbHVkZSAi
V2ViS2l0Q1NTU2hhZGVyVmFsdWUuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKENTU19TSEFQRVMp
CisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxF
KENTU19WQVJJQUJMRVMpCisjaW5jbHVkZSAiQ1NTVmFyaWFibGVWYWx1ZS5oIgorI2VuZGlmCisK
KyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisjaW5jbHVkZSAiRGFzaGJvYXJkUmVnaW9u
LmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorI2luY2x1
ZGUgIkhUTUxBdWRpb0VsZW1lbnQuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNs
dWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVm
ZXJlbmNlLmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50
LmgiCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIK
KyNpbmNsdWRlICJXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlLmgiCisjZW5kaWYKKworI2lmIEVO
QUJMRShWSURFT19UUkFDSykKKyNpbmNsdWRlICJXZWJWVFRFbGVtZW50LmgiCisjZW5kaWYKKwor
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOworCisjZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwK
K2lmIChpc0luaGVyaXQpIHsgXAorICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9wKG1fc3Rh
dGUucGFyZW50U3R5bGUoKS0+cHJvcCgpKTsgXAorICAgIHJldHVybjsgXAorfQorCisjZGVmaW5l
IEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKK0hBTkRMRV9JTkhFUklU
KHByb3AsIFByb3ApIFwKK2lmIChpc0luaXRpYWwpIHsgXAorICAgIG1fc3RhdGUuc3R5bGUoKS0+
c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCisgICAgcmV0dXJuOyBc
Cit9CisKK1JlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpzX3N0eWxlTm90WWV0QXZhaWxhYmxl
OworCitpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2FjaGVCb3JkZXJBbmRCYWNr
Z3JvdW5kKCkKK3sKKyAgICBtX2hhc1VBQXBwZWFyYW5jZSA9IG1fc3R5bGUtPmhhc0FwcGVhcmFu
Y2UoKTsKKyAgICBpZiAobV9oYXNVQUFwcGVhcmFuY2UpIHsKKyAgICAgICAgbV9ib3JkZXJEYXRh
ID0gbV9zdHlsZS0+Ym9yZGVyKCk7CisgICAgICAgIG1fYmFja2dyb3VuZERhdGEgPSAqbV9zdHls
ZS0+YmFja2dyb3VuZExheWVycygpOworICAgICAgICBtX2JhY2tncm91bmRDb2xvciA9IG1fc3R5
bGUtPmJhY2tncm91bmRDb2xvcigpOworICAgIH0KK30KKworaW5saW5lIHZvaWQgU3R5bGVSZXNv
bHZlcjo6U3RhdGU6OmNsZWFyKCkKK3sKKyAgICBtX2VsZW1lbnQgPSAwOworICAgIG1fc3R5bGVk
RWxlbWVudCA9IDA7CisgICAgbV9wYXJlbnRTdHlsZSA9IDA7CisgICAgbV9wYXJlbnROb2RlID0g
MDsKKyAgICBtX3JlZ2lvbkZvclN0eWxpbmcgPSAwOworICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVy
dGllcy5jbGVhcigpOworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBtX2hhc1BlbmRpbmdT
aGFkZXJzID0gZmFsc2U7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJM
RShTVkcpCisgICAgbV9wZW5kaW5nU1ZHRG9jdW1lbnRzLmNsZWFyKCk7CisjZW5kaWYKK30KKwor
dm9pZCBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdDo6YWRkTWF0Y2hlZFByb3BlcnRpZXMoY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCYgcHJvcGVydGllcywgU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25l
ZCBsaW5rTWF0Y2hUeXBlLCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVydHlXaGl0ZWxpc3RU
eXBlKQoreworICAgIG1hdGNoZWRQcm9wZXJ0aWVzLmdyb3cobWF0Y2hlZFByb3BlcnRpZXMuc2l6
ZSgpICsgMSk7CisgICAgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIG5ld1Byb3Bl
cnRpZXMgPSBtYXRjaGVkUHJvcGVydGllcy5sYXN0KCk7CisgICAgbmV3UHJvcGVydGllcy5wcm9w
ZXJ0aWVzID0gY29uc3RfY2FzdDxTdHlsZVByb3BlcnR5U2V0Kj4oJnByb3BlcnRpZXMpOworICAg
IG5ld1Byb3BlcnRpZXMubGlua01hdGNoVHlwZSA9IGxpbmtNYXRjaFR5cGU7CisgICAgbmV3UHJv
cGVydGllcy53aGl0ZWxpc3RUeXBlID0gcHJvcGVydHlXaGl0ZWxpc3RUeXBlOworICAgIG1hdGNo
ZWRSdWxlcy5hcHBlbmQocnVsZSk7Cit9CisKK1N0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIo
RG9jdW1lbnQqIGRvY3VtZW50LCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKKyAgICA6
IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwKDApCisgICAg
LCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyKHRoaXMsICZTdHlsZVJlc29sdmVy
Ojpzd2VlcE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpCisgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50
KQorICAgICwgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMobWF0Y2hBdXRob3JBbmRVc2VyU3R5
bGVzKQorICAgICwgbV9mb250U2VsZWN0b3IoQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoZG9jdW1l
bnQpKQorI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCisgICAgLCBtX3ZpZXdwb3J0
U3R5bGVSZXNvbHZlcihWaWV3cG9ydFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZShkb2N1bWVudCkpCisj
ZW5kaWYKKyAgICAsIG1fZGVwcmVjYXRlZFN0eWxlQnVpbGRlcihEZXByZWNhdGVkU3R5bGVCdWls
ZGVyOjpzaGFyZWRTdHlsZUJ1aWxkZXIoKSkKKyAgICAsIG1fc3R5bGVNYXAodGhpcykKK3sKKyAg
ICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworCisgICAgQ1NT
RGVmYXVsdFN0eWxlU2hlZXRzOjppbml0RGVmYXVsdFN0eWxlKHJvb3QpOworCisgICAgLy8gY29u
c3RydWN0IGRvY3VtZW50IHJvb3QgZWxlbWVudCBkZWZhdWx0IHN0eWxlLiB0aGlzIGlzIG5lZWRl
ZAorICAgIC8vIHRvIGV2YWx1YXRlIG1lZGlhIHF1ZXJpZXMgdGhhdCBjb250YWluIHJlbGF0aXZl
IGNvbnN0cmFpbnRzLCBsaWtlICJzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwZW0pIgorICAgIC8v
IFRoaXMgaXMgaGVyZSBpbnN0ZWFkIG9mIGNvbnN0cnVjdG9yLCBiZWNhdXNlIHdoZW4gY29uc3Ry
dWN0b3IgaXMgcnVuLAorICAgIC8vIGRvY3VtZW50IGRvZXNuJ3QgaGF2ZSBkb2N1bWVudEVsZW1l
bnQKKyAgICAvLyBOT1RFOiB0aGlzIGFzc3VtZXMgdGhhdCBlbGVtZW50IHRoYXQgZ2V0cyBwYXNz
ZWQgdG8gc3R5bGVGb3JFbGVtZW50IC1jYWxsCisgICAgLy8gaXMgYWx3YXlzIGZyb20gdGhlIGRv
Y3VtZW50IHRoYXQgb3ducyB0aGUgc3R5bGUgc2VsZWN0b3IKKyAgICBGcmFtZVZpZXcqIHZpZXcg
PSBkb2N1bWVudC0+dmlldygpOworICAgIGlmICh2aWV3KQorICAgICAgICBtX21lZGl1bSA9IGFk
b3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpKSk7CisgICAg
ZWxzZQorICAgICAgICBtX21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9y
KCJhbGwiKSk7CisKKyAgICBpZiAocm9vdCkKKyAgICAgICAgbV9yb290RGVmYXVsdFN0eWxlID0g
c3R5bGVGb3JFbGVtZW50KHJvb3QsIDAsIERpc2FsbG93U3R5bGVTaGFyaW5nLCBNYXRjaE9ubHlV
c2VyQWdlbnRSdWxlcyk7CisKKyAgICBpZiAobV9yb290RGVmYXVsdFN0eWxlICYmIHZpZXcpCisg
ICAgICAgIG1fbWVkaXVtID0gYWRvcHRQdHIobmV3IE1lZGlhUXVlcnlFdmFsdWF0b3Iodmlldy0+
bWVkaWFUeXBlKCksIHZpZXctPmZyYW1lKCksIG1fcm9vdERlZmF1bHRTdHlsZS5nZXQoKSkpOwor
CisgICAgbV9ydWxlU2V0cy5yZXNldEF1dGhvclN0eWxlKCk7CisKKyAgICBEb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uKiBzdHlsZVNoZWV0Q29sbGVjdGlvbiA9IGRvY3VtZW50LT5zdHlsZVNo
ZWV0Q29sbGVjdGlvbigpOworICAgIG1fcnVsZVNldHMuaW5pdFVzZXJTdHlsZShzdHlsZVNoZWV0
Q29sbGVjdGlvbiwgKm1fbWVkaXVtLCAqdGhpcyk7CisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQor
ICAgIGlmIChkb2N1bWVudC0+c3ZnRXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGNvbnN0IEhhc2hT
ZXQ8U1ZHRm9udEZhY2VFbGVtZW50Kj4mIHN2Z0ZvbnRGYWNlRWxlbWVudHMgPSBkb2N1bWVudC0+
c3ZnRXh0ZW5zaW9ucygpLT5zdmdGb250RmFjZUVsZW1lbnRzKCk7CisgICAgICAgIEhhc2hTZXQ8
U1ZHRm9udEZhY2VFbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN2Z0ZvbnRGYWNlRWxl
bWVudHMuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxTVkdGb250RmFjZUVsZW1lbnQqPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBzdmdGb250RmFjZUVsZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgICAgIGZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoKCpp
dCktPmZvbnRGYWNlUnVsZSgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIGFwcGVuZEF1dGhvclN0
eWxlU2hlZXRzKDAsIHN0eWxlU2hlZXRDb2xsZWN0aW9uLT5hY3RpdmVBdXRob3JTdHlsZVNoZWV0
cygpKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyh1
bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+JiBz
dHlsZVNoZWV0cykKK3sKKyAgICBtX3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGZp
cnN0TmV3LCBzdHlsZVNoZWV0cywgbV9tZWRpdW0uZ2V0KCksIG1faW5zcGVjdG9yQ1NTT01XcmFw
cGVycywgZG9jdW1lbnQoKS0+aXNWaWV3U291cmNlKCksIHRoaXMpOworICAgIGlmIChkb2N1bWVu
dCgpLT5yZW5kZXJlcigpICYmIGRvY3VtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCkpCisgICAg
ICAgIGRvY3VtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNl
bGVjdG9yKCkpOworCisjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKKyAgICB2aWV3
cG9ydFN0eWxlUmVzb2x2ZXIoKS0+cmVzb2x2ZSgpOworI2VuZGlmCit9CisKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6cHVzaFBhcmVudEVsZW1lbnQoRWxlbWVudCogcGFyZW50KQoreworICAgIGNvbnN0
IENvbnRhaW5lck5vZGUqIHBhcmVudHNQYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9yU2hhZG93SG9z
dEVsZW1lbnQoKTsKKworICAgIC8vIFdlIGFyZSBub3QgYWx3YXlzIGludm9rZWQgY29uc2lzdGVu
dGx5LiBGb3IgZXhhbXBsZSwgc2NyaXB0IGV4ZWN1dGlvbiBjYW4gY2F1c2UgdXMgdG8gZW50ZXIK
KyAgICAvLyBzdHlsZSByZWNhbGMgaW4gdGhlIG1pZGRsZSBvZiB0cmVlIGJ1aWxkaW5nLiBXZSBt
YXkgYWxzbyBiZSBpbnZva2VkIGZyb20gc29tZXdoZXJlIHdpdGhpbiB0aGUgdHJlZS4KKyAgICAv
LyBSZXNldCB0aGUgc3RhY2sgaW4gdGhpcyBjYXNlLCBvciBpZiB3ZSBzZWUgYSBuZXcgcm9vdCBl
bGVtZW50LgorICAgIC8vIE90aGVyd2lzZSBqdXN0IHB1c2ggdGhlIG5ldyBwYXJlbnQuCisgICAg
aWYgKCFwYXJlbnRzUGFyZW50IHx8IG1fc2VsZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0VtcHR5
KCkpCisgICAgICAgIG1fc2VsZWN0b3JGaWx0ZXIuc2V0dXBQYXJlbnRTdGFjayhwYXJlbnQpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9zZWxlY3RvckZpbHRlci5wdXNoUGFyZW50KHBhcmVudCk7CisK
KyAgICAvLyBOb3RlOiBXZSBtdXN0bid0IHNraXAgU2hhZG93Um9vdCBub2RlcyBmb3IgdGhlIHNj
b3BlIHN0YWNrLgorICAgIGlmIChtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAgIG1fc2NvcGVSZXNv
bHZlci0+cHVzaChwYXJlbnQsIHBhcmVudC0+cGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpKTsKK30K
Kwordm9pZCBTdHlsZVJlc29sdmVyOjpwb3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqIHBhcmVudCkK
K3sKKyAgICAvLyBOb3RlIHRoYXQgd2UgbWF5IGdldCBpbnZva2VkIGZvciBzb21lIHJhbmRvbSBl
bGVtZW50cyBpbiBzb21lIHdhY2t5IGNhc2VzIGR1cmluZyBzdHlsZSByZXNvbHZlLgorICAgIC8v
IFBhdXNlIG1haW50YWluaW5nIHRoZSBzdGFjayBpbiB0aGlzIGNhc2UuCisgICAgaWYgKG1fc2Vs
ZWN0b3JGaWx0ZXIucGFyZW50U3RhY2tJc0NvbnNpc3RlbnQocGFyZW50KSkKKyAgICAgICAgbV9z
ZWxlY3RvckZpbHRlci5wb3BQYXJlbnQoKTsKKyAgICBpZiAobV9zY29wZVJlc29sdmVyKQorICAg
ICAgICBtX3Njb3BlUmVzb2x2ZXItPnBvcChwYXJlbnQpOworfQorCit2b2lkIFN0eWxlUmVzb2x2
ZXI6OnB1c2hQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCit7
CisgICAgQVNTRVJUKHNoYWRvd1Jvb3QtPmhvc3QoKSk7CisgICAgaWYgKG1fc2NvcGVSZXNvbHZl
cikKKyAgICAgICAgbV9zY29wZVJlc29sdmVyLT5wdXNoKHNoYWRvd1Jvb3QsIHNoYWRvd1Jvb3Qt
Pmhvc3QoKSk7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6cG9wUGFyZW50U2hhZG93Um9vdChj
b25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KQoreworICAgIEFTU0VSVChzaGFkb3dSb290LT5o
b3N0KCkpOworICAgIGlmIChtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAgIG1fc2NvcGVSZXNvbHZl
ci0+cG9wKHNoYWRvd1Jvb3QpOworfQorCisvLyBUaGlzIGlzIGEgc2ltcGxpZmllZCBzdHlsZSBz
ZXR0aW5nIGZ1bmN0aW9uIGZvciBrZXlmcmFtZSBzdHlsZXMKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
YWRkS2V5ZnJhbWVTdHlsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUtleWZyYW1lcz4gcnVsZSkKK3sK
KyAgICBBdG9taWNTdHJpbmcgcyhydWxlLT5uYW1lKCkpOworICAgIG1fa2V5ZnJhbWVzUnVsZU1h
cC5zZXQocy5pbXBsKCksIHJ1bGUpOworfQorCitTdHlsZVJlc29sdmVyOjp+U3R5bGVSZXNvbHZl
cigpCit7CisgICAgbV9mb250U2VsZWN0b3ItPmNsZWFyRG9jdW1lbnQoKTsKKworI2lmIEVOQUJM
RShDU1NfREVWSUNFX0FEQVBUQVRJT04pCisgICAgbV92aWV3cG9ydFN0eWxlUmVzb2x2ZXItPmNs
ZWFyRG9jdW1lbnQoKTsKKyNlbmRpZgorfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZShUaW1lcjxTdHlsZVJlc29sdmVyPiopCit7CisgICAgLy8gTG9v
ayBmb3IgY2FjaGUgZW50cmllcyBjb250YWluaW5nIGEgc3R5bGUgZGVjbGFyYXRpb24gd2l0aCBh
IHNpbmdsZSByZWYgYW5kIHJlbW92ZSB0aGVtLgorICAgIC8vIFRoaXMgbWF5IGhhcHBlbiB3aGVu
IGFuIGVsZW1lbnQgYXR0cmlidXRlIG11dGF0aW9uIGNhdXNlcyBpdCB0byBnZW5lcmF0ZSBhIG5l
dyBpbmxpbmVTdHlsZSgpCisgICAgLy8gb3IgcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSwg
cG90ZW50aWFsbHkgbGVhdmluZyB0aGlzIGNhY2hlIHdpdGggdGhlIGxhc3QgcmVmIG9uIHRoZSBv
bGQgb25lLgorICAgIFZlY3Rvcjx1bnNpZ25lZCwgMTY+IHRvUmVtb3ZlOworICAgIE1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmJl
Z2luKCk7CisgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6aXRlcmF0b3IgZW5kID0gbV9tYXRj
aGVkUHJvcGVydGllc0NhY2hlLmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgVmVjdG9yPE1hdGNoZWRQcm9wZXJ0aWVzPiYgbWF0Y2hlZFByb3BlcnRpZXMgPSBp
dC0+dmFsdWUubWF0Y2hlZFByb3BlcnRpZXM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtYXRj
aGVkUHJvcGVydGllc1tpXS5wcm9wZXJ0aWVzLT5oYXNPbmVSZWYoKSkgeworICAgICAgICAgICAg
ICAgIHRvUmVtb3ZlLmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHRvUmVtb3ZlLnNpemUoKTsgKytpKQorICAgICAgICBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUu
cmVtb3ZlKHRvUmVtb3ZlW2ldKTsKKworICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0
aW9uc1NpbmNlTGFzdFN3ZWVwID0gMDsKK30KKworaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6
c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpCit7CisjaWYgRU5BQkxFKFNI
QURPV19ET00pCisgICAgcmV0dXJuIG1fc2NvcGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXIt
PnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMobV9zdGF0ZS5lbGVtZW50KCkp
OworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworYm9vbCBTdHlsZVJlc29s
dmVyOjpjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNs
YXNzTmFtZXMpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNsYXNzTmFt
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcnVsZVNldHMuZmVhdHVyZXMoKS5jbGFz
c2VzSW5SdWxlcy5jb250YWlucyhjbGFzc05hbWVzW2ldLmltcGwoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgdm9pZCBT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6aW5pdEVsZW1lbnQoRWxlbWVudCogZSkKK3sKKyAgICBtX2Vs
ZW1lbnQgPSBlOworICAgIG1fc3R5bGVkRWxlbWVudCA9IGUgJiYgZS0+aXNTdHlsZWRFbGVtZW50
KCkgPyBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZSkgOiAwOworICAgIG1fZWxlbWVudExp
bmtTdGF0ZSA9IGUgPyBlLT5kb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCktPmRldGVybWlu
ZUxpbmtTdGF0ZShlKSA6IE5vdEluc2lkZUxpbms7Cit9CisKK2lubGluZSB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCit7CisgICAgaWYgKG1fc3RhdGUuZWxlbWVu
dCgpICE9IGUpIHsKKyAgICAgICAgbV9zdGF0ZS5pbml0RWxlbWVudChlKTsKKyAgICAgICAgaWYg
KGUgJiYgZSA9PSBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkgeworICAgICAgICAg
ICAgZS0+ZG9jdW1lbnQoKS0+c2V0RGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2Up
OworICAgICAgICAgICAgZS0+ZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVTZXRPbkRvY3VtZW50
RWxlbWVudChmYWxzZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2lubGluZSB2b2lkIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlOjppbml0Rm9yU3R5bGVSZXNvbHZlKERvY3VtZW50KiBkb2N1bWVudCwg
RWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBSZW5kZXJSZWdpb24qIHJlZ2lv
bkZvclN0eWxpbmcpCit7CisgICAgbV9yZWdpb25Gb3JTdHlsaW5nID0gcmVnaW9uRm9yU3R5bGlu
ZzsKKworICAgIGlmIChlKSB7CisgICAgICAgIE5vZGVSZW5kZXJpbmdDb250ZXh0IGNvbnRleHQo
ZSk7CisgICAgICAgIG1fcGFyZW50Tm9kZSA9IGNvbnRleHQucGFyZW50Tm9kZUZvclJlbmRlcmlu
Z0FuZFN0eWxlKCk7CisgICAgICAgIG1fcGFyZW50U3R5bGUgPSBjb250ZXh0LnJlc2V0U3R5bGVJ
bmhlcml0YW5jZSgpID8gMCA6CisgICAgICAgICAgICBwYXJlbnRTdHlsZSA/IHBhcmVudFN0eWxl
IDoKKyAgICAgICAgICAgIG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUo
KSA6IDA7CisgICAgICAgIG1fZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50ID0gY29udGV4dC5p
bnNlcnRpb25Qb2ludCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGFyZW50Tm9kZSA9IDA7
CisgICAgICAgIG1fcGFyZW50U3R5bGUgPSBwYXJlbnRTdHlsZTsKKyAgICAgICAgbV9kaXN0cmli
dXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBOb2RlKiBkb2NFbGVt
ZW50ID0gZSA/IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpIDogMDsKKyAgICBSZW5k
ZXJTdHlsZSogZG9jU3R5bGUgPSBkb2N1bWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICBtX3Jvb3RF
bGVtZW50U3R5bGUgPSBkb2NFbGVtZW50ICYmIGUgIT0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQt
PnJlbmRlclN0eWxlKCkgOiBkb2NTdHlsZTsKKworICAgIG1fc3R5bGUgPSAwOworICAgIG1fcGVu
ZGluZ0ltYWdlUHJvcGVydGllcy5jbGVhcigpOworICAgIG1fZm9udERpcnR5ID0gZmFsc2U7Cit9
CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hUaHJlc2hvbGQgPSAxMDsKK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBjU3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCA9IDEwOworCitz
dGF0aWMgaW5saW5lIGJvb2wgcGFyZW50RWxlbWVudFByZXZlbnRzU2hhcmluZyhjb25zdCBFbGVt
ZW50KiBwYXJlbnRFbGVtZW50KQoreworICAgIGlmICghcGFyZW50RWxlbWVudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBwYXJlbnRFbGVtZW50LT5oYXNGbGFnc1NldER1cmlu
Z1N0eWxpbmdPZkNoaWxkcmVuKCk7Cit9CisKK05vZGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZUNv
dXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VudCkgY29u
c3QKK3sKKyAgICBpZiAodmlzaXRlZE5vZGVDb3VudCA+PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQg
KiBjU3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYg
KCFwYXJlbnQgfHwgIXBhcmVudC0+aXNTdHlsZWRFbGVtZW50KCkpCisgICAgICAgIHJldHVybiAw
OworICAgIGlmIChwYXJlbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIFN0eWxlZEVsZW1lbnQqIHAgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50
Kj4ocGFyZW50KTsKKyAgICBpZiAocC0+aW5saW5lU3R5bGUoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAocC0+aXNTVkdFbGVtZW50KCkgJiYgdG9TVkdFbGVt
ZW50KHApLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisjZW5kaWYKKyAgICBpZiAocC0+aGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRz
SW5SdWxlcy5jb250YWlucyhwLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gcC0+cmVuZGVy
U3R5bGUoKTsKKyAgICB1bnNpZ25lZCBzdWJjb3VudCA9IDA7CisgICAgTm9kZSogdGhpc0NvdXNp
biA9IHA7CisgICAgTm9kZSogY3VycmVudE5vZGUgPSBwLT5wcmV2aW91c1NpYmxpbmcoKTsKKwor
ICAgIC8vIFJlc2VydmUgdGhlIHRyaWVzIGZvciB0aGlzIGxldmVsLiBUaGlzIGVmZmVjdGl2ZWx5
IG1ha2VzIHN1cmUgdGhhdCB0aGUgYWxnb3JpdGhtCisgICAgLy8gd2lsbCBuZXZlciBnbyBkZWVw
ZXIgdGhhbiBjU3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCBsZXZlbHMgaW50byByZWN1cnNpb24u
CisgICAgdmlzaXRlZE5vZGVDb3VudCArPSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQ7CisgICAgd2hp
bGUgKHRoaXNDb3VzaW4pIHsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnROb2RlKSB7CisgICAgICAg
ICAgICArK3N1YmNvdW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5yZW5kZXJTdHls
ZSgpID09IHBhcmVudFN0eWxlICYmIGN1cnJlbnROb2RlLT5sYXN0Q2hpbGQoKQorICAgICAgICAg
ICAgICAgICYmIGN1cnJlbnROb2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXBhcmVudEVsZW1lbnRQ
cmV2ZW50c1NoYXJpbmcodG9FbGVtZW50KGN1cnJlbnROb2RlKSkKKyNpZiBFTkFCTEUoU0hBRE9X
X0RPTSkKKyAgICAgICAgICAgICAgICAmJiAhdG9FbGVtZW50KGN1cnJlbnROb2RlKS0+c2hhZG93
KCkKKyNlbmRpZgorICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIC8vIEFkanVz
dCBmb3IgdW51c2VkIHJlc2VydmVkIHRyaWVzLgorICAgICAgICAgICAgICAgIHZpc2l0ZWROb2Rl
Q291bnQgLT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkIC0gc3ViY291bnQ7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGN1cnJlbnROb2RlLT5sYXN0Q2hpbGQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChzdWJjb3VudCA+PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5w
cmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50Tm9kZSA9IGxvY2F0
ZUNvdXNpbkxpc3QodGhpc0NvdXNpbi0+cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNvdW50
KTsKKyAgICAgICAgdGhpc0NvdXNpbiA9IGN1cnJlbnROb2RlOworICAgIH0KKworICAgIHJldHVy
biAwOworfQorCitib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNo
ZXNSdWxlU2V0KFJ1bGVTZXQqIHJ1bGVTZXQpCit7CisgICAgaWYgKCFydWxlU2V0KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IodGhp
cywgbV9zdGF0ZSk7CisgICAgcmV0dXJuIGNvbGxlY3Rvci5oYXNBbnlNYXRjaGluZ1J1bGVzKHJ1
bGVTZXQpOworfQorCitib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJv
bChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIGNvbnN0IFN0YXRlJiBzdGF0
ZSA9IG1fc3RhdGU7CisgICAgSFRNTElucHV0RWxlbWVudCogdGhpc0lucHV0RWxlbWVudCA9IGVs
ZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1
dEVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50KCktPnRvSW5wdXRFbGVtZW50KCk7CisKKyAgICBpZiAo
IXRoaXNJbnB1dEVsZW1lbnQgfHwgIW90aGVySW5wdXRFbGVtZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+ZWxlbWVudERhdGEoKSAhPSBvdGhl
cklucHV0RWxlbWVudC0+ZWxlbWVudERhdGEoKSkgeworICAgICAgICBpZiAodGhpc0lucHV0RWxl
bWVudC0+ZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cikgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmZh
c3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShyZWFkb25seUF0dHIp
ICE9IG90aGVySW5wdXRFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHRoaXNJbnB1dEVsZW1l
bnQtPmlzQXV0b2ZpbGxlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5zaG91bGRB
cHBlYXJDaGVja2VkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5zaG91
bGRBcHBlYXJJbmRldGVybWluYXRlKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVh
ckluZGV0ZXJtaW5hdGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh0aGlzSW5w
dXRFbGVtZW50LT5pc1JlcXVpcmVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmlzUmVxdWlyZWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGVsZW1lbnQtPmlzRGlzYWJsZWRG
b3JtQ29udHJvbCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChlbGVtZW50LT5pc0RlZmF1bHRCdXR0
b25Gb3JGb3JtKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5kb2N1bWVudCgpLT5jb250
YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpKSB7CisgICAgICAgIGJvb2wgd2lsbFZhbGlkYXRlID0g
ZWxlbWVudC0+d2lsbFZhbGlkYXRlKCk7CisKKyAgICAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBz
dGF0ZS5lbGVtZW50KCktPndpbGxWYWxpZGF0ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGlmICh3aWxsVmFsaWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRGb3JtQ29u
dHJvbEVsZW1lbnQoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1l
bnQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGVsZW1lbnQt
PmlzSW5SYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNJblJhbmdlKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGVsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpICE9
IHN0YXRlLmVsZW1lbnQoKS0+aXNPdXRPZlJhbmdlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBl
bGVtZW50SGFzRGlyZWN0aW9uQXV0byhFbGVtZW50KiBlbGVtZW50KQoreworICAgIC8vIEZJWE1F
OiBUaGlzIGxpbmUgaXMgc3VycHJpc2luZ2x5IGhvdCwgd2UgbWF5IHdpc2ggdG8gaW5saW5lIGhh
c0RpcmVjdGlvbkF1dG8gaW50byBTdHlsZVJlc29sdmVyLgorICAgIHJldHVybiBlbGVtZW50LT5p
c0hUTUxFbGVtZW50KCkgJiYgdG9IVE1MRWxlbWVudChlbGVtZW50KS0+aGFzRGlyZWN0aW9uQXV0
bygpOworfQorCitib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGlj
YWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRWxlbWVudCogc2hhcmluZ0NhbmRpZGF0
ZSkgY29uc3QKK3sKKyAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIGlmIChz
dGF0ZS5lbGVtZW50KCktPmVsZW1lbnREYXRhKCkgPT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZWxlbWVu
dERhdGEoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+
ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUt
PmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIp
ICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXN0YXRlLmVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NS
dWxlcygpKSB7CisgICAgICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNDbGFzcygpICYmIGNs
YXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKHNoYXJpbmdDYW5kaWRh
dGUtPmhhc0NsYXNzKCkpIHsKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICAvLyBTVkcgZWxlbWVu
dHMgcmVxdWlyZSBhIChzbG93ISkgZ2V0QXR0cmlidXRlIGNvbXBhcmlzaW9uIGJlY2F1c2UgImNs
YXNzIiBpcyBhbiBhbmltYXRhYmxlIGF0dHJpYnV0ZSBmb3IgU1ZHLgorICAgICAgICBpZiAoc3Rh
dGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKHN0YXRlLmVs
ZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0
QXR0cmlidXRlKGNsYXNzQXR0cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9IGVsc2UgeworI2VuZGlmCisgICAgICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5j
bGFzc05hbWVzKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NOYW1lcygpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICB9CisjZW5kaWYK
KyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLnN0eWxl
ZEVsZW1lbnQoKS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzaGFyaW5nQ2FuZGlk
YXRlLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyNpZiBFTkFCTEUoUFJPR1JFU1NfRUxFTUVOVCkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgp
LT5oYXNUYWdOYW1lKHByb2dyZXNzVGFnKSkgeworICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgp
LT5zaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+c2hvdWxk
QXBwZWFySW5kZXRlcm1pbmF0ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y2Fu
U2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7Cisg
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICBjb25z
dCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworCisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChzdHlsZS0+dW5pcXVlKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoc3R5bGUtPmhhc1VuaXF1ZVBzZXVkb1N0eWxlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoZWxlbWVudC0+dGFnUU5hbWUoKSAhPSBzdGF0ZS5lbGVtZW50KCkt
PnRhZ1FOYW1lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxlbWVudC0+aW5s
aW5lU3R5bGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LT5uZWVk
c1N0eWxlUmVjYWxjKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNpZiBFTkFCTEUoU1ZHKQor
ICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiB0b1NWR0VsZW1lbnQoZWxlbWVudCkt
PmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKKyAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0xp
bmsoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LT5ob3ZlcmVkKCkg
IT0gc3RhdGUuZWxlbWVudCgpLT5ob3ZlcmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoZWxlbWVudC0+YWN0aXZlKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5hY3RpdmUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LT5mb2N1c2VkKCkgIT0gc3RhdGUu
ZWxlbWVudCgpLT5mb2N1c2VkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxl
bWVudC0+c2hhZG93UHNldWRvSWQoKSAhPSBzdGF0ZS5lbGVtZW50KCktPnNoYWRvd1BzZXVkb0lk
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5k
b2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhlbGVt
ZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LT5hZGRpdGlvbmFs
UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmFk
ZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCku
aWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZWxlbWVudC0+aGFzU2NvcGVkSFRN
TFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBzaGFyZSBzdHlsZSBmb3Igb3B0aW9uIGFuZCBvcHRncm91cCB3aGVuZXZlciBwb3Nz
aWJsZS4KKyAgICAvLyBCZWZvcmUgZG9pbmcgc28sIHdlIG5lZWQgdG8gcmVzb2x2ZSBpc3N1ZXMg
aW4gSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcworICAgIC8vIGFuZCBSZW5kZXJN
ZW51TGlzdDo6c2V0VGV4dC4gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTg4NDA1CisgICAgaWYgKGlzSFRNTE9wdGlvbkVsZW1lbnQoZWxlbWVudCkgfHwg
aXNIVE1MT3B0R3JvdXBFbGVtZW50KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBib29sIGlzQ29udHJvbCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CisK
KyAgICBpZiAoaXNDb250cm9sICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGlzQ29udHJvbCAmJiAhY2Fu
U2hhcmVTdHlsZVdpdGhDb250cm9sKGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoc3R5bGUtPnRyYW5zaXRpb25zKCkgfHwgc3R5bGUtPmFuaW1hdGlvbnMoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgIC8vIFR1cm4gb2ZmIHN0eWxlIHNoYXJpbmcgZm9yIGVsZW1lbnRzIHRoYXQgY2FuIGdhaW4g
bGF5ZXJzIGZvciByZWFzb25zIG91dHNpZGUgb2YgdGhlIHN0eWxlIHN5c3RlbS4KKyAgICAvLyBT
ZWUgY29tbWVudHMgaW4gUmVuZGVyT2JqZWN0OjpzZXRTdHlsZSgpLgorICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZVRhZykg
fHwgZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShv
YmplY3RUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKGNhbnZhc1RhZykKKyNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykK
KyAgICAgICAgLy8gV2l0aCBwcm94eWluZywgdGhlIG1lZGlhIGVsZW1lbnRzIGFyZSBiYWNrZWQg
YnkgYSBSZW5kZXJFbWJlZGRlZE9iamVjdC4KKyAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFt
ZSh2aWRlb1RhZykgfHwgaXNIVE1MQXVkaW9FbGVtZW50KGVsZW1lbnQpCisjZW5kaWYKKyAgICAg
ICAgKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKworICAgIGlmIChlbGVtZW50SGFz
RGlyZWN0aW9uQXV0byhlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KGVsZW1lbnQtPmlzTGluaygpICYmIHN0YXRlLmVsZW1lbnRMaW5rU3RhdGUoKSAhPSBzdHlsZS0+
aW5zaWRlTGluaygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCisgICAgLy8gRGVueSBzaGFyaW5nIHN0eWxlcyBiZXR3ZWVuIFdlYlZUVCBhbmQgbm9u
LVdlYlZUVCBub2Rlcy4KKyAgICBpZiAoZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgIT0gc3Rh
dGUuZWxlbWVudCgpLT5pc1dlYlZUVEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKGVsZW1lbnQtPmlzV2ViVlRURWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQoKS0+
aXNXZWJWVFRFbGVtZW50KCkgJiYgdG9XZWJWVFRFbGVtZW50KGVsZW1lbnQpLT5pc1Bhc3ROb2Rl
KCkgIT0gdG9XZWJWVFRFbGVtZW50KHN0YXRlLmVsZW1lbnQoKSktPmlzUGFzdE5vZGUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
CisgICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0Q3VycmVudEZ1
bGxTY3JlZW5FbGVtZW50KCkgfHwgc3RhdGUuZWxlbWVudCgpID09IHN0YXRlLmRvY3VtZW50KCkt
PndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIFN0eWxlZEVsZW1lbnQqIFN0
eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqIG5vZGUsIHVuc2ln
bmVkJiBjb3VudCkgY29uc3QKK3sKKyAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnByZXZp
b3VzU2libGluZygpKSB7CisgICAgICAgIGlmICghbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVu
dChzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSkpKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGlmIChjb3VudCsrID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVu
dCo+KG5vZGUpOworfQorCitSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVk
U3R5bGUoKQoreworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgaWYgKCFzdGF0ZS5z
dHlsZWRFbGVtZW50KCkgfHwgIXN0YXRlLnBhcmVudFN0eWxlKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgLy8gSWYgdGhlIGVsZW1lbnQgaGFzIGlubGluZSBzdHlsZSBpdCBpcyBwcm9iYWJs
eSB1bmlxdWUuCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisjaWYgRU5BQkxFKFNWRykKKyAgICBpZiAoc3RhdGUuc3R5bGVk
RWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSAmJiB0b1NWR0VsZW1lbnQoc3RhdGUuc3R5bGVkRWxl
bWVudCgpKS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiAw
OworI2VuZGlmCisgICAgLy8gSWRzIHN0b3Agc3R5bGUgc2hhcmluZyBpZiB0aGV5IHNob3cgdXAg
aW4gdGhlIHN0eWxlc2hlZXRzLgorICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmhhc0lE
KCkgJiYgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoc3RhdGUuc3R5
bGVkRWxlbWVudCgpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCisgICAgICAgIHJl
dHVybiAwOworICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKHN0YXRlLmVsZW1l
bnQoKS0+cGFyZW50RWxlbWVudCgpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHN0YXRl
LnN0eWxlZEVsZW1lbnQoKS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgaWYgKHN0YXRlLmVsZW1lbnQoKSA9PSBzdGF0ZS5kb2N1bWVudCgpLT5jc3NU
YXJnZXQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25B
dXRvKHN0YXRlLmVsZW1lbnQoKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gQ2FjaGUg
d2hldGhlciBzdGF0ZS5lbGVtZW50IGlzIGFmZmVjdGVkIGJ5IGFueSBrbm93biBjbGFzcyBzZWxl
Y3RvcnMuCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIGEgbWVtYmVyIHZhcmlhYmxl
LiBUaGUgc3R5bGUgc2hhcmluZyBjb2RlIGNvdWxkIGJlIGZhY3RvcmVkIG91dCBvZiBTdHlsZVJl
c29sdmVyLgorICAgIHN0YXRlLnNldEVsZW1lbnRBZmZlY3RlZEJ5Q2xhc3NSdWxlcyhzdGF0ZS5l
bGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpLT5oYXNDbGFzcygpICYmIGNsYXNzTmFtZXNBZmZl
Y3RlZEJ5UnVsZXMoc3RhdGUuZWxlbWVudCgpLT5jbGFzc05hbWVzKCkpKTsKKworICAgIC8vIENo
ZWNrIHByZXZpb3VzIHNpYmxpbmdzIGFuZCB0aGVpciBjb3VzaW5zLgorICAgIHVuc2lnbmVkIGNv
dW50ID0gMDsKKyAgICB1bnNpZ25lZCB2aXNpdGVkTm9kZUNvdW50ID0gMDsKKyAgICBTdHlsZWRF
bGVtZW50KiBzaGFyZUVsZW1lbnQgPSAwOworICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBzdGF0ZS5z
dHlsZWRFbGVtZW50KCktPnByZXZpb3VzU2libGluZygpOworICAgIHdoaWxlIChjb3VzaW5MaXN0
KSB7CisgICAgICAgIHNoYXJlRWxlbWVudCA9IGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNv
dXNpbkxpc3QsIGNvdW50KTsKKyAgICAgICAgaWYgKHNoYXJlRWxlbWVudCkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjb3VzaW5MaXN0ID0gbG9jYXRlQ291c2luTGlzdChjb3VzaW5MaXN0
LT5wYXJlbnRFbGVtZW50KCksIHZpc2l0ZWROb2RlQ291bnQpOworICAgIH0KKworICAgIC8vIElm
IHdlIGhhdmUgZXhoYXVzdGVkIGFsbCBvdXIgYnVkZ2V0IG9yIG91ciBjb3VzaW5zLgorICAgIGlm
ICghc2hhcmVFbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIENhbid0IHNoYXJl
IGlmIHNpYmxpbmcgcnVsZXMgYXBwbHkuIFRoaXMgaXMgY2hlY2tlZCBhdCB0aGUgZW5kIGFzIGl0
IHNob3VsZCByYXJlbHkgZmFpbC4KKyAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hl
c1J1bGVTZXQobV9ydWxlU2V0cy5zaWJsaW5nKCkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAv
LyBDYW4ndCBzaGFyZSBpZiBhdHRyaWJ1dGUgcnVsZXMgYXBwbHkuCisgICAgaWYgKHN0eWxlU2hh
cmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KG1fcnVsZVNldHMudW5jb21tb25BdHRyaWJ1dGUo
KSkpCisgICAgICAgIHJldHVybiAwOworICAgIC8vIENhbid0IHNoYXJlIGlmIEBob3N0IEAtcnVs
ZXMgYXBwbHkuCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWly
ZXMgdW5pcXVlIHN0eWxlIGZvciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNp
YmxpbmcgcnVsZSBtYXRjaCBhYm92ZS4KKyAgICBpZiAocGFyZW50RWxlbWVudFByZXZlbnRzU2hh
cmluZyhzdGF0ZS5lbGVtZW50KCktPnBhcmVudEVsZW1lbnQoKSkpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBzaGFyZUVsZW1lbnQtPnJlbmRlclN0eWxlKCk7Cit9CisKK3N0YXRpYyB2
b2lkIGdldEZvbnRBbmRHbHlwaE9yaWVudGF0aW9uKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwg
Rm9udE9yaWVudGF0aW9uJiBmb250T3JpZW50YXRpb24sIE5vbkNKS0dseXBoT3JpZW50YXRpb24m
IGdseXBoT3JpZW50YXRpb24pCit7CisgICAgaWYgKHN0eWxlLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKSB7CisgICAgICAgIGZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWw7CisgICAgICAg
IGdseXBoT3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodDsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaCAoc3R5bGUtPnRleHRPcmllbnRh
dGlvbigpKSB7CisgICAgY2FzZSBUZXh0T3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OgorICAgICAg
ICBmb250T3JpZW50YXRpb24gPSBWZXJ0aWNhbDsKKyAgICAgICAgZ2x5cGhPcmllbnRhdGlvbiA9
IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBUZXh0T3JpZW50YXRpb25VcHJpZ2h0OgorICAgICAgICBmb250T3JpZW50YXRpb24g
PSBWZXJ0aWNhbDsKKyAgICAgICAgZ2x5cGhPcmllbnRhdGlvbiA9IE5vbkNKS0dseXBoT3JpZW50
YXRpb25VcHJpZ2h0OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUZXh0T3JpZW50YXRpb25T
aWRld2F5czoKKyAgICAgICAgaWYgKHN0eWxlLT53cml0aW5nTW9kZSgpID09IExlZnRUb1JpZ2h0
V3JpdGluZ01vZGUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBtYXAgdG8g
c2lkZXdheXMtbGVmdCwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCB5ZXQuCisgICAgICAgICAgICBm
b250T3JpZW50YXRpb24gPSBWZXJ0aWNhbDsKKyAgICAgICAgICAgIGdseXBoT3JpZW50YXRpb24g
PSBOb25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodDsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBmb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsOworICAg
ICAgICBnbHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmln
aHQ7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFRleHRPcmllbnRhdGlvblNpZGV3YXlzUmln
aHQ6CisgICAgICAgIGZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWw7CisgICAgICAgIGdseXBo
T3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodDsKKyAgICAg
ICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBmb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsOworICAgICAgICBnbHlwaE9yaWVu
dGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7CisgICAgICAgIHJl
dHVybjsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBDU1NGb250U2VsZWN0b3IqIGZv
bnRTZWxlY3RvcikKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKwor
ICAgIC8vIEhUTUw1IHN0YXRlcyB0aGF0IHNlYW1sZXNzIGlmcmFtZXMgc2hvdWxkIHJlcGxhY2Ug
ZGVmYXVsdCBDU1MgdmFsdWVzCisgICAgLy8gd2l0aCB2YWx1ZXMgaW5oZXJpdGVkIGZyb20gdGhl
IGNvbnRhaW5pbmcgaWZyYW1lIGVsZW1lbnQuIEhvd2V2ZXIsCisgICAgLy8gc29tZSB2YWx1ZXMg
KHN1Y2ggYXMgdGhlIGNhc2Ugb2YgZGVzaWduTW9kZSA9ICJvbiIpIHN0aWxsIG5lZWQgdG8KKyAg
ICAvLyBiZSBzZXQgYnkgdGhpcyAiZG9jdW1lbnQgc3R5bGUiLgorICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gZG9jdW1lbnRTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBib29sIHNl
YW1sZXNzV2l0aFBhcmVudCA9IGRvY3VtZW50LT5zaG91bGREaXNwbGF5U2VhbWxlc3NseVdpdGhQ
YXJlbnQoKTsKKyAgICBpZiAoc2VhbWxlc3NXaXRoUGFyZW50KSB7CisgICAgICAgIFJlbmRlclN0
eWxlKiBpZnJhbWVTdHlsZSA9IGRvY3VtZW50LT5zZWFtbGVzc1BhcmVudElGcmFtZSgpLT5yZW5k
ZXJTdHlsZSgpOworICAgICAgICBpZiAoaWZyYW1lU3R5bGUpCisgICAgICAgICAgICBkb2N1bWVu
dFN0eWxlLT5pbmhlcml0RnJvbShpZnJhbWVTdHlsZSk7CisgICAgfQorCisgICAgLy8gRklYTUU6
IEl0J3Mgbm90IGNsZWFyIHdoaWNoIHZhbHVlcyBiZWxvdyB3ZSB3YW50IHRvIG92ZXJyaWRlIGlu
IHRoZSBzZWFtbGVzcyBjYXNlIQorICAgIGRvY3VtZW50U3R5bGUtPnNldERpc3BsYXkoQkxPQ0sp
OworICAgIGlmICghc2VhbWxlc3NXaXRoUGFyZW50KSB7CisgICAgICAgIGRvY3VtZW50U3R5bGUt
PnNldFJUTE9yZGVyaW5nKGRvY3VtZW50LT52aXN1YWxseU9yZGVyZWQoKSA/IFZpc3VhbE9yZGVy
IDogTG9naWNhbE9yZGVyKTsKKyAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0Wm9vbShmcmFtZSAm
JiAhZG9jdW1lbnQtPnByaW50aW5nKCkgPyBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKSA6IDEpOwor
ICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRQYWdlU2NhbGVUcmFuc2Zvcm0oZnJhbWUgPyBmcmFt
ZS0+ZnJhbWVTY2FsZUZhY3RvcigpIDogMSk7CisgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldExv
Y2FsZShkb2N1bWVudC0+Y29udGVudExhbmd1YWdlKCkpOworICAgIH0KKyAgICAvLyBUaGlzIG92
ZXJyaWRlcyBhbnkgLXdlYmtpdC11c2VyLW1vZGlmeSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50
IGlmcmFtZS4KKyAgICBkb2N1bWVudFN0eWxlLT5zZXRVc2VyTW9kaWZ5KGRvY3VtZW50LT5pbkRl
c2lnbk1vZGUoKSA/IFJFQURfV1JJVEUgOiBSRUFEX09OTFkpOworCisgICAgRWxlbWVudCogZG9j
RWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBSZW5kZXJPYmplY3Qq
IGRvY0VsZW1lbnRSZW5kZXJlciA9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJlcigp
IDogMDsKKyAgICBpZiAoZG9jRWxlbWVudFJlbmRlcmVyKSB7CisgICAgICAgIC8vIFVzZSB0aGUg
ZGlyZWN0aW9uIGFuZCB3cml0aW5nLW1vZGUgb2YgdGhlIGJvZHkgdG8gc2V0IHRoZQorICAgICAg
ICAvLyB2aWV3cG9ydCdzIGRpcmVjdGlvbiBhbmQgd3JpdGluZy1tb2RlIHVubGVzcyB0aGUgcHJv
cGVydHkgaXMgc2V0IG9uIHRoZSBkb2N1bWVudCBlbGVtZW50LgorICAgICAgICAvLyBJZiB0aGVy
ZSBpcyBubyBib2R5LCB0aGVuIHVzZSB0aGUgZG9jdW1lbnQgZWxlbWVudC4KKyAgICAgICAgUmVu
ZGVyT2JqZWN0KiBib2R5UmVuZGVyZXIgPSBkb2N1bWVudC0+Ym9keSgpID8gZG9jdW1lbnQtPmJv
ZHkoKS0+cmVuZGVyZXIoKSA6IDA7CisgICAgICAgIGlmIChib2R5UmVuZGVyZXIgJiYgIWRvY3Vt
ZW50LT53cml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICBkb2N1
bWVudFN0eWxlLT5zZXRXcml0aW5nTW9kZShib2R5UmVuZGVyZXItPnN0eWxlKCktPndyaXRpbmdN
b2RlKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRXcml0
aW5nTW9kZShkb2NFbGVtZW50UmVuZGVyZXItPnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOworICAg
ICAgICBpZiAoYm9keVJlbmRlcmVyICYmICFkb2N1bWVudC0+ZGlyZWN0aW9uU2V0T25Eb2N1bWVu
dEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldERpcmVjdGlvbihib2R5
UmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZG9jdW1lbnRTdHlsZS0+c2V0RGlyZWN0aW9uKGRvY0VsZW1lbnRSZW5kZXJlci0+c3R5bGUo
KS0+ZGlyZWN0aW9uKCkpOworICAgIH0KKworICAgIGlmIChmcmFtZSkgeworICAgICAgICBpZiAo
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpKSB7CisgICAgICAgICAgICBjb25z
dCBQYWdpbmF0aW9uJiBwYWdpbmF0aW9uID0gZnJhbWVWaWV3LT5wYWdpbmF0aW9uKCk7CisgICAg
ICAgICAgICBpZiAocGFnaW5hdGlvbi5tb2RlICE9IFBhZ2luYXRpb246OlVucGFnaW5hdGVkKSB7
CisgICAgICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0Q29sdW1uU3R5bGVzRnJvbVBhZ2lu
YXRpb25Nb2RlKHBhZ2luYXRpb24ubW9kZSk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnRTdHls
ZS0+c2V0Q29sdW1uR2FwKHBhZ2luYXRpb24uZ2FwKTsKKyAgICAgICAgICAgICAgICBpZiAoUmVu
ZGVyVmlldyogdmlldyA9IGRvY3VtZW50LT5yZW5kZXJWaWV3KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZpZXctPmhhc0NvbHVtbnMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZp
ZXctPnVwZGF0ZUNvbHVtbkluZm9Gcm9tU3R5bGUoZG9jdW1lbnRTdHlsZS5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8g
U2VhbWxlc3MgaWZyYW1lcyB3YW50IHRvIGluaGVyaXQgdGhlaXIgZm9udCBmcm9tIHRoZWlyIHBh
cmVudCBpZnJhbWUsIHNvIGVhcmx5IHJldHVybiBiZWZvcmUgc2V0dGluZyB0aGUgZm9udC4KKyAg
ICBpZiAoc2VhbWxlc3NXaXRoUGFyZW50KQorICAgICAgICByZXR1cm4gZG9jdW1lbnRTdHlsZS5y
ZWxlYXNlKCk7CisKKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlv
bihkb2N1bWVudFN0eWxlLT5sb2NhbGUoKSkpOworICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3Mg
PSBkb2N1bWVudC0+c2V0dGluZ3MoKSkgeworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNl
UHJpbnRlckZvbnQoZG9jdW1lbnQtPnByaW50aW5nKCkgfHwgIXNldHRpbmdzLT5zY3JlZW5Gb250
U3Vic3RpdHV0aW9uRW5hYmxlZCgpKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRl
cmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOworICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHN0YW5kYXJkRm9udCA9IHNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHko
Zm9udERlc2NyaXB0aW9uLnNjcmlwdCgpKTsKKyAgICAgICAgaWYgKCFzdGFuZGFyZEZvbnQuaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShG
b250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5KTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRPbmVGYW1pbHkoc3RhbmRhcmRGb250KTsKKyAgICAgICAgfQorICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21h
bGwgKyAxKTsKKyAgICAgICAgaW50IHNpemUgPSBTdHlsZVJlc29sdmVyOjpmb250U2l6ZUZvcktl
eXdvcmQoZG9jdW1lbnQsIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSk7CisgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOworICAgICAgICBib29sIHVzZVNWR1pvb21S
dWxlcyA9IGRvY3VtZW50LT5pc1NWR0RvY3VtZW50KCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRDb21wdXRlZFNpemUoU3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNp
ZmllZFNpemUoZG9jdW1lbnQsIGRvY3VtZW50U3R5bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5p
c0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29tUnVsZXMpKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGRvY3VtZW50LT5wcmludGlu
ZygpKTsKKworICAgIEZvbnRPcmllbnRhdGlvbiBmb250T3JpZW50YXRpb247CisgICAgTm9uQ0pL
R2x5cGhPcmllbnRhdGlvbiBnbHlwaE9yaWVudGF0aW9uOworICAgIGdldEZvbnRBbmRHbHlwaE9y
aWVudGF0aW9uKGRvY3VtZW50U3R5bGUuZ2V0KCksIGZvbnRPcmllbnRhdGlvbiwgZ2x5cGhPcmll
bnRhdGlvbik7CisgICAgZm9udERlc2NyaXB0aW9uLnNldE9yaWVudGF0aW9uKGZvbnRPcmllbnRh
dGlvbik7CisgICAgZm9udERlc2NyaXB0aW9uLnNldE5vbkNKS0dseXBoT3JpZW50YXRpb24oZ2x5
cGhPcmllbnRhdGlvbik7CisKKyAgICBkb2N1bWVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKKyAgICBkb2N1bWVudFN0eWxlLT5mb250KCkudXBkYXRlKGZvbnRT
ZWxlY3Rvcik7CisKKyAgICByZXR1cm4gZG9jdW1lbnRTdHlsZS5yZWxlYXNlKCk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnkoY29uc3QgRWxlbWVudCogZWxlbWVu
dCkKK3sKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDb250
YWluZXJOb2RlKiBwYXJlbnROb2RlID0gZWxlbWVudC0+cGFyZW50Tm9kZSgpOworICAgIHJldHVy
biBwYXJlbnROb2RlICYmIHBhcmVudE5vZGUtPmlzU2hhZG93Um9vdCgpOworfQorCitQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCwgUmVuZGVyU3R5bGUqIGRlZmF1bHRQYXJlbnQsCisgICAgU3R5bGVTaGFyaW5nQmVo
YXZpb3Igc2hhcmluZ0JlaGF2aW9yLCBSdWxlTWF0Y2hpbmdCZWhhdmlvciBtYXRjaGluZ0JlaGF2
aW9yLCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcpCit7CisgICAgLy8gT25jZSBhbiBl
bGVtZW50IGhhcyBhIHJlbmRlcmVyLCB3ZSBkb24ndCB0cnkgdG8gZGVzdHJveSBpdCwgc2luY2Ug
b3RoZXJ3aXNlIHRoZSByZW5kZXJlcgorICAgIC8vIHdpbGwgdmFuaXNoIGlmIGEgc3R5bGUgcmVj
YWxjIGhhcHBlbnMgZHVyaW5nIGxvYWRpbmcuCisgICAgaWYgKHNoYXJpbmdCZWhhdmlvciA9PSBB
bGxvd1N0eWxlU2hhcmluZyAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRz
TG9hZGVkKCkgJiYgIWVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgaWYgKCFzX3N0eWxl
Tm90WWV0QXZhaWxhYmxlKSB7CisgICAgICAgICAgICBzX3N0eWxlTm90WWV0QXZhaWxhYmxlID0g
UmVuZGVyU3R5bGU6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKKyAgICAgICAgICAgIHNfc3R5bGVOb3RZ
ZXRBdmFpbGFibGUtPnNldERpc3BsYXkoTk9ORSk7CisgICAgICAgICAgICBzX3N0eWxlTm90WWV0
QXZhaWxhYmxlLT5mb250KCkudXBkYXRlKG1fZm9udFNlbGVjdG9yKTsKKyAgICAgICAgfQorICAg
ICAgICBlbGVtZW50LT5kb2N1bWVudCgpLT5zZXRIYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxl
KCk7CisgICAgICAgIHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOworICAgIH0KKworICAg
IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgaW5pdEVsZW1lbnQoZWxlbWVudCk7CisgICAg
c3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlbGVtZW50LCBkZWZhdWx0UGFy
ZW50LCByZWdpb25Gb3JTdHlsaW5nKTsKKyAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93
U3R5bGVTaGFyaW5nICYmICFzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoKSkgewor
ICAgICAgICBSZW5kZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpOwor
ICAgICAgICBpZiAoc2hhcmVkU3R5bGUpIHsKKyAgICAgICAgICAgIHN0YXRlLmNsZWFyKCk7Cisg
ICAgICAgICAgICByZXR1cm4gc2hhcmVkU3R5bGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoc3RhdGUucGFyZW50U3R5bGUoKSkgeworICAgICAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJT
dHlsZTo6Y3JlYXRlKCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShzdGF0
ZS5wYXJlbnRTdHlsZSgpLCBpc0F0U2hhZG93Qm91bmRhcnkoZWxlbWVudCkgPyBSZW5kZXJTdHls
ZTo6QXRTaGFkb3dCb3VuZGFyeSA6IFJlbmRlclN0eWxlOjpOb3RBdFNoYWRvd0JvdW5kYXJ5KTsK
KyAgICB9IGVsc2UgeworICAgICAgICBzdGF0ZS5zZXRTdHlsZShkZWZhdWx0U3R5bGVGb3JFbGVt
ZW50KCkpOworICAgICAgICBzdGF0ZS5zZXRQYXJlbnRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmUo
c3RhdGUuc3R5bGUoKSkpOworICAgIH0KKyAgICAvLyBjb250ZW50ZWRpdGFibGUgYXR0cmlidXRl
IChpbXBsZW1lbnRlZCBieSAtd2Via2l0LXVzZXItbW9kaWZ5KSBzaG91bGQKKyAgICAvLyBiZSBw
cm9wYWdhdGVkIGZyb20gc2hhZG93IGhvc3QgdG8gZGlzdHJpYnV0ZWQgbm9kZS4KKyAgICBpZiAo
c3RhdGUuZGlzdHJpYnV0ZWRUb0luc2VydGlvblBvaW50KCkpIHsKKyAgICAgICAgaWYgKEVsZW1l
bnQqIHBhcmVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYg
KFJlbmRlclN0eWxlKiBzdHlsZU9mU2hhZG93SG9zdCA9IHBhcmVudC0+cmVuZGVyU3R5bGUoKSkK
KyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVc2VyTW9kaWZ5KHN0eWxlT2ZTaGFk
b3dIb3N0LT51c2VyTW9kaWZ5KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGVsZW1l
bnQtPmlzTGluaygpKSB7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldElzTGluayh0cnVlKTsK
KyAgICAgICAgRUluc2lkZUxpbmsgbGlua1N0YXRlID0gc3RhdGUuZWxlbWVudExpbmtTdGF0ZSgp
OworICAgICAgICBpZiAobGlua1N0YXRlICE9IE5vdEluc2lkZUxpbmspIHsKKyAgICAgICAgICAg
IGJvb2wgZm9yY2VWaXNpdGVkID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVk
b1N0YXRlKGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9WaXNpdGVkKTsKKyAgICAgICAgICAg
IGlmIChmb3JjZVZpc2l0ZWQpCisgICAgICAgICAgICAgICAgbGlua1N0YXRlID0gSW5zaWRlVmlz
aXRlZExpbms7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SW5zaWRlTGlu
ayhsaW5rU3RhdGUpOworICAgIH0KKworICAgIGJvb2wgbmVlZHNDb2xsZWN0aW9uID0gZmFsc2U7
CisgICAgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjplbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JF
bGVtZW50KGVsZW1lbnQsIG5lZWRzQ29sbGVjdGlvbik7CisgICAgaWYgKG5lZWRzQ29sbGVjdGlv
bikKKyAgICAgICAgbV9ydWxlU2V0cy5jb2xsZWN0RmVhdHVyZXMoZG9jdW1lbnQoKS0+aXNWaWV3
U291cmNlKCksIG1fc2NvcGVSZXNvbHZlci5nZXQoKSk7CisKKyAgICBFbGVtZW50UnVsZUNvbGxl
Y3RvciBjb2xsZWN0b3IodGhpcywgc3RhdGUpOworICAgIGNvbGxlY3Rvci5zZXRSZWdpb25Gb3JT
dHlsaW5nKHJlZ2lvbkZvclN0eWxpbmcpOworICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0obV9tZWRp
dW0uZ2V0KCkpOworCisgICAgaWYgKG1hdGNoaW5nQmVoYXZpb3IgPT0gTWF0Y2hPbmx5VXNlckFn
ZW50UnVsZXMpCisgICAgICAgIGNvbGxlY3Rvci5tYXRjaFVBUnVsZXMoKTsKKyAgICBlbHNlCisg
ICAgICAgIGNvbGxlY3Rvci5tYXRjaEFsbFJ1bGVzKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVz
LCBtYXRjaGluZ0JlaGF2aW9yICE9IE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdTTUlMKTsKKworICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29sbGVjdG9yLm1hdGNoZWRSZXN1bHQoKSwgZWxlbWVu
dCk7CisKKyAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4
dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBzKS4KKyAgICBhZGp1c3RSZW5kZXJTdHls
ZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5wYXJlbnRTdHlsZSgpLCBlbGVtZW50KTsKKworICAgIHN0
YXRlLmNsZWFyKCk7IC8vIENsZWFyIG91dCBmb3IgdGhlIG5leHQgcmVzb2x2ZS4KKworICAgIGRv
Y3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKKworICAgIC8vIE5vdyByZXR1cm4g
dGhlIHN0eWxlLgorICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsKK30KKworUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5k
ZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwgS2V5
ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkKK3sKKyAgICBNYXRjaFJlc3VsdCByZXN1bHQ7Cisg
ICAgcmVzdWx0LmFkZE1hdGNoZWRQcm9wZXJ0aWVzKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOwor
CisgICAgQVNTRVJUKCFtX3N0YXRlLnN0eWxlKCkpOworCisgICAgU3RhdGUmIHN0YXRlID0gbV9z
dGF0ZTsKKworICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUKKyAgICBzdGF0ZS5zZXRTdHlsZShSZW5k
ZXJTdHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKSk7CisgICAgc3RhdGUuc2V0TGluZUhlaWdodFZh
bHVlKDApOworCisgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50
LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25lCisgICAgLy8gZGVjbCwgdGhlcmUncyBub3Ro
aW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0aGUgZmlyc3QgcHJvcGVydGllcy4KKyAgICBi
b29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhp
Z2hQcmlvcml0eVByb3BlcnRpZXM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKworICAgIC8vIElmIG91ciBmb250
IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KKyAgICB1cGRhdGVGb250
KCk7CisKKyAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNp
ZGVkIG9uIHRoZSBmb250LXNpemUKKyAgICBpZiAoc3RhdGUubGluZUhlaWdodFZhbHVlKCkpCisg
ICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVp
Z2h0VmFsdWUoKSk7CisKKyAgICAvLyBOb3cgZG8gcmVzdCBvZiB0aGUgcHJvcGVydGllcy4KKyAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBm
YWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9u
bHkpOworCisgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQgYnkgb25lIG9mIHRoZSBub24t
ZXNzZW50aWFsIGZvbnQgcHJvcHMsCisgICAgLy8gZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBhIHNl
Y29uZCB0aW1lLgorICAgIHVwZGF0ZUZvbnQoKTsKKworICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVz
b3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KKyAgICBsb2FkUGVuZGluZ1Jlc291cmNl
cygpOworICAgIAorICAgIC8vIEFkZCBhbGwgdGhlIGFuaW1hdGluZyBwcm9wZXJ0aWVzIHRvIHRo
ZSBrZXlmcmFtZS4KKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0ga2V5ZnJhbWUtPnByb3Bl
cnRpZXMoKS5wcm9wZXJ0eUNvdW50KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBy
b3BlcnR5Q291bnQ7ICsraSkgeworICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5ID0ga2V5
ZnJhbWUtPnByb3BlcnRpZXMoKS5wcm9wZXJ0eUF0KGkpLmlkKCk7CisgICAgICAgIC8vIFRpbWlu
Zy1mdW5jdGlvbiB3aXRoaW4ga2V5ZnJhbWVzIGlzIHNwZWNpYWwsIGJlY2F1c2UgaXQgaXMgbm90
IGFuaW1hdGVkOyBpdCBqdXN0CisgICAgICAgIC8vIGRlc2NyaWJlcyB0aGUgdGltaW5nIGZ1bmN0
aW9uIGJldHdlZW4gdGhpcyBrZXlmcmFtZSBhbmQgdGhlIG5leHQuCisgICAgICAgIGlmIChwcm9w
ZXJ0eSAhPSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKQorICAgICAg
ICAgICAga2V5ZnJhbWVWYWx1ZS5hZGRQcm9wZXJ0eShwcm9wZXJ0eSk7CisgICAgfQorCisgICAg
ZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOworCisgICAgcmV0dXJuIHN0YXRl
LnRha2VTdHlsZSgpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmtleWZyYW1lU3R5bGVzRm9y
QW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIEtl
eWZyYW1lTGlzdCYgbGlzdCkKK3sKKyAgICBsaXN0LmNsZWFyKCk7CisKKyAgICAvLyBHZXQgdGhl
IGtleWZyYW1lc1J1bGUgZm9yIHRoaXMgbmFtZQorICAgIGlmICghZSB8fCBsaXN0LmFuaW1hdGlv
bk5hbWUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fa2V5ZnJhbWVzUnVs
ZU1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBLZXlmcmFtZXNSdWxlTWFwOjppdGVyYXRv
ciBpdCA9IG1fa2V5ZnJhbWVzUnVsZU1hcC5maW5kKGxpc3QuYW5pbWF0aW9uTmFtZSgpLmltcGwo
KSk7CisgICAgaWYgKGl0ID09IG1fa2V5ZnJhbWVzUnVsZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKiBrZXlmcmFtZXNSdWxlID0gaXQt
PnZhbHVlLmdldCgpOworCisgICAgLy8gQ29uc3RydWN0IGFuZCBwb3B1bGF0ZSB0aGUgc3R5bGUg
Zm9yIGVhY2gga2V5ZnJhbWUKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+
ID4mIGtleWZyYW1lcyA9IGtleWZyYW1lc1J1bGUtPmtleWZyYW1lcygpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gQXBw
bHkgdGhlIGRlY2xhcmF0aW9uIHRvIHRoZSBzdHlsZS4gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVy
c2lvbiBvZiB0aGUgbG9naWMgaW4gc3R5bGVGb3JFbGVtZW50CisgICAgICAgIGluaXRFbGVtZW50
KGUpOworICAgICAgICBtX3N0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZSk7
CisKKyAgICAgICAgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUgPSBrZXlmcmFtZXNbaV0u
Z2V0KCk7CisKKyAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDAsIDApOworICAg
ICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxl
LCBrZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworCisgICAgICAgIC8vIEFkZCB0aGlzIGtleWZy
YW1lIHN0eWxlIHRvIGFsbCB0aGUgaW5kaWNhdGVkIGtleSB0aW1lcworICAgICAgICBWZWN0b3I8
ZmxvYXQ+IGtleXM7CisgICAgICAgIGtleWZyYW1lLT5nZXRLZXlzKGtleXMpOworICAgICAgICBm
b3IgKHNpemVfdCBrZXlJbmRleCA9IDA7IGtleUluZGV4IDwga2V5cy5zaXplKCk7ICsra2V5SW5k
ZXgpIHsKKyAgICAgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0S2V5KGtleXNba2V5SW5kZXhdKTsK
KyAgICAgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gSWYgdGhlIDAlIGtleWZyYW1lIGlzIG1pc3NpbmcsIGNyZWF0ZSBpdCAoYnV0
IG9ubHkgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG90aGVyIGtleWZyYW1lKQorICAgIGludCBp
bml0aWFsTGlzdFNpemUgPSBsaXN0LnNpemUoKTsKKyAgICBpZiAoaW5pdGlhbExpc3RTaXplID4g
MCAmJiBsaXN0WzBdLmtleSgpKSB7CisgICAgICAgIHN0YXRpYyBTdHlsZUtleWZyYW1lKiB6ZXJv
UGVyY2VudEtleWZyYW1lOworICAgICAgICBpZiAoIXplcm9QZXJjZW50S2V5ZnJhbWUpIHsKKyAg
ICAgICAgICAgIHplcm9QZXJjZW50S2V5ZnJhbWUgPSBTdHlsZUtleWZyYW1lOjpjcmVhdGUoTXV0
YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpKS5sZWFrUmVmKCk7CisgICAgICAgICAgICB6
ZXJvUGVyY2VudEtleWZyYW1lLT5zZXRLZXlUZXh0KCIwJSIpOworICAgICAgICB9CisgICAgICAg
IEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsKKyAgICAgICAga2V5ZnJhbWVWYWx1
ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwgemVyb1BlcmNlbnRLZXlm
cmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBsaXN0Lmluc2VydChrZXlmcmFtZVZhbHVl
KTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgMTAwJSBrZXlmcmFtZSBpcyBtaXNzaW5nLCBjcmVh
dGUgaXQgKGJ1dCBvbmx5IGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBvdGhlciBrZXlmcmFtZSkK
KyAgICBpZiAoaW5pdGlhbExpc3RTaXplID4gMCAmJiAobGlzdFtsaXN0LnNpemUoKSAtIDFdLmtl
eSgpICE9IDEpKSB7CisgICAgICAgIHN0YXRpYyBTdHlsZUtleWZyYW1lKiBodW5kcmVkUGVyY2Vu
dEtleWZyYW1lOworICAgICAgICBpZiAoIWh1bmRyZWRQZXJjZW50S2V5ZnJhbWUpIHsKKyAgICAg
ICAgICAgIGh1bmRyZWRQZXJjZW50S2V5ZnJhbWUgPSBTdHlsZUtleWZyYW1lOjpjcmVhdGUoTXV0
YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpKS5sZWFrUmVmKCk7CisgICAgICAgICAgICBo
dW5kcmVkUGVyY2VudEtleWZyYW1lLT5zZXRLZXlUZXh0KCIxMDAlIik7CisgICAgICAgIH0KKyAg
ICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDEsIDApOworICAgICAgICBrZXlmcmFt
ZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBodW5kcmVkUGVy
Y2VudEtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CisgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZy
YW1lVmFsdWUpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNv
bHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGUsIGNvbnN0IFBzZXVkb1N0eWxl
UmVxdWVzdCYgcHNldWRvU3R5bGVSZXF1ZXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit7
CisgICAgQVNTRVJUKHBhcmVudFN0eWxlKTsKKyAgICBpZiAoIWUpCisgICAgICAgIHJldHVybiAw
OworCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKworICAgIGluaXRFbGVtZW50KGUpOwor
CisgICAgc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlLCBwYXJlbnRTdHls
ZSk7CisKKyAgICBpZiAobV9zdGF0ZS5wYXJlbnRTdHlsZSgpKSB7CisgICAgICAgIHN0YXRlLnNl
dFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPmlu
aGVyaXRGcm9tKG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c3RhdGUuc2V0U3R5bGUoZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpKTsKKyAgICAgICAgc3RhdGUu
c2V0UGFyZW50U3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lKHN0YXRlLnN0eWxlKCkpKTsKKyAgICB9
CisKKyAgICAvLyBTaW5jZSB3ZSBkb24ndCB1c2UgcHNldWRvLWVsZW1lbnRzIGluIGFueSBvZiBv
dXIgcXVpcmsvcHJpbnQgdXNlciBhZ2VudCBydWxlcywgZG9uJ3Qgd2FzdGUgdGltZSB3YWxraW5n
CisgICAgLy8gdGhvc2UgcnVsZXMuCisKKyAgICAvLyBDaGVjayBVQSwgdXNlciBhbmQgYXV0aG9y
IHJ1bGVzLgorICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yIGNvbGxlY3Rvcih0aGlzLCBzdGF0ZSk7
CisgICAgY29sbGVjdG9yLnNldFBzZXVkb1N0eWxlUmVxdWVzdChwc2V1ZG9TdHlsZVJlcXVlc3Qp
OworICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0obV9tZWRpdW0uZ2V0KCkpOworICAgIGNvbGxlY3Rv
ci5tYXRjaFVBUnVsZXMoKTsKKworICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykg
eworICAgICAgICBjb2xsZWN0b3IubWF0Y2hVc2VyUnVsZXMoZmFsc2UpOworICAgICAgICBjb2xs
ZWN0b3IubWF0Y2hBdXRob3JSdWxlcyhmYWxzZSk7CisgICAgfQorCisgICAgaWYgKGNvbGxlY3Rv
ci5tYXRjaGVkUmVzdWx0KCkubWF0Y2hlZFByb3BlcnRpZXMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHN0YXRlLnN0eWxlKCktPnNldFN0eWxlVHlwZShwc2V1ZG9TdHlsZVJl
cXVlc3QucHNldWRvSWQpOworCisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb2xsZWN0b3Iu
bWF0Y2hlZFJlc3VsdCgpLCBlKTsKKworICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3Qn
cyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgorICAg
IGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLnN0eWxlKCksIG1fc3RhdGUucGFyZW50U3R5bGUoKSwg
MCk7CisKKyAgICAvLyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMg
c3R5bGUuCisgICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKKworICAgIGRvY3VtZW50KCktPmRp
ZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKKworICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgor
ICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsKK30KKworUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCit7CisgICAgbV9z
dGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGRvY3VtZW50KCktPmRvY3VtZW50
RWxlbWVudCgpKTsgLy8gbV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1
bWVudCBzdHlsZS4KKworICAgIG1fc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgp
KTsKKyAgICBtX3N0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKG1fc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSgpKTsKKworICAgIFBhZ2VSdWxlQ29sbGVjdG9yIGNvbGxlY3RvcihtX3N0YXRlLCBtX3J1
bGVTZXRzKTsKKyAgICBjb2xsZWN0b3IubWF0Y2hBbGxQYWdlUnVsZXMocGFnZUluZGV4KTsKKyAg
ICBtX3N0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKKyAgICBib29sIGluaGVyaXRlZE9ubHkg
PSBmYWxzZTsKKworICAgIE1hdGNoUmVzdWx0JiByZXN1bHQgPSBjb2xsZWN0b3IubWF0Y2hlZFJl
c3VsdCgpOworI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQorICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNo
ZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworI2VuZGlmCisgICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNl
LCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7
CisKKyAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBp
dCBub3cuCisgICAgdXBkYXRlRm9udCgpOworCisgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdo
ZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgorICAgIGlmIChtX3N0
YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQorICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
TGluZUhlaWdodCwgbV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CisKKyAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVz
dWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOworCisgICAg
Ly8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgorICAg
IGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CisKKyAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHls
ZVJlc29sdmVyKCk7CisKKyAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KKyAgICByZXR1cm4g
bV9zdGF0ZS50YWtlU3R5bGUoKTsKK30KKworUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVS
ZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpCit7CisgICAgbV9zdGF0ZS5zZXRTdHls
ZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkpOworICAgIC8vIE1ha2Ugc3VyZSBvdXIgZm9udHMgYXJl
IGluaXRpYWxpemVkIGlmIHdlIGRvbid0IGluaGVyaXQgdGhlbSBmcm9tIG91ciBwYXJlbnQgc3R5
bGUuCisgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKSkgewor
ICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsKKyAgICAgICAgbV9zdGF0ZS5z
dHlsZSgpLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgbV9zdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRlKDApOworCisgICAgcmV0dXJuIG1fc3Rh
dGUudGFrZVN0eWxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZEludHJpbnNpY01hcmdpbnMoUmVu
ZGVyU3R5bGUqIHN0eWxlKQoreworICAgIC8vIEludHJpbnNpYyBtYXJnaW4gdmFsdWUuCisgICAg
Y29uc3QgaW50IGludHJpbnNpY01hcmdpbiA9IDIgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwor
CisgICAgLy8gRklYTUU6IFVzaW5nIHdpZHRoL2hlaWdodCBhbG9uZSBhbmQgbm90IGFsc28gZGVh
bGluZyB3aXRoIG1pbi13aWR0aC9tYXgtd2lkdGggaXMgZmxhd2VkLgorICAgIC8vIEZJWE1FOiBV
c2luZyAicXVpcmsiIHRvIGRlY2lkZSB0aGUgbWFyZ2luIHdhc24ndCBzZXQgaXMga2luZCBvZiBs
YW1lLgorICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKSB7CisgICAg
ICAgIGlmIChzdHlsZS0+bWFyZ2luTGVmdCgpLnF1aXJrKCkpCisgICAgICAgICAgICBzdHlsZS0+
c2V0TWFyZ2luTGVmdChMZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOworICAgICAgICBp
ZiAoc3R5bGUtPm1hcmdpblJpZ2h0KCkucXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRN
YXJnaW5SaWdodChMZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOworICAgIH0KKworICAg
IGlmIChzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpIHsKKyAgICAgICAgaWYgKHN0eWxlLT5tYXJn
aW5Ub3AoKS5xdWlyaygpKQorICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpblRvcChMZW5ndGgo
aW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOworICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkJvdHRv
bSgpLnF1aXJrKCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luQm90dG9tKExlbmd0aChp
bnRyaW5zaWNNYXJnaW4sIEZpeGVkKSk7CisgICAgfQorfQorCitzdGF0aWMgRURpc3BsYXkgZXF1
aXZhbGVudEJsb2NrRGlzcGxheShFRGlzcGxheSBkaXNwbGF5LCBib29sIGlzRmxvYXRpbmcsIGJv
b2wgc3RyaWN0UGFyc2luZykKK3sKKyAgICBzd2l0Y2ggKGRpc3BsYXkpIHsKKyAgICBjYXNlIEJM
T0NLOgorICAgIGNhc2UgVEFCTEU6CisgICAgY2FzZSBCT1g6CisgICAgY2FzZSBGTEVYOgorICAg
IGNhc2UgR1JJRDoKKyAgICAgICAgcmV0dXJuIGRpc3BsYXk7CisKKyAgICBjYXNlIExJU1RfSVRF
TToKKyAgICAgICAgLy8gSXQgaXMgYSBXaW5JRSBidWcgdGhhdCBmbG9hdGVkIGxpc3QgaXRlbXMg
bG9zZSB0aGVpciBidWxsZXRzLCBzbyB3ZSdsbCBlbXVsYXRlIHRoZSBxdWlyaywgYnV0IG9ubHkg
aW4gcXVpcmtzIG1vZGUuCisgICAgICAgIGlmICghc3RyaWN0UGFyc2luZyAmJiBpc0Zsb2F0aW5n
KQorICAgICAgICAgICAgcmV0dXJuIEJMT0NLOworICAgICAgICByZXR1cm4gZGlzcGxheTsKKyAg
ICBjYXNlIElOTElORV9UQUJMRToKKyAgICAgICAgcmV0dXJuIFRBQkxFOworICAgIGNhc2UgSU5M
SU5FX0JPWDoKKyAgICAgICAgcmV0dXJuIEJPWDsKKyAgICBjYXNlIElOTElORV9GTEVYOgorICAg
ICAgICByZXR1cm4gRkxFWDsKKyAgICBjYXNlIElOTElORV9HUklEOgorICAgICAgICByZXR1cm4g
R1JJRDsKKworICAgIGNhc2UgSU5MSU5FOgorICAgIGNhc2UgUlVOX0lOOgorICAgIGNhc2UgQ09N
UEFDVDoKKyAgICBjYXNlIElOTElORV9CTE9DSzoKKyAgICBjYXNlIFRBQkxFX1JPV19HUk9VUDoK
KyAgICBjYXNlIFRBQkxFX0hFQURFUl9HUk9VUDoKKyAgICBjYXNlIFRBQkxFX0ZPT1RFUl9HUk9V
UDoKKyAgICBjYXNlIFRBQkxFX1JPVzoKKyAgICBjYXNlIFRBQkxFX0NPTFVNTl9HUk9VUDoKKyAg
ICBjYXNlIFRBQkxFX0NPTFVNTjoKKyAgICBjYXNlIFRBQkxFX0NFTEw6CisgICAgY2FzZSBUQUJM
RV9DQVBUSU9OOgorICAgICAgICByZXR1cm4gQkxPQ0s7CisgICAgY2FzZSBOT05FOgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE5PTkU7CisgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBCTE9DSzsKK30KKworLy8gQ1NTIHJl
cXVpcmVzIHRleHQtZGVjb3JhdGlvbiB0byBiZSByZXNldCBhdCBlYWNoIERPTSBlbGVtZW50IGZv
ciB0YWJsZXMsIAorLy8gaW5saW5lIGJsb2NrcywgaW5saW5lIHRhYmxlcywgcnVuLWlucywgc2hh
ZG93IERPTSBjcm9zc2luZ3MsIGZsb2F0aW5nIGVsZW1lbnRzLAorLy8gYW5kIGFic29sdXRlIG9y
IHJlbGF0aXZlbHkgcG9zaXRpb25lZCBlbGVtZW50cy4KK3N0YXRpYyBib29sIGRvZXNOb3RJbmhl
cml0VGV4dERlY29yYXRpb24oUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKQoreworICAg
IHJldHVybiBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0g
SU5MSU5FX1RBQkxFIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gUlVOX0lOCisgICAgICAgIHx8IHN0
eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX0JMT0NLIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5M
SU5FX0JPWCB8fCBpc0F0U2hhZG93Qm91bmRhcnkoZSkKKyAgICAgICAgfHwgc3R5bGUtPmlzRmxv
YXRpbmcoKSB8fCBzdHlsZS0+aGFzT3V0T2ZGbG93UG9zaXRpb24oKTsKK30KKworc3RhdGljIGJv
b2wgaXNEaXNwbGF5RmxleGlibGVCb3goRURpc3BsYXkgZGlzcGxheSkKK3sKKyAgICByZXR1cm4g
ZGlzcGxheSA9PSBGTEVYIHx8IGRpc3BsYXkgPT0gSU5MSU5FX0ZMRVg7Cit9CisKKyNpZiBFTkFC
TEUoQUNDRUxFUkFURURfT1ZFUkZMT1dfU0NST0xMSU5HKQorc3RhdGljIGJvb2wgaXNTY3JvbGxh
YmxlT3ZlcmZsb3coRU92ZXJmbG93IG92ZXJmbG93KQoreworICAgIHJldHVybiBvdmVyZmxvdyA9
PSBPU0NST0xMIHx8IG92ZXJmbG93ID09IE9BVVRPIHx8IG92ZXJmbG93ID09IE9PVkVSTEFZOwor
fQorI2VuZGlmCisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVy
U3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1lbnQgKmUpCit7Cisg
ICAgQVNTRVJUKHBhcmVudFN0eWxlKTsKKworICAgIC8vIENhY2hlIG91ciBvcmlnaW5hbCBkaXNw
bGF5LgorICAgIHN0eWxlLT5zZXRPcmlnaW5hbERpc3BsYXkoc3R5bGUtPmRpc3BsYXkoKSk7CisK
KyAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSAhPSBOT05FKSB7CisgICAgICAgIC8vIElmIHdlIGhh
dmUgYSA8dGQ+IHRoYXQgc3BlY2lmaWVzIGEgZmxvYXQgcHJvcGVydHksIGluIHF1aXJrcyBtb2Rl
IHdlIGp1c3QgZHJvcCB0aGUgZmxvYXQKKyAgICAgICAgLy8gcHJvcGVydHkuCisgICAgICAgIC8v
IFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Jsb2NrIG9uIDx0ZD5zIGFu
ZCA8dGFibGU+cy4gSW4gcXVpcmtzIG1vZGUgd2UgZm9yY2UKKyAgICAgICAgLy8gdGhlc2UgdGFn
cyB0byByZXRhaW4gdGhlaXIgZGlzcGxheSB0eXBlcy4KKyAgICAgICAgaWYgKGRvY3VtZW50KCkt
PmluUXVpcmtzTW9kZSgpICYmIGUpIHsKKyAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKHRk
VGFnKSkgeworICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KFRBQkxFX0NFTEwpOwor
ICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhOb0Zsb2F0KTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoaXNIVE1MVGFibGVFbGVtZW50KGUpKQorICAgICAgICAgICAgICAgIHN0eWxl
LT5zZXREaXNwbGF5KHN0eWxlLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkgPyBJTkxJTkVfVEFCTEUg
OiBUQUJMRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZSAmJiAoZS0+aGFzVGFnTmFtZSh0
ZFRhZykgfHwgZS0+aGFzVGFnTmFtZSh0aFRhZykpKSB7CisgICAgICAgICAgICBpZiAoc3R5bGUt
PndoaXRlU3BhY2UoKSA9PSBLSFRNTF9OT1dSQVApIHsKKyAgICAgICAgICAgICAgICAvLyBGaWd1
cmUgb3V0IGlmIHdlIGFyZSByZWFsbHkgbm93cmFwcGluZyBvciBpZiB3ZSBzaG91bGQganVzdAor
ICAgICAgICAgICAgICAgIC8vIHVzZSBub3JtYWwgaW5zdGVhZC4gSWYgdGhlIHdpZHRoIG9mIHRo
ZSBjZWxsIGlzIGZpeGVkLCB0aGVuCisgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgYWN0dWFs
bHkgdXNlIE5PV1JBUC4KKyAgICAgICAgICAgICAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNGaXhl
ZCgpKQorICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShOT1JNQUwpOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFdoaXRl
U3BhY2UoTk9XUkFQKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFRh
YmxlcyBuZXZlciBzdXBwb3J0IHRoZSAtd2Via2l0LSogdmFsdWVzIGZvciB0ZXh0LWFsaWduIGFu
ZCB3aWxsIHJlc2V0IGJhY2sgdG8gdGhlIGRlZmF1bHQuCisgICAgICAgIGlmIChlICYmIGlzSFRN
TFRhYmxlRWxlbWVudChlKSAmJiAoc3R5bGUtPnRleHRBbGlnbigpID09IFdFQktJVF9MRUZUIHx8
IHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfQ0VOVEVSIHx8IHN0eWxlLT50ZXh0QWxpZ24o
KSA9PSBXRUJLSVRfUklHSFQpKQorICAgICAgICAgICAgc3R5bGUtPnNldFRleHRBbGlnbihUQVNU
QVJUKTsKKworICAgICAgICAvLyBGcmFtZXMgYW5kIGZyYW1lc2V0cyBuZXZlciBob25vciBwb3Np
dGlvbjpyZWxhdGl2ZSBvciBwb3NpdGlvbjphYnNvbHV0ZS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8K
KyAgICAgICAgLy8gZml4IGEgY3Jhc2ggd2hlcmUgYSBzaXRlIHRyaWVzIHRvIHBvc2l0aW9uIHRo
ZXNlIG9iamVjdHMuIFRoZXkgYWxzbyBuZXZlciBob25vciBkaXNwbGF5LgorICAgICAgICBpZiAo
ZSAmJiAoZS0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgZS0+aGFzVGFnTmFtZShmcmFtZXNldFRh
ZykpKSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oU3RhdGljUG9zaXRpb24pOwor
ICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gUnVieSB0ZXh0IGRvZXMgbm90IHN1cHBvcnQgZmxvYXQgb3IgcG9zaXRpb24uIFRoaXMg
bWlnaHQgY2hhbmdlIHdpdGggZXZvbHV0aW9uIG9mIHRoZSBzcGVjaWZpY2F0aW9uLgorICAgICAg
ICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKHJ0VGFnKSkgeworICAgICAgICAgICAgc3R5bGUtPnNl
dFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRGbG9hdGlu
ZyhOb0Zsb2F0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qg
YmUgb3ZlcnJpZGluZyBzdGFydC8td2Via2l0LWF1dG8gbGlrZSB0aGlzLiBEbyBpdCBpbiBodG1s
LmNzcyBpbnN0ZWFkLgorICAgICAgICAvLyBUYWJsZSBoZWFkZXJzIHdpdGggYSB0ZXh0LWFsaWdu
IG9mIC13ZWJraXQtYXV0byB3aWxsIGNoYW5nZSB0aGUgdGV4dC1hbGlnbiB0byBjZW50ZXIuCisg
ICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUodGhUYWcpICYmIHN0eWxlLT50ZXh0QWxpZ24o
KSA9PSBUQVNUQVJUKQorICAgICAgICAgICAgc3R5bGUtPnNldFRleHRBbGlnbihDRU5URVIpOwor
CisgICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUobGVnZW5kVGFnKSkKKyAgICAgICAgICAg
IHN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKKworICAgICAgICAvLyBBYnNvbHV0ZS9maXhlZCBw
b3NpdGlvbmVkIGVsZW1lbnRzLCBmbG9hdGluZyBlbGVtZW50cyBhbmQgdGhlIGRvY3VtZW50IGVs
ZW1lbnQgbmVlZCBibG9jay1saWtlIG91dHNpZGUgZGlzcGxheS4KKyAgICAgICAgaWYgKHN0eWxl
LT5oYXNPdXRPZkZsb3dQb3NpdGlvbigpIHx8IHN0eWxlLT5pc0Zsb2F0aW5nKCkgfHwgKGUgJiYg
ZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gZSkpCisgICAgICAgICAgICBzdHls
ZS0+c2V0RGlzcGxheShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxlLT5kaXNwbGF5KCksIHN0
eWxlLT5pc0Zsb2F0aW5nKCksICFkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkpOworCisgICAg
ICAgIC8vIEZJWE1FOiBEb24ndCBzdXBwb3J0IHRoaXMgbXV0YXRpb24gZm9yIHBzZXVkbyBzdHls
ZXMgbGlrZSBmaXJzdC1sZXR0ZXIgb3IgZmlyc3QtbGluZSwgc2luY2UgaXQncyBub3QgY29tcGxl
dGVseQorICAgICAgICAvLyBjbGVhciBob3cgdGhhdCBzaG91bGQgd29yay4KKyAgICAgICAgaWYg
KHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FICYmIHN0eWxlLT5zdHlsZVR5cGUoKSA9PSBOT1BT
RVVETyAmJiBzdHlsZS0+d3JpdGluZ01vZGUoKSAhPSBwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUo
KSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KElOTElORV9CTE9DSyk7CisKKyAgICAg
ICAgLy8gQWZ0ZXIgcGVyZm9ybWluZyB0aGUgZGlzcGxheSBtdXRhdGlvbiwgY2hlY2sgdGFibGUg
cm93cy4gV2UgZG8gbm90IGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZlIG9yIHBvc2l0aW9uOnN0aWNr
eSBvbgorICAgICAgICAvLyB0YWJsZSByb3dzIG9yIGNlbGxzLiBUaGlzIGhhcyBiZWVuIGVzdGFi
bGlzaGVkIGZvciBwb3NpdGlvbjpyZWxhdGl2ZSBpbiBDU1MyLjEgKGFuZCBjYXVzZWQgYSBjcmFz
aCBpbiBjb250YWluaW5nQmxvY2soKQorICAgICAgICAvLyBvbiBzb21lIHNpdGVzKS4KKyAgICAg
ICAgaWYgKChzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0hFQURFUl9HUk9VUCB8fCBzdHlsZS0+
ZGlzcGxheSgpID09IFRBQkxFX1JPV19HUk9VUAorICAgICAgICAgICAgfHwgc3R5bGUtPmRpc3Bs
YXkoKSA9PSBUQUJMRV9GT09URVJfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9S
T1cpCisgICAgICAgICAgICAmJiBzdHlsZS0+aGFzSW5GbG93UG9zaXRpb24oKSkKKyAgICAgICAg
ICAgIHN0eWxlLT5zZXRQb3NpdGlvbihTdGF0aWNQb3NpdGlvbik7CisKKyAgICAgICAgLy8gd3Jp
dGluZy1tb2RlIGRvZXMgbm90IGFwcGx5IHRvIHRhYmxlIHJvdyBncm91cHMsIHRhYmxlIGNvbHVt
biBncm91cHMsIHRhYmxlIHJvd3MsIGFuZCB0YWJsZSBjb2x1bW5zLgorICAgICAgICAvLyBGSVhN
RTogVGFibGUgY2VsbHMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gYmUgcGVycGVuZGljdWxhciBvciBm
bGlwcGVkIHdpdGggcmVzcGVjdCB0byB0aGUgdGFibGUsIHRob3VnaC4KKyAgICAgICAgaWYgKHN0
eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfQ09MVU1OIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFC
TEVfQ09MVU1OX0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfRk9PVEVSX0dST1VQ
CisgICAgICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0hFQURFUl9HUk9VUCB8
fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JPVyB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRB
QkxFX1JPV19HUk9VUAorICAgICAgICAgICAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9D
RUxMKQorICAgICAgICAgICAgc3R5bGUtPnNldFdyaXRpbmdNb2RlKHBhcmVudFN0eWxlLT53cml0
aW5nTW9kZSgpKTsKKworICAgICAgICAvLyBGSVhNRTogU2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBi
bG9jay1mbG93IG9uIGZsZXhpYmxlIGJveGVzIHlldCwgZGlzYWxsb3cgc2V0dGluZworICAgICAg
ICAvLyBvZiBibG9jay1mbG93IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gVG9wVG9Cb3R0b21Xcml0
aW5nTW9kZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ2NDE4IC0gRmxleGlibGUgYm94IHN1cHBvcnQuCisgICAgICAgIGlmIChzdHlsZS0+d3Jp
dGluZ01vZGUoKSAhPSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlICYmIChzdHlsZS0+ZGlzcGxheSgp
ID09IEJPWCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9CT1gpKQorICAgICAgICAgICAg
c3R5bGUtPnNldFdyaXRpbmdNb2RlKFRvcFRvQm90dG9tV3JpdGluZ01vZGUpOworCisgICAgICAg
IGlmIChpc0Rpc3BsYXlGbGV4aWJsZUJveChwYXJlbnRTdHlsZS0+ZGlzcGxheSgpKSkgeworICAg
ICAgICAgICAgc3R5bGUtPnNldEZsb2F0aW5nKE5vRmxvYXQpOworICAgICAgICAgICAgc3R5bGUt
PnNldERpc3BsYXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZS0+ZGlzcGxheSgpLCBzdHls
ZS0+aXNGbG9hdGluZygpLCAhZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpKTsKKyAgICAgICAg
fQorCisjaWYgRU5BQkxFKERJQUxPR19FTEVNRU5UKQorICAgICAgICAvLyBQZXIgdGhlIHNwZWMs
IHBvc2l0aW9uICdzdGF0aWMnIGFuZCAncmVsYXRpdmUnIGluIHRoZSB0b3AgbGF5ZXIgY29tcHV0
ZSB0byAnYWJzb2x1dGUnLgorICAgICAgICBpZiAoZSAmJiBlLT5pc0luVG9wTGF5ZXIoKSAmJiAo
c3R5bGUtPnBvc2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24gfHwgc3R5bGUtPnBvc2l0aW9uKCkg
PT0gUmVsYXRpdmVQb3NpdGlvbikpIHsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRQb3NpdGlvbihB
YnNvbHV0ZVBvc2l0aW9uKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsK
KyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIG91ciB6LWluZGV4
IHZhbHVlIGlzIG9ubHkgYXBwbGllZCBpZiB0aGUgb2JqZWN0IGlzIHBvc2l0aW9uZWQuCisgICAg
aWYgKHN0eWxlLT5wb3NpdGlvbigpID09IFN0YXRpY1Bvc2l0aW9uICYmICFpc0Rpc3BsYXlGbGV4
aWJsZUJveChwYXJlbnRTdHlsZS0+ZGlzcGxheSgpKSkKKyAgICAgICAgc3R5bGUtPnNldEhhc0F1
dG9aSW5kZXgoKTsKKworICAgIC8vIEF1dG8gei1pbmRleCBiZWNvbWVzIDAgZm9yIHRoZSByb290
IGVsZW1lbnQgYW5kIHRyYW5zcGFyZW50IG9iamVjdHMuIFRoaXMgcHJldmVudHMKKyAgICAvLyBj
YXNlcyB3aGVyZSBvYmplY3RzIHRoYXQgc2hvdWxkIGJlIGJsZW5kZWQgYXMgYSBzaW5nbGUgdW5p
dCBlbmQgdXAgd2l0aCBhIG5vbi10cmFuc3BhcmVudAorICAgIC8vIG9iamVjdCB3ZWRnZWQgaW4g
YmV0d2VlbiB0aGVtLiBBdXRvIHotaW5kZXggYWxzbyBiZWNvbWVzIDAgZm9yIG9iamVjdHMgdGhh
dCBzcGVjaWZ5IHRyYW5zZm9ybXMvbWFza3MvcmVmbGVjdGlvbnMuCisgICAgaWYgKHN0eWxlLT5o
YXNBdXRvWkluZGV4KCkgJiYgKChlICYmIGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgp
ID09IGUpCisgICAgICAgIHx8IHN0eWxlLT5vcGFjaXR5KCkgPCAxLjBmCisgICAgICAgIHx8IHN0
eWxlLT5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKQorICAgICAgICB8fCBzdHlsZS0+aGFz
TWFzaygpCisgICAgICAgIHx8IHN0eWxlLT5jbGlwUGF0aCgpCisgICAgICAgIHx8IHN0eWxlLT5i
b3hSZWZsZWN0KCkKKyAgICAgICAgfHwgc3R5bGUtPmhhc0ZpbHRlcigpCisgICAgICAgIHx8IHN0
eWxlLT5oYXNCbGVuZE1vZGUoKQorICAgICAgICB8fCBzdHlsZS0+cG9zaXRpb24oKSA9PSBTdGlj
a3lQb3NpdGlvbgorICAgICAgICB8fCAoc3R5bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlv
biAmJiBlICYmIGUtPmRvY3VtZW50KCktPnBhZ2UoKSAmJiBlLT5kb2N1bWVudCgpLT5wYWdlKCkt
PnNldHRpbmdzKCktPmZpeGVkUG9zaXRpb25DcmVhdGVzU3RhY2tpbmdDb250ZXh0KCkpCisjaWYg
RU5BQkxFKERJQUxPR19FTEVNRU5UKQorICAgICAgICB8fCAoZSAmJiBlLT5pc0luVG9wTGF5ZXIo
KSkKKyNlbmRpZgorICAgICAgICApKQorICAgICAgICBzdHlsZS0+c2V0WkluZGV4KDApOworCisg
ICAgLy8gVGV4dGFyZWEgY29uc2lkZXJzIG92ZXJmbG93IHZpc2libGUgYXMgYXV0by4KKyAgICBp
ZiAoZSAmJiBpc0hUTUxUZXh0QXJlYUVsZW1lbnQoZSkpIHsKKyAgICAgICAgc3R5bGUtPnNldE92
ZXJmbG93WChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT1ZJU0lCTEUgPyBPQVVUTyA6IHN0eWxlLT5v
dmVyZmxvd1goKSk7CisgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1koc3R5bGUtPm92ZXJmbG93
WSgpID09IE9WSVNJQkxFID8gT0FVVE8gOiBzdHlsZS0+b3ZlcmZsb3dZKCkpOworICAgIH0KKwor
ICAgIGlmIChkb2VzTm90SW5oZXJpdFRleHREZWNvcmF0aW9uKHN0eWxlLCBlKSkKKyAgICAgICAg
c3R5bGUtPnNldFRleHREZWNvcmF0aW9uc0luRWZmZWN0KHN0eWxlLT50ZXh0RGVjb3JhdGlvbigp
KTsKKyAgICBlbHNlCisgICAgICAgIHN0eWxlLT5hZGRUb1RleHREZWNvcmF0aW9uc0luRWZmZWN0
KHN0eWxlLT50ZXh0RGVjb3JhdGlvbigpKTsKKworICAgIC8vIElmIGVpdGhlciBvdmVyZmxvdyB2
YWx1ZSBpcyBub3QgdmlzaWJsZSwgY2hhbmdlIHRvIGF1dG8uCisgICAgaWYgKHN0eWxlLT5vdmVy
Zmxvd1goKSA9PSBPTUFSUVVFRSAmJiBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT01BUlFVRUUpCisg
ICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1koT01BUlFVRUUpOworICAgIGVsc2UgaWYgKHN0eWxl
LT5vdmVyZmxvd1koKSA9PSBPTUFSUVVFRSAmJiBzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT01BUlFV
RUUpCisgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goT01BUlFVRUUpOworICAgIGVsc2UgaWYg
KHN0eWxlLT5vdmVyZmxvd1goKSA9PSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0g
T1ZJU0lCTEUpIHsKKyAgICAgICAgLy8gRklYTUU6IE9uY2Ugd2UgaW1wbGVtZW50IHBhZ2luYXRp
b24gY29udHJvbHMsIG92ZXJmbG93LXggc2hvdWxkIGRlZmF1bHQgdG8gaGlkZGVuCisgICAgICAg
IC8vIGlmIG92ZXJmbG93LXkgaXMgc2V0IHRvIC13ZWJraXQtcGFnZWQteCBvciAtd2Via2l0LXBh
Z2UteS4gRm9yIG5vdywgd2UnbGwgbGV0IGl0CisgICAgICAgIC8vIGRlZmF1bHQgdG8gYXV0byBz
byB3ZSBjYW4gYXQgbGVhc3Qgc2Nyb2xsIHRocm91Z2ggdGhlIHBhZ2VzLgorICAgICAgICBzdHls
ZS0+c2V0T3ZlcmZsb3dYKE9BVVRPKTsKKyAgICB9IGVsc2UgaWYgKHN0eWxlLT5vdmVyZmxvd1ko
KSA9PSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT1ZJU0lCTEUpCisgICAgICAg
IHN0eWxlLT5zZXRPdmVyZmxvd1koT0FVVE8pOworCisgICAgLy8gQ2FsbCBzZXRTdHlsZXNGb3JQ
YWdpbmF0aW9uTW9kZSgpIGlmIGEgcGFnaW5hdGlvbiBtb2RlIGlzIHNldCBmb3IgYW55IG5vbi1y
b290IGVsZW1lbnRzLiBJZiB0aGVzZQorICAgIC8vIHN0eWxlcyBhcmUgc3BlY2lmaWVkIG9uIGEg
cm9vdCBlbGVtZW50LCB0aGVuIHRoZXkgd2lsbCBiZSBpbmNvcnBvcmF0ZWQgaW4KKyAgICAvLyBT
dHlsZVJlc29sdmVyOjpzdHlsZUZvckRvY3VtZW50KCkuCisgICAgaWYgKChzdHlsZS0+b3ZlcmZs
b3dZKCkgPT0gT1BBR0VEWCB8fCBzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1BBR0VEWSkgJiYgIShl
ICYmIChlLT5oYXNUYWdOYW1lKGh0bWxUYWcpIHx8IGUtPmhhc1RhZ05hbWUoYm9keVRhZykpKSkK
KyAgICAgICAgc3R5bGUtPnNldENvbHVtblN0eWxlc0Zyb21QYWdpbmF0aW9uTW9kZShXZWJDb3Jl
OjpwYWdpbmF0aW9uTW9kZUZvclJlbmRlclN0eWxlKHN0eWxlKSk7CisKKyAgICAvLyBUYWJsZSBy
b3dzLCBzZWN0aW9ucyBhbmQgdGhlIHRhYmxlIGl0c2VsZiB3aWxsIHN1cHBvcnQgb3ZlcmZsb3c6
aGlkZGVuIGFuZCB3aWxsIGlnbm9yZSBzY3JvbGwvYXV0by4KKyAgICAvLyBGSVhNRTogRXZlbnR1
YWxseSB0YWJsZSBzZWN0aW9ucyB3aWxsIHN1cHBvcnQgYXV0byBhbmQgc2Nyb2xsLgorICAgIGlm
IChzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5F
X1RBQkxFCisgICAgICAgIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XX0dST1VQIHx8
IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XKSB7CisgICAgICAgIGlmIChzdHlsZS0+b3Zl
cmZsb3dYKCkgIT0gT1ZJU0lCTEUgJiYgc3R5bGUtPm92ZXJmbG93WCgpICE9IE9ISURERU4pCisg
ICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9WSVNJQkxFKTsKKyAgICAgICAgaWYgKHN0
eWxlLT5vdmVyZmxvd1koKSAhPSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT0hJ
RERFTikKKyAgICAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1koT1ZJU0lCTEUpOworICAgIH0K
KworICAgIC8vIE1lbnVsaXN0cyBzaG91bGQgaGF2ZSB2aXNpYmxlIG92ZXJmbG93CisgICAgaWYg
KHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KSB7CisgICAgICAgIHN0eWxlLT5z
ZXRPdmVyZmxvd1goT1ZJU0lCTEUpOworICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9WSVNJ
QkxFKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfT1ZFUkZMT1dfU0NST0xMSU5H
KQorICAgIC8vIFRvdWNoIG92ZXJmbG93IHNjcm9sbGluZyBjcmVhdGVzIGEgc3RhY2tpbmcgY29u
dGV4dC4KKyAgICBpZiAoc3R5bGUtPmhhc0F1dG9aSW5kZXgoKSAmJiBzdHlsZS0+dXNlVG91Y2hP
dmVyZmxvd1Njcm9sbGluZygpICYmIChpc1Njcm9sbGFibGVPdmVyZmxvdyhzdHlsZS0+b3ZlcmZs
b3dYKCkpIHx8IGlzU2Nyb2xsYWJsZU92ZXJmbG93KHN0eWxlLT5vdmVyZmxvd1koKSkpKQorICAg
ICAgICBzdHlsZS0+c2V0WkluZGV4KDApOworI2VuZGlmCisKKyAgICAvLyBDdWxsIG91dCBhbnkg
dXNlbGVzcyBsYXllcnMgYW5kIGFsc28gcmVwZWF0IHBhdHRlcm5zIGludG8gYWRkaXRpb25hbCBs
YXllcnMuCisgICAgc3R5bGUtPmFkanVzdEJhY2tncm91bmRMYXllcnMoKTsKKyAgICBzdHlsZS0+
YWRqdXN0TWFza0xheWVycygpOworCisgICAgLy8gRG8gdGhlIHNhbWUgZm9yIGFuaW1hdGlvbnMg
YW5kIHRyYW5zaXRpb25zLgorICAgIHN0eWxlLT5hZGp1c3RBbmltYXRpb25zKCk7CisgICAgc3R5
bGUtPmFkanVzdFRyYW5zaXRpb25zKCk7CisKKyAgICAvLyBJbXBvcnRhbnQ6IEludHJpbnNpYyBt
YXJnaW5zIGdldCBhZGRlZCB0byBjb250cm9scyBiZWZvcmUgdGhlIHRoZW1lIGhhcyBhZGp1c3Rl
ZCB0aGUgc3R5bGUsIHNpbmNlIHRoZSB0aGVtZSB3aWxsCisgICAgLy8gYWx0ZXIgZm9udHMgYW5k
IGhlaWdodHMvd2lkdGhzLgorICAgIGlmIChlICYmIGUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkg
JiYgc3R5bGUtPmZvbnRTaXplKCkgPj0gMTEpIHsKKyAgICAgICAgLy8gRG9uJ3QgYXBwbHkgaW50
cmluc2ljIG1hcmdpbnMgdG8gaW1hZ2UgYnV0dG9ucy4gVGhlIGRlc2lnbmVyIGtub3dzIGhvdyBi
aWcgdGhlIGltYWdlcyBhcmUsCisgICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gdHJlYXQgYWxsIGlt
YWdlIGJ1dHRvbnMgYXMgdGhvdWdoIHRoZXkgd2VyZSBleHBsaWNpdGx5IHNpemVkLgorICAgICAg
ICBpZiAoIWlzSFRNTElucHV0RWxlbWVudChlKSB8fCAhdG9IVE1MSW5wdXRFbGVtZW50KGUpLT5p
c0ltYWdlQnV0dG9uKCkpCisgICAgICAgICAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsK
KyAgICB9CisKKyAgICAvLyBMZXQgdGhlIHRoZW1lIGFsc28gaGF2ZSBhIGNyYWNrIGF0IGFkanVz
dGluZyB0aGUgc3R5bGUuCisgICAgaWYgKHN0eWxlLT5oYXNBcHBlYXJhbmNlKCkpCisgICAgICAg
IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUodGhpcywgc3R5bGUsIGUs
IG1fc3RhdGUuaGFzVUFBcHBlYXJhbmNlKCksIG1fc3RhdGUuYm9yZGVyRGF0YSgpLCBtX3N0YXRl
LmJhY2tncm91bmREYXRhKCksIG1fc3RhdGUuYmFja2dyb3VuZENvbG9yKCkpOworCisgICAgLy8g
SWYgd2UgaGF2ZSBmaXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBz
dHlsZS4KKyAgICBpZiAoc3R5bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCisgICAg
ICAgIHN0eWxlLT5zZXRVbmlxdWUoKTsKKworICAgIC8vIEZJWE1FOiB3aGVuIGRyb3BwaW5nIHRo
ZSAtd2Via2l0IHByZWZpeCBvbiB0cmFuc2Zvcm0tc3R5bGUsIHdlIHNob3VsZCBhbHNvIGhhdmUg
b3BhY2l0eSA8IDEgY2F1c2UgZmxhdHRlbmluZy4KKyAgICBpZiAoc3R5bGUtPnByZXNlcnZlczNE
KCkgJiYgKHN0eWxlLT5vdmVyZmxvd1goKSAhPSBPVklTSUJMRQorICAgICAgICB8fCBzdHlsZS0+
b3ZlcmZsb3dZKCkgIT0gT1ZJU0lCTEUKKyAgICAgICAgfHwgc3R5bGUtPmhhc0ZpbHRlcigpKSkK
KyAgICAgICAgc3R5bGUtPnNldFRyYW5zZm9ybVN0eWxlM0QoVHJhbnNmb3JtU3R5bGUzREZsYXQp
OworCisgICAgLy8gU2VhbWxlc3MgaWZyYW1lcyBiZWhhdmUgbGlrZSBibG9ja3MuIE1hcCB0aGVp
ciBkaXNwbGF5IHRvIGlubGluZS1ibG9jayB3aGVuIG1hcmtlZCBpbmxpbmUuCisgICAgaWYgKGUg
JiYgZS0+aGFzVGFnTmFtZShpZnJhbWVUYWcpICYmIHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5F
ICYmIHRvSFRNTElGcmFtZUVsZW1lbnQoZSktPnNob3VsZERpc3BsYXlTZWFtbGVzc2x5KCkpCisg
ICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KElOTElORV9CTE9DSyk7CisKKyAgICBhZGp1c3RHcmlk
SXRlbVBvc2l0aW9uKHN0eWxlKTsKKworI2lmIEVOQUJMRShTVkcpCisgICAgaWYgKGUgJiYgZS0+
aXNTVkdFbGVtZW50KCkpIHsKKyAgICAgICAgLy8gU3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIv
U1ZHL21hc2tpbmcuaHRtbCNPdmVyZmxvd1Byb3BlcnR5CisgICAgICAgIGlmIChzdHlsZS0+b3Zl
cmZsb3dZKCkgPT0gT1NDUk9MTCkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1koT0hJ
RERFTik7CisgICAgICAgIGVsc2UgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPQVVUTykKKyAg
ICAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1koT1ZJU0lCTEUpOworCisgICAgICAgIGlmIChz
dHlsZS0+b3ZlcmZsb3dYKCkgPT0gT1NDUk9MTCkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRPdmVy
Zmxvd1goT0hJRERFTik7CisgICAgICAgIGVsc2UgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBP
QVVUTykKKyAgICAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goT1ZJU0lCTEUpOworCisgICAg
ICAgIC8vIE9ubHkgdGhlIHJvb3QgPHN2Zz4gZWxlbWVudCBpbiBhbiBTVkcgZG9jdW1lbnQgZnJh
Z21lbnQgdHJlZSBob25vcnMgY3NzIHBvc2l0aW9uCisgICAgICAgIGlmICghKGUtPmhhc1RhZ05h
bWUoU1ZHTmFtZXM6OnN2Z1RhZykgJiYgZS0+cGFyZW50Tm9kZSgpICYmICFlLT5wYXJlbnROb2Rl
KCktPmlzU1ZHRWxlbWVudCgpKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRQb3NpdGlvbihSZW5k
ZXJTdHlsZTo6aW5pdGlhbFBvc2l0aW9uKCkpOworCisgICAgICAgIC8vIFJlbmRlclNWR1Jvb3Qg
aGFuZGxlcyB6b29taW5nIGZvciB0aGUgd2hvbGUgU1ZHIHN1YnRyZWUsIHNvIGZvcmVpZ25PYmpl
Y3QgY29udGVudCBzaG91bGQKKyAgICAgICAgLy8gbm90IGJlIHNjYWxlZCBhZ2Fpbi4KKyAgICAg
ICAgaWYgKGUtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZvcmVpZ25PYmplY3RUYWcpKQorICAgICAg
ICAgICAgc3R5bGUtPnNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkp
OworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdEdyaWRJdGVt
UG9zaXRpb24oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIC8vIElmIG9wcG9zaW5n
IGdyaWQtcGxhY2VtZW50IHByb3BlcnRpZXMgYm90aCBzcGVjaWZ5IGEgZ3JpZCBzcGFuLCB0aGV5
IGJvdGggY29tcHV0ZSB0byDigJhhdXRv4oCZLgorICAgIGlmIChzdHlsZS0+Z3JpZEl0ZW1Db2x1
bW5TdGFydCgpLmlzU3BhbigpICYmIHN0eWxlLT5ncmlkSXRlbUNvbHVtbkVuZCgpLmlzU3Bhbigp
KSB7CisgICAgICAgIHN0eWxlLT5zZXRHcmlkSXRlbUNvbHVtblN0YXJ0KEdyaWRQb3NpdGlvbigp
KTsKKyAgICAgICAgc3R5bGUtPnNldEdyaWRJdGVtQ29sdW1uRW5kKEdyaWRQb3NpdGlvbigpKTsK
KyAgICB9CisKKyAgICBpZiAoc3R5bGUtPmdyaWRJdGVtUm93U3RhcnQoKS5pc1NwYW4oKSAmJiBz
dHlsZS0+Z3JpZEl0ZW1Sb3dFbmQoKS5pc1NwYW4oKSkgeworICAgICAgICBzdHlsZS0+c2V0R3Jp
ZEl0ZW1Sb3dTdGFydChHcmlkUG9zaXRpb24oKSk7CisgICAgICAgIHN0eWxlLT5zZXRHcmlkSXRl
bVJvd0VuZChHcmlkUG9zaXRpb24oKSk7CisgICAgfQorfQorCitib29sIFN0eWxlUmVzb2x2ZXI6
OmNoZWNrUmVnaW9uU3R5bGUoRWxlbWVudCogcmVnaW9uRWxlbWVudCkKK3sKKyAgICAvLyBGSVhN
RSAoQlVHIDcyNDcyKTogV2UgZG9uJ3QgYWRkIEAtd2Via2l0LXJlZ2lvbiBydWxlcyBvZiBzY29w
ZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LAorICAgIC8vIHNvIGFsbCByZWdpb24gcnVs
ZXMgYXJlIGdsb2JhbCBieSBkZWZhdWx0LiBWZXJpZnkgd2hldGhlciB0aGF0IGNhbiBzdGFuZCBv
ciBuZWVkcyBjaGFuZ2luZy4KKworICAgIHVuc2lnbmVkIHJ1bGVzU2l6ZSA9IG1fcnVsZVNldHMu
YXV0aG9yU3R5bGUoKS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytpKSB7CisgICAgICAgIEFTU0VS
VChtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCktPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMu
YXQoaSkucnVsZVNldC5nZXQoKSk7CisgICAgICAgIGlmIChjaGVja1JlZ2lvblNlbGVjdG9yKG1f
cnVsZVNldHMuYXV0aG9yU3R5bGUoKS0+bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChp
KS5zZWxlY3RvciwgcmVnaW9uRWxlbWVudCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBpZiAobV9ydWxlU2V0cy51c2VyU3R5bGUoKSkgeworICAgICAgICBydWxlc1Np
emUgPSBtX3J1bGVTZXRzLnVzZXJTdHlsZSgpLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRz
LnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzU2l6ZTsgKytp
KSB7CisgICAgICAgICAgICBBU1NFUlQobV9ydWxlU2V0cy51c2VyU3R5bGUoKS0+bV9yZWdpb25T
ZWxlY3RvcnNBbmRSdWxlU2V0cy5hdChpKS5ydWxlU2V0LmdldCgpKTsKKyAgICAgICAgICAgIGlm
IChjaGVja1JlZ2lvblNlbGVjdG9yKG1fcnVsZVNldHMudXNlclN0eWxlKCktPm1fcmVnaW9uU2Vs
ZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1lbnQpKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzdGF0aWMgdm9pZCBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKFJlbmRlclN0
eWxlKiBzdHlsZSkKK3sKKyAgICBGb250T3JpZW50YXRpb24gZm9udE9yaWVudGF0aW9uOworICAg
IE5vbkNKS0dseXBoT3JpZW50YXRpb24gZ2x5cGhPcmllbnRhdGlvbjsKKyAgICBnZXRGb250QW5k
R2x5cGhPcmllbnRhdGlvbihzdHlsZSwgZm9udE9yaWVudGF0aW9uLCBnbHlwaE9yaWVudGF0aW9u
KTsKKworICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uID0gc3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpOworICAgIGlmIChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24o
KSA9PSBmb250T3JpZW50YXRpb24gJiYgZm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50
YXRpb24oKSA9PSBnbHlwaE9yaWVudGF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBGb250
RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgbmV3
Rm9udERlc2NyaXB0aW9uLnNldE5vbkNKS0dseXBoT3JpZW50YXRpb24oZ2x5cGhPcmllbnRhdGlv
bik7CisgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldE9yaWVudGF0aW9uKGZvbnRPcmllbnRhdGlv
bik7CisgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwor
fQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQoreworICAgIGlmICghbV9zdGF0
ZS5mb250RGlydHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gbV9zdGF0ZS5zdHlsZSgpOworICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdHls
ZSwgbV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUs
IG1fc3RhdGUucGFyZW50U3R5bGUoKSk7CisgICAgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShz
dHlsZSk7CisgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOworICAgIG1f
c3RhdGUuc2V0Rm9udERpcnR5KGZhbHNlKTsKK30KKworVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVC
YXNlPiA+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIHVu
c2lnbmVkIHJ1bGVzVG9JbmNsdWRlKQoreworICAgIHJldHVybiBwc2V1ZG9TdHlsZVJ1bGVzRm9y
RWxlbWVudChlLCBOT1BTRVVETywgcnVsZXNUb0luY2x1ZGUpOworfQorCitWZWN0b3I8UmVmUHRy
PFN0eWxlUnVsZUJhc2U+ID4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1l
bnQoRWxlbWVudCogZSwgUHNldWRvSWQgcHNldWRvSWQsIHVuc2lnbmVkIHJ1bGVzVG9JbmNsdWRl
KQoreworICAgIGlmICghZSB8fCAhZS0+ZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVk
KCkpCisgICAgICAgIHJldHVybiBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4oKTsKKwor
ICAgIGluaXRFbGVtZW50KGUpOworICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1
bWVudCgpLCBlLCAwKTsKKworICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yIGNvbGxlY3Rvcih0aGlz
LCBtX3N0YXRlKTsKKyAgICBjb2xsZWN0b3Iuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OkNvbGxl
Y3RpbmdSdWxlcyk7CisgICAgY29sbGVjdG9yLnNldFBzZXVkb1N0eWxlUmVxdWVzdChQc2V1ZG9T
dHlsZVJlcXVlc3QocHNldWRvSWQpKTsKKyAgICBjb2xsZWN0b3Iuc2V0TWVkaXVtKG1fbWVkaXVt
LmdldCgpKTsKKworICAgIGlmIChydWxlc1RvSW5jbHVkZSAmIFVBQW5kVXNlckNTU1J1bGVzKSB7
CisgICAgICAgIC8vIEZpcnN0IHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHVzZXIgYWdlbnQgc2hl
ZXQuCisgICAgICAgIGNvbGxlY3Rvci5tYXRjaFVBUnVsZXMoKTsKKyAgICAgICAgCisgICAgICAg
IC8vIE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgorICAgICAgICBpZiAobV9tYXRjaEF1
dGhvckFuZFVzZXJTdHlsZXMpCisgICAgICAgICAgICBjb2xsZWN0b3IubWF0Y2hVc2VyUnVsZXMo
cnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKyAgICB9CisKKyAgICBpZiAobV9tYXRj
aEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0aG9yQ1NTUnVsZXMp
KSB7CisgICAgICAgIGNvbGxlY3Rvci5zZXRTYW1lT3JpZ2luT25seSghKHJ1bGVzVG9JbmNsdWRl
ICYgQ3Jvc3NPcmlnaW5DU1NSdWxlcykpOworCisgICAgICAgIC8vIENoZWNrIHRoZSBydWxlcyBp
biBhdXRob3Igc2hlZXRzLgorICAgICAgICBjb2xsZWN0b3IubWF0Y2hBdXRob3JSdWxlcyhydWxl
c1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOworICAgIH0KKworICAgIHJldHVybiBjb2xsZWN0
b3IubWF0Y2hlZFJ1bGVMaXN0KCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIHRoaXMgaXMgbW9zdGx5IGJvcmluZyBzdHVmZiBvbiBob3cgdG8gYXBwbHkgYSBjZXJ0
YWluIHJ1bGUgdG8gdGhlIHJlbmRlcnN0eWxlLi4uCisKK0xlbmd0aCBTdHlsZVJlc29sdmVyOjpj
b252ZXJ0VG9JbnRMZW5ndGgoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUs
IGRvdWJsZSBtdWx0aXBsaWVyKQoreworICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZSA/IHByaW1p
dGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNl
bnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBGcmFjdGlvbkNvbnZlcnNpb24g
fCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZSwgcm9vdFN0eWxlLCBtdWx0aXBs
aWVyKSA6IExlbmd0aChVbmRlZmluZWQpOworfQorCitMZW5ndGggU3R5bGVSZXNvbHZlcjo6Y29u
dmVydFRvRmxvYXRMZW5ndGgoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUs
IGRvdWJsZSBtdWx0aXBsaWVyKQoreworICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZSA/IHByaW1p
dGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRGbG9hdENvbnZlcnNpb24gfCBQZXJjZW50
Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9uIHwg
Vmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGll
cikgOiBMZW5ndGgoVW5kZWZpbmVkKTsKK30KKwordGVtcGxhdGUgPFN0eWxlUmVzb2x2ZXI6OlN0
eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+Cit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVy
dGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUs
IGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RU
eXBlIHByb3BlcnR5V2hpdGVsaXN0VHlwZSkKK3sKKyAgICBBU1NFUlQoKHByb3BlcnR5V2hpdGVs
aXN0VHlwZSAhPSBQcm9wZXJ0eVdoaXRlbGlzdFJlZ2lvbikgfHwgbV9zdGF0ZS5yZWdpb25Gb3JT
dHlsaW5nKCkpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQcm9jZXNzUnVsZShkb2N1bWVudCgpLCBydWxl
LCB0aGlzKTsKKworICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0aWVzLT5wcm9w
ZXJ0eUNvdW50KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7
ICsraSkgeworICAgICAgICBTdHlsZVByb3BlcnR5U2V0OjpQcm9wZXJ0eVJlZmVyZW5jZSBjdXJy
ZW50ID0gcHJvcGVydGllcy0+cHJvcGVydHlBdChpKTsKKyAgICAgICAgaWYgKGlzSW1wb3J0YW50
ICE9IGN1cnJlbnQuaXNJbXBvcnRhbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAoaW5oZXJpdGVkT25seSAmJiAhY3VycmVudC5pc0luaGVyaXRlZCgpKSB7CisgICAgICAg
ICAgICAvLyBJZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgZXhwbGljaXRseSBpbmhlcml0ZWQsIHdl
IG5lZWQgdG8gYXBwbHkgZnVydGhlciBub24taW5oZXJpdGVkIHByb3BlcnRpZXMKKyAgICAgICAg
ICAgIC8vIGFzIHRoZXkgbWlnaHQgb3ZlcnJpZGUgdGhlIHZhbHVlIGluaGVyaXRlZCBoZXJlLiBG
b3IgdGhpcyByZWFzb24gd2UgZG9uJ3QgYWxsb3cgZGVjbGFyYXRpb25zIHdpdGgKKyAgICAgICAg
ICAgIC8vIGV4cGxpY2l0bHkgaW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gYmUgY2FjaGVkLgorICAg
ICAgICAgICAgQVNTRVJUKCFjdXJyZW50LnZhbHVlKCktPmlzSW5oZXJpdGVkVmFsdWUoKSk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5ID0gY3VycmVudC5pZCgpOworCisgICAgICAgIGlmIChwcm9wZXJ0eVdoaXRlbGlzdFR5
cGUgPT0gUHJvcGVydHlXaGl0ZWxpc3RSZWdpb24gJiYgIVN0eWxlUmVzb2x2ZXI6OmlzVmFsaWRS
ZWdpb25TdHlsZVByb3BlcnR5KHByb3BlcnR5KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworI2lm
IEVOQUJMRShWSURFT19UUkFDSykKKyAgICAgICAgaWYgKHByb3BlcnR5V2hpdGVsaXN0VHlwZSA9
PSBQcm9wZXJ0eVdoaXRlbGlzdEN1ZSAmJiAhU3R5bGVSZXNvbHZlcjo6aXNWYWxpZEN1ZVN0eWxl
UHJvcGVydHkocHJvcGVydHkpKQorICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAgICAg
ICAgc3dpdGNoIChwYXNzKSB7CisjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCisgICAgICAgIGNh
c2UgVmFyaWFibGVEZWZpbml0aW9uczoKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKENTU1By
b3BlcnR5VmFyaWFibGUgPCBmaXJzdENTU1Byb3BlcnR5LCBDU1NfdmFyaWFibGVfaXNfYmVmb3Jl
X2ZpcnN0X3Byb3BlcnR5KTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0
eVZhcmlhYmxlKQorICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBj
dXJyZW50LnZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgY2Fz
ZSBIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzOgorICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoZmly
c3RDU1NQcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUNvbG9yLCBDU1NfY29sb3JfaXNfZmlyc3RfcHJv
cGVydHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoQ1NTUHJvcGVydHlab29tID09IENT
U1Byb3BlcnR5Q29sb3IgKyAxNywgQ1NTX3pvb21faXNfZW5kX29mX2ZpcnN0X3Byb3BfcmFuZ2Up
OworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0ID09IENT
U1Byb3BlcnR5Wm9vbSArIDEsIENTU19saW5lX2hlaWdodF9pc19hZnRlcl96b29tKTsKKyNpZiBF
TkFCTEUoQ1NTX1ZBUklBQkxFUykKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9w
ZXJ0eVZhcmlhYmxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworI2VuZGlmCisgICAgICAg
ICAgICAvLyBnaXZlIHNwZWNpYWwgcHJpb3JpdHkgdG8gZm9udC14eHgsIGNvbG9yIHByb3BlcnRp
ZXMsIGV0YworICAgICAgICAgICAgaWYgKHByb3BlcnR5IDwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0
KQorICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZh
bHVlKCkpOworICAgICAgICAgICAgLy8gd2UgYXBwbHkgbGluZS1oZWlnaHQgbGF0ZXIKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5TGluZUhlaWdodCkKKyAgICAg
ICAgICAgICAgICBtX3N0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShjdXJyZW50LnZhbHVlKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG93UHJpb3JpdHlQcm9wZXJ0aWVzOgor
ICAgICAgICAgICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQorICAgICAg
ICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwor
ICAgICAgICB9CisgICAgfQorICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHJvY2Vz
c1J1bGUoY29va2llKTsKK30KKwordGVtcGxhdGUgPFN0eWxlUmVzb2x2ZXI6OlN0eWxlQXBwbGlj
YXRpb25QYXNzIHBhc3M+Cit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBib29sIGlzSW1wb3J0YW50LCBpbnQg
c3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpCit7CisgICAgaWYg
KHN0YXJ0SW5kZXggPT0gLTEpCisgICAgICAgIHJldHVybjsKKworICAgIFN0YXRlJiBzdGF0ZSA9
IG1fc3RhdGU7CisgICAgaWYgKHN0YXRlLnN0eWxlKCktPmluc2lkZUxpbmsoKSAhPSBOb3RJbnNp
ZGVMaW5rKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4
OyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJv
cGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzW2ldOworICAgICAgICAgICAg
dW5zaWduZWQgbGlua01hdGNoVHlwZSA9IG1hdGNoZWRQcm9wZXJ0aWVzLmxpbmtNYXRjaFR5cGU7
CisgICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZXIgdG8gcGFzcyB0aGVzZSBh
cyBhcmd1bWVudHMgYnV0IHRoYXQgcmVxdWlyZXMgY2hhbmdlcyBpbiBtYW55IHBsYWNlcy4KKyAg
ICAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShsaW5rTWF0Y2hU
eXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmspOworICAgICAgICAgICAgc3RhdGUuc2V0
QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JD
aGVja2VyOjpNYXRjaFZpc2l0ZWQpOworCisgICAgICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFz
cz4obWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hl
ZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVy
dHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CisgICAg
ICAgIH0KKyAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUp
OworICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKGludCBpID0gc3RhcnRJbmRleDsg
aSA8PSBlbmRJbmRleDsgKytpKSB7CisgICAgICAgIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBt
YXRjaGVkUHJvcGVydGllcyA9IG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzW2ldOworICAg
ICAgICBhcHBseVByb3BlcnRpZXM8cGFzcz4obWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5n
ZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVk
T25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGll
cy53aGl0ZWxpc3RUeXBlKSk7CisgICAgfQorfQorCit1bnNpZ25lZCBTdHlsZVJlc29sdmVyOjpj
b21wdXRlTWF0Y2hlZFByb3BlcnRpZXNIYXNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzKiBwcm9w
ZXJ0aWVzLCB1bnNpZ25lZCBzaXplKQoreworICAgIAorICAgIHJldHVybiBTdHJpbmdIYXNoZXI6
Omhhc2hNZW1vcnkocHJvcGVydGllcywgc2l6ZW9mKE1hdGNoZWRQcm9wZXJ0aWVzKSAqIHNpemUp
OworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMm
IGEsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBiKQoreworICAgIHJldHVybiBh
LmZpcnN0VUFSdWxlID09IGIuZmlyc3RVQVJ1bGUKKyAgICAgICAgJiYgYS5sYXN0VUFSdWxlID09
IGIubGFzdFVBUnVsZQorICAgICAgICAmJiBhLmZpcnN0QXV0aG9yUnVsZSA9PSBiLmZpcnN0QXV0
aG9yUnVsZQorICAgICAgICAmJiBhLmxhc3RBdXRob3JSdWxlID09IGIubGFzdEF1dGhvclJ1bGUK
KyAgICAgICAgJiYgYS5maXJzdFVzZXJSdWxlID09IGIuZmlyc3RVc2VyUnVsZQorICAgICAgICAm
JiBhLmxhc3RVc2VyUnVsZSA9PSBiLmxhc3RVc2VyUnVsZTsKK30KKworYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBhLCBjb25zdCBTdHlsZVJlc29sdmVy
OjpNYXRjaFJhbmdlcyYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCitib29sIG9w
ZXJhdG9yPT0oY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGEsIGNvbnN0
IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBiKQoreworICAgIHJldHVybiBhLnBy
b3BlcnRpZXMgPT0gYi5wcm9wZXJ0aWVzICYmIGEubGlua01hdGNoVHlwZSA9PSBiLmxpbmtNYXRj
aFR5cGU7Cit9CisKK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVk
UHJvcGVydGllcyYgYSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGIp
Cit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0
Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIFN0eWxlUmVzb2x2ZXI6OmZpbmRGcm9tTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZSh1bnNpZ25lZCBoYXNoLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1
bHQpCit7CisgICAgQVNTRVJUKGhhc2gpOworCisgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZTo6
aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuZmluZChoYXNoKTsKKyAgICBp
ZiAoaXQgPT0gbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmVuZCgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSYgY2FjaGVJdGVtID0gaXQtPnZhbHVl
OworCisgICAgc2l6ZV90IHNpemUgPSBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCk7CisgICAgaWYgKHNpemUgIT0gY2FjaGVJdGVtLm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKKyAgICAgICAgaWYgKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzW2ldICE9IGNhY2hl
SXRlbS5tYXRjaGVkUHJvcGVydGllc1tpXSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICBpZiAoY2FjaGVJdGVtLnJhbmdlcyAhPSBtYXRjaFJlc3VsdC5yYW5nZXMpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiAmY2FjaGVJdGVtOworfQorCit2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFkZFRvTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgdW5zaWduZWQgaGFzaCwgY29uc3QgTWF0
Y2hSZXN1bHQmIG1hdGNoUmVzdWx0KQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXRj
aGVkRGVjbGFyYXRpb25DYWNoZUFkZGl0aW9uc0JldHdlZW5Td2VlcHMgPSAxMDA7CisgICAgaWYg
KCsrbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXAgPj0gbWF0
Y2hlZERlY2xhcmF0aW9uQ2FjaGVBZGRpdGlvbnNCZXR3ZWVuU3dlZXBzCisgICAgICAgICYmICFt
X21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1hdGNoZWREZWNsYXJhdGlvbkNhY2hlU3dlZXBUaW1lSW5T
ZWNvbmRzID0gNjA7CisgICAgICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZVN3ZWVwVGltZXIu
c3RhcnRPbmVTaG90KG1hdGNoZWREZWNsYXJhdGlvbkNhY2hlU3dlZXBUaW1lSW5TZWNvbmRzKTsK
KyAgICB9CisKKyAgICBBU1NFUlQoaGFzaCk7CisgICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0
ZW0gY2FjaGVJdGVtOworICAgIGNhY2hlSXRlbS5tYXRjaGVkUHJvcGVydGllcy5hcHBlbmRWZWN0
b3IobWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMpOworICAgIGNhY2hlSXRlbS5yYW5nZXMg
PSBtYXRjaFJlc3VsdC5yYW5nZXM7CisgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGNhY2hlIHRo
ZSBvcmlnaW5hbCBSZW5kZXJTdHlsZSBpbnN0YW5jZS4gSXQgbWF5IGJlIGZ1cnRoZXIgbW9kaWZp
ZWQuCisgICAgLy8gVGhlIFJlbmRlclN0eWxlIGluIHRoZSBjYWNoZSBpcyByZWFsbHkganVzdCBh
IGhvbGRlciBmb3IgdGhlIHN1YnN0cnVjdHVyZXMgYW5kIG5ldmVyIHVzZWQgYXMtaXMuCisgICAg
Y2FjaGVJdGVtLnJlbmRlclN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0eWxlKTsKKyAgICBj
YWNoZUl0ZW0ucGFyZW50UmVuZGVyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUocGFyZW50U3R5
bGUpOworICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5hZGQoaGFzaCwgY2FjaGVJdGVtKTsK
K30KKwordm9pZCBTdHlsZVJlc29sdmVyOjppbnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZSgpCit7CisgICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlLmNsZWFyKCk7Cit9CisKK3N0YXRp
YyBib29sIGlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKQoreworICAgIC8vIEZJWE1FOiBDU1NQcm9wZXJ0eVdlYmtpdFdyaXRpbmdNb2Rl
IG1vZGlmaWVzIHN0YXRlIHdoZW4gYXBwbHlpbmcgdG8gZG9jdW1lbnQgZWxlbWVudC4gV2UgY2Fu
J3Qgc2tpcCB0aGUgYXBwbHlpbmcgYnkgY2FjaGluZy4KKyAgICBpZiAoZWxlbWVudCA9PSBlbGVt
ZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSAmJiBlbGVtZW50LT5kb2N1bWVudCgp
LT53cml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoc3R5bGUtPnVuaXF1ZSgpIHx8IChzdHlsZS0+c3R5bGVUeXBlKCkgIT0gTk9Q
U0VVRE8gJiYgcGFyZW50U3R5bGUtPnVuaXF1ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChzdHlsZS0+aGFzQXBwZWFyYW5jZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKHN0eWxlLT56b29tKCkgIT0gUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3R5bGUtPndyaXRpbmdNb2RlKCkgIT0gUmVuZGVy
U3R5bGU6OmluaXRpYWxXcml0aW5nTW9kZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Ly8gVGhlIGNhY2hlIGFzc3VtZXMgc3RhdGljIGtub3dsZWRnZSBhYm91dCB3aGljaCBwcm9wZXJ0
aWVzIGFyZSBpbmhlcml0ZWQuCisgICAgaWYgKHBhcmVudFN0eWxlLT5oYXNFeHBsaWNpdGx5SW5o
ZXJpdGVkUHJvcGVydGllcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25z
dCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCit7Cisg
ICAgQVNTRVJUKGVsZW1lbnQpOworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgdW5z
aWduZWQgY2FjaGVIYXNoID0gbWF0Y2hSZXN1bHQuaXNDYWNoZWFibGUgPyBjb21wdXRlTWF0Y2hl
ZFByb3BlcnRpZXNIYXNoKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmRhdGEoKSwgbWF0
Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpKSA6IDA7CisgICAgYm9vbCBhcHBseUlu
aGVyaXRlZE9ubHkgPSBmYWxzZTsKKyAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRl
bSogY2FjaGVJdGVtID0gMDsKKyAgICBpZiAoY2FjaGVIYXNoICYmIChjYWNoZUl0ZW0gPSBmaW5k
RnJvbU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCkpKSB7Cisg
ICAgICAgIC8vIFdlIGNhbiBidWlsZCB1cCB0aGUgc3R5bGUgYnkgY29weWluZyBub24taW5oZXJp
dGVkIHByb3BlcnRpZXMgZnJvbSBhbiBlYXJsaWVyIHN0eWxlIG9iamVjdCBidWlsdCB1c2luZyB0
aGUgc2FtZSBleGFjdAorICAgICAgICAvLyBzdHlsZSBkZWNsYXJhdGlvbnMuIFdlIHRoZW4gb25s
eSBuZWVkIHRvIGFwcGx5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGllcywgaWYgYW55LCBhcyB0aGVp
ciB2YWx1ZXMgY2FuIGRlcGVuZCBvbiB0aGUgCisgICAgICAgIC8vIGVsZW1lbnQgY29udGV4dC4g
VGhpcyBpcyBmYXN0IGFuZCBzYXZlcyBtZW1vcnkgYnkgcmV1c2luZyB0aGUgc3R5bGUgZGF0YSBz
dHJ1Y3R1cmVzLgorICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jb3B5Tm9uSW5oZXJpdGVkRnJvbShj
YWNoZUl0ZW0tPnJlbmRlclN0eWxlLmdldCgpKTsKKyAgICAgICAgaWYgKHN0YXRlLnBhcmVudFN0
eWxlKCktPmluaGVyaXRlZERhdGFTaGFyZWQoY2FjaGVJdGVtLT5wYXJlbnRSZW5kZXJTdHlsZS5n
ZXQoKSkgJiYgIWlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSkgeworICAgICAgICAgICAgRUlu
c2lkZUxpbmsgbGlua1N0YXR1cyA9IHN0YXRlLnN0eWxlKCktPmluc2lkZUxpbmsoKTsKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBjYWNoZSBpdGVtIHBhcmVudCBzdHlsZSBoYXMgaWRlbnRpY2FsIGlu
aGVyaXRlZCBwcm9wZXJ0aWVzIHRvIHRoZSBjdXJyZW50IHBhcmVudCBzdHlsZSB0aGVuIHRoZQor
ICAgICAgICAgICAgLy8gcmVzdWx0aW5nIHN0eWxlIHdpbGwgYmUgaWRlbnRpY2FsIHRvby4gV2Ug
Y29weSB0aGUgaW5oZXJpdGVkIHByb3BlcnRpZXMgb3ZlciBmcm9tIHRoZSBjYWNoZSBhbmQgYXJl
IGRvbmUuCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShjYWNoZUl0ZW0t
PnJlbmRlclN0eWxlLmdldCgpKTsKKworICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSB0aGUg
bGluayBzdGF0dXMgaXMgdHJlYXRlZCBsaWtlIGFuIGluaGVyaXRlZCBwcm9wZXJ0eS4gV2UgbmVl
ZCB0byBleHBsaWNpdGx5IHJlc3RvcmUgaXQuCisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRJbnNpZGVMaW5rKGxpbmtTdGF0dXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IHRydWU7IAorICAgIH0KKworI2lmIEVOQUJM
RShDU1NfVkFSSUFCTEVTKQorICAgIC8vIEZpcnN0IGFwcGx5IGFsbCB2YXJpYWJsZSBkZWZpbml0
aW9ucywgYXMgdGhleSBtYXkgYmUgdXNlZCBkdXJpbmcgYXBwbGljYXRpb24gb2YgbGF0ZXIgcHJv
cGVydGllcy4KKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+
KG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6
ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFw
cGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURl
ZmluaXRpb25zPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNl
clJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25s
eSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihtYXRj
aFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyNlbmRpZgorCisgICAg
Ly8gTm93IHdlIGhhdmUgYWxsIG9mIHRoZSBtYXRjaGVkIHJ1bGVzIGluIHRoZSBhcHByb3ByaWF0
ZSBvcmRlci4gV2FsayB0aGUgcnVsZXMgYW5kIGFwcGx5CisgICAgLy8gaGlnaC1wcmlvcml0eSBw
cm9wZXJ0aWVzIGZpcnN0LCBpLmUuLCB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgb3RoZXIgcHJvcGVy
dGllcyBkZXBlbmQgb24uCisgICAgLy8gVGhlIG9yZGVyIGlzICgxKSBoaWdoLXByaW9yaXR5IG5v
dCBpbXBvcnRhbnQsICgyKSBoaWdoLXByaW9yaXR5IGltcG9ydGFudCwgKDMpIG5vcm1hbCBub3Qg
aW1wb3J0YW50CisgICAgLy8gYW5kICg0KSBub3JtYWwgaW1wb3J0YW50LgorICAgIHN0YXRlLnNl
dExpbmVIZWlnaHRWYWx1ZSgwKTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlv
cml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hl
ZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVl
LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
bGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1
bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdo
UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2Vz
LmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0
ZWRPbmx5KTsKKworICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpICE9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkgeworICAg
ICAgICBzdGF0ZS5zZXRGb250RGlydHkodHJ1ZSk7CisgICAgICAgIGFwcGx5SW5oZXJpdGVkT25s
eSA9IGZhbHNlOworICAgIH0KKworICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBh
aGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KKyAgICB1cGRhdGVGb250KCk7CisKKyAgICAvLyBMaW5l
LWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNp
emUuCisgICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQorICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOworCisg
ICAgLy8gTWFueSBwcm9wZXJ0aWVzIGRlcGVuZCBvbiB0aGUgZm9udC4gSWYgaXQgY2hhbmdlcyB3
ZSBqdXN0IGFwcGx5IGFsbCBwcm9wZXJ0aWVzLgorICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJ
dGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gc3RhdGUuc3R5bGUoKS0+Zm9u
dERlc2NyaXB0aW9uKCkpCisgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOworCisg
ICAgLy8gTm93IGRvIHRoZSBub3JtYWwgcHJpb3JpdHkgVUEgcHJvcGVydGllcy4KKyAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIGZh
bHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5s
YXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIAorICAgIC8vIENhY2hlIG91ciBi
b3JkZXIgYW5kIGJhY2tncm91bmQgc28gdGhhdCB3ZSBjYW4gZXhhbWluZSB0aGVtIGxhdGVyLgor
ICAgIHN0YXRlLmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOworICAgIAorICAgIC8vIE5vdyBk
byB0aGUgYXV0aG9yIGFuZCB1c2VyIG5vcm1hbCBwcmlvcml0eSBwcm9wZXJ0aWVzIGFuZCBhbGwg
dGhlICFpbXBvcnRhbnQgcHJvcGVydGllcy4KKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExv
d1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5n
ZXMubGFzdFVBUnVsZSArIDEsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAt
IDEsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQ
cmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
Zmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5
SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVBy
b3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2Vy
UnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0
Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAKKyAgICAvLyBT
dGFydCBsb2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCisgICAgbG9h
ZFBlbmRpbmdSZXNvdXJjZXMoKTsKKyAgICAKKyAgICBBU1NFUlQoIXN0YXRlLmZvbnREaXJ0eSgp
KTsKKyAgICAKKyAgICBpZiAoY2FjaGVJdGVtIHx8ICFjYWNoZUhhc2gpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIWlzQ2FjaGVhYmxlSW5NYXRjaGVkUHJvcGVydGllc0NhY2hlKHN0YXRlLmVs
ZW1lbnQoKSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucGFyZW50U3R5bGUoKSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBhZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucGFyZW50U3R5bGUoKSwgY2FjaGVIYXNoLCBtYXRjaFJlc3VsdCk7Cit9CisKK3ZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUpCit7CisgICAgaW5pdEVsZW1lbnQoMCk7Cisg
ICAgbV9zdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIDAsIHN0eWxlKTsKKyAg
ICBtX3N0YXRlLnNldFN0eWxlKHN0eWxlKTsKKyAgICBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5
bGUoaWQsIHZhbHVlKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9D
dXJyZW50U3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShpZCwgdmFsdWUpOworfQorCitpbmxpbmUg
Ym9vbCBpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQoreworICAg
IHN3aXRjaCAoaWQpIHsKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJv
cmRlclJpZ2h0Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5
Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yOgorI2lmIEVOQUJMRShDU1MzX1RFWFQpCisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uQ29sb3I6CisjZW5kaWYgLy8gQ1NT
M19URVhUCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc0NvbG9yOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUZXh0U3Ryb2tlQ29sb3I6CisjaWYgRU5BQkxFKFNWRykKKyAgICBjYXNlIENTU1By
b3BlcnR5RmlsbDoKKyAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlOgorI2VuZGlmCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzMy1yZWdp
b25zLyN0aGUtYXQtcmVnaW9uLXN0eWxlLXJ1bGUKKy8vIEZJWE1FOiBhZGQgaW5jcmVtZW50YWwg
c3VwcG9ydCBmb3Igb3RoZXIgcmVnaW9uIHN0eWxpbmcgcHJvcGVydGllcy4KK2lubGluZSBib29s
IFN0eWxlUmVzb2x2ZXI6OmlzVmFsaWRSZWdpb25TdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQpCit7CisgICAgc3dpdGNoIChpZCkgeworICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCitpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVy
Ojppc1ZhbGlkQ3VlU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQoreworICAgIHN3aXRj
aCAoaWQpIHsKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZDoKKyAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRDbGlwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZToKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZE9yaWdpbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YOgorICAgIGNhc2UgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUG9zaXRpb25ZOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WDoKKyAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZFJlcGVhdFk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRT
aXplOgorICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9u
dDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseToKKyAgICBjYXNlIENTU1Byb3BlcnR5
Rm9udFNpemU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZToKKyAgICBjYXNlIENTU1By
b3BlcnR5Rm9udFZhcmlhbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQ6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU9wYWNpdHk6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxp
bmVDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZU9mZnNldDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5T3V0bGluZVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGg6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVZpc2liaWxpdHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdo
aXRlU3BhY2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlUZXh0U2hhZG93OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJTdHlsZToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorLy8gU1ZHIGhhbmRsZXMgem9vbWluZyBp
biBhIGRpZmZlcmVudCB3YXkgY29tcGFyZWQgdG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMg
c2NhbGVkIGluc3RlYWQKKy8vIG9mIGVhY2ggaW5kaXZpZHVhbCBsZW5ndGggdmFsdWUgaW4gdGhl
IHJlbmRlciBzdHlsZSAvIHRyZWUuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoKigp
CisvLyBtdWx0aXBsaWVzIGVhY2ggcmVzb2x2ZWQgbGVuZ3RoIHdpdGggdGhlIHpvb20gbXVsdGlw
bGllciAtIHNvIGZvciBTVkcgd2UgbmVlZCB0byBkaXNhYmxlIHRoYXQuCisvLyBUaG91Z2ggYWxs
IENTUyB2YWx1ZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBvdXRlcm1vc3QgPHN2Zz4gZWxlbWVu
dHMgKHdpZHRoL2hlaWdodC9ib3JkZXIvcGFkZGluZy4uLikKKy8vIG5lZWQgdG8gcmVzcGVjdCB0
aGUgc2NhbGluZy4gUmVuZGVyQm94ICh0aGUgcGFyZW50IGNsYXNzIG9mIFJlbmRlclNWR1Jvb3Qp
IGdyYWJzIHZhbHVlcyBsaWtlCisvLyB3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcvLi4uIGZy
b20gdGhlIFJlbmRlclN0eWxlIC0+IGZvciBTVkcgdGhlc2UgdmFsdWVzIHdvdWxkIG5ldmVyIHNj
YWxlLAorLy8gaWYgd2UnZCBwYXNzIGEgMS4wIHpvb20gZmFjdG9yIGV2ZXJ5aHdlcmUuIFNvIHdl
IG9ubHkgcGFzcyBhIHpvb20gZmFjdG9yIG9mIDEuMCBmb3Igc3BlY2lmaWMKKy8vIHByb3BlcnRp
ZXMgdGhhdCBhcmUgTk9UIGFsbG93ZWQgdG8gc2NhbGUgd2l0aGluIGEgem9vbWVkIFNWRyBkb2N1
bWVudCAobGV0dGVyL3dvcmQtc3BhY2luZy9mb250LXNpemUpLgorYm9vbCBTdHlsZVJlc29sdmVy
Ojp1c2VTVkdab29tUnVsZXMoKQoreworICAgIHJldHVybiBtX3N0YXRlLmVsZW1lbnQoKSAmJiBt
X3N0YXRlLmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCk7Cit9CisKK3N0YXRpYyBib29sIGNyZWF0
ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25z
dCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIExlbmd0aCYgd29ya2luZ0xlbmd0aCkKK3sK
KyAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1p
bkNvbnRlbnQpIHsKKyAgICAgICAgd29ya2luZ0xlbmd0aCA9IExlbmd0aChNaW5Db250ZW50KTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50KSB7CisgICAgICAgIHdvcmtp
bmdMZW5ndGggPSBMZW5ndGgoTWF4Q29udGVudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHdvcmtpbmdMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3Ro
PEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVy
Y2VudGFnZUNvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAg
IGlmICh3b3JraW5nTGVuZ3RoLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkKKyAgICAgICAgd29ya2luZ0xl
bmd0aC5zZXRRdWlyayhwcmltaXRpdmVWYWx1ZS0+aXNRdWlya1ZhbHVlKCkpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja1NpemUoQ1NTVmFsdWUq
IHZhbHVlLCBHcmlkVHJhY2tTaXplJiB0cmFja1NpemUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0
YXRlJiBzdGF0ZSkKK3sKKyAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIFBhaXIqIG1p
bk1heFRyYWNrQnJlYWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsKKyAgICBp
ZiAoIW1pbk1heFRyYWNrQnJlYWR0aCkgeworICAgICAgICBMZW5ndGggd29ya2luZ0xlbmd0aDsK
KyAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKHByaW1pdGl2ZVZhbHVlLCBzdGF0
ZSwgd29ya2luZ0xlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
dHJhY2tTaXplLnNldExlbmd0aCh3b3JraW5nTGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgTGVuZ3RoIG1pblRyYWNrQnJlYWR0aDsKKyAgICBMZW5ndGggbWF4VHJh
Y2tCcmVhZHRoOworICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChtaW5NYXhUcmFja0Jy
ZWFkdGgtPmZpcnN0KCksIHN0YXRlLCBtaW5UcmFja0JyZWFkdGgpIHx8ICFjcmVhdGVHcmlkVHJh
Y2tCcmVhZHRoKG1pbk1heFRyYWNrQnJlYWR0aC0+c2Vjb25kKCksIHN0YXRlLCBtYXhUcmFja0Jy
ZWFkdGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB0cmFja1NpemUuc2V0TWluTWF4
KG1pblRyYWNrQnJlYWR0aCwgbWF4VHJhY2tCcmVhZHRoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kworc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZlY3Rv
cjxHcmlkVHJhY2tTaXplPiYgdHJhY2tTaXplcywgTmFtZWRHcmlkTGluZXNNYXAmIG5hbWVkR3Jp
ZExpbmVzLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCit7CisgICAgLy8gSGFu
ZGxlICdub25lJy4KKyAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLT5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lOworICAgIH0KKworICAgIGlmICghdmFsdWUtPmlzVmFs
dWVMaXN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNpemVfdCBjdXJyZW50TmFt
ZWRHcmlkTGluZSA9IDA7CisgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7
IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVl
ID0gaS52YWx1ZSgpOworICAgICAgICBpZiAoY3VyclZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
IHsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oY3VyclZhbHVlKTsKKyAgICAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIE5hbWVkR3JpZExp
bmVzTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbmFtZWRHcmlkTGluZXMuYWRkKHByaW1pdGl2ZVZh
bHVlLT5nZXRTdHJpbmdWYWx1ZSgpLCBWZWN0b3I8c2l6ZV90PigpKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChjdXJyZW50TmFtZWRHcmlkTGluZSk7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICArK2N1cnJlbnROYW1lZEdyaWRMaW5lOworICAgICAgICBHcmlkVHJhY2tTaXplIHRyYWNr
U2l6ZTsKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tTaXplKGN1cnJWYWx1ZSwgdHJhY2tT
aXplLCBzdGF0ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdHJhY2tT
aXplcy5hcHBlbmQodHJhY2tTaXplKTsKKyAgICB9CisKKyAgICBpZiAodHJhY2tTaXplcy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCisK
K3N0YXRpYyBib29sIGNyZWF0ZUdyaWRQb3NpdGlvbihDU1NWYWx1ZSogdmFsdWUsIEdyaWRQb3Np
dGlvbiYgcG9zaXRpb24pCit7CisgICAgLy8gRm9yIG5vdywgd2Ugb25seSBhY2NlcHQ6ICdhdXRv
JyB8IDxpbnRlZ2VyPiB8IHNwYW4gJiYgPGludGVnZXI+PworICAgIGlmICh2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKSB7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQo
KSA9PSBDU1NWYWx1ZVNwYW4pIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSA8aW50ZWdlcj4gaXMg
b21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gJzEnLgorICAgICAgICAgICAgcG9zaXRpb24uc2V0U3Bh
blBvc2l0aW9uKDEpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpOworICAgICAgICBwb3NpdGlv
bi5zZXRJbnRlZ2VyUG9zaXRpb24ocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTih2YWx1ZS0+aXNWYWx1ZUxpc3QoKSk7CisgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMg
PSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CisgICAgQVNTRVJUKHZhbHVlcy0+
bGVuZ3RoKCkgPT0gMik7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04odmFs
dWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOworICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBudW1lcmljVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgQVNTRVJU
KG51bWVyaWNWYWx1ZS0+aXNOdW1iZXIoKSk7CisgICAgcG9zaXRpb24uc2V0U3BhblBvc2l0aW9u
KG51bWVyaWNWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNp
ZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKK3N0YXRpYyBib29sIGhhc1ZhcmlhYmxlUmVmZXJlbmNl
KENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkg
eworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZh
bHVlLT5oYXNWYXJpYWJsZVJlZmVyZW5jZSgpOworICAgIH0KKworICAgIGlmICh2YWx1ZS0+aXND
YWxjdWxhdGlvblZhbHVlKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NDYWxjVmFs
dWUqPih2YWx1ZSktPmhhc1ZhcmlhYmxlUmVmZXJlbmNlKCk7CisKKyAgICBpZiAodmFsdWUtPmlz
UmVmbGVjdFZhbHVlKCkpIHsKKyAgICAgICAgQ1NTUmVmbGVjdFZhbHVlKiByZWZsZWN0VmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NSZWZsZWN0VmFsdWUqPih2YWx1ZSk7CisgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBkaXJlY3Rpb24gPSByZWZsZWN0VmFsdWUtPmRpcmVjdGlvbigpOworICAgICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogb2Zmc2V0ID0gcmVmbGVjdFZhbHVlLT5vZmZzZXQoKTsKKyAg
ICAgICAgQ1NTVmFsdWUqIG1hc2sgPSByZWZsZWN0VmFsdWUtPm1hc2soKTsKKyAgICAgICAgcmV0
dXJuIChkaXJlY3Rpb24gJiYgaGFzVmFyaWFibGVSZWZlcmVuY2UoZGlyZWN0aW9uKSkgfHwgKG9m
ZnNldCAmJiBoYXNWYXJpYWJsZVJlZmVyZW5jZShvZmZzZXQpKSB8fCAobWFzayAmJiBoYXNWYXJp
YWJsZVJlZmVyZW5jZShtYXNrKSk7CisgICAgfQorCisgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVy
YXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICBpZiAo
aGFzVmFyaWFibGVSZWZlcmVuY2UoaS52YWx1ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjpy
ZXNvbHZlVmFyaWFibGVzKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9y
PHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4mIGtub3duRXhwcmVzc2lvbnMpCit7
CisgICAgc3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwgdmFs
dWUtPnNlcmlhbGl6ZVJlc29sdmluZ1ZhcmlhYmxlcygqbV9zdGF0ZS5zdHlsZSgpLT52YXJpYWJs
ZXMoKSkpOworCisgICAgaWYgKGtub3duRXhwcmVzc2lvbnMuY29udGFpbnMoZXhwcmVzc2lvbikp
CisgICAgICAgIHJldHVybjsgLy8gY3ljbGUgZGV0ZWN0ZWQuCisKKyAgICBrbm93bkV4cHJlc3Np
b25zLmFwcGVuZChleHByZXNzaW9uKTsKKworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBmYXN0
ZXIgbm90IHRvIHJlLXBhcnNlIGZyb20gc3RyaW5ncywgYnV0IGZvciBub3cgQ1NTIHByb3BlcnR5
IHZhbGlkYXRpb24gbGl2ZXMgaW5zaWRlIHRoZSBwYXJzZXIgc28gd2UgZG8gaXQgdGhlcmUuCisg
ICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnR5U2V0PiByZXN1bHRTZXQgPSBNdXRhYmxlU3R5
bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CisgICAgaWYgKCFDU1NQYXJzZXI6OnBhcnNlVmFsdWUo
cmVzdWx0U2V0LmdldCgpLCBpZCwgZXhwcmVzc2lvbi5zZWNvbmQsIGZhbHNlLCBkb2N1bWVudCgp
KSkKKyAgICAgICAgcmV0dXJuOyAvLyBleHByZXNzaW9uIGZhaWxlZCB0byBwYXJzZS4KKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRTZXQtPnByb3BlcnR5Q291bnQoKTsgaSsr
KSB7CisgICAgICAgIFN0eWxlUHJvcGVydHlTZXQ6OlByb3BlcnR5UmVmZXJlbmNlIHByb3BlcnR5
ID0gcmVzdWx0U2V0LT5wcm9wZXJ0eUF0KGkpOworICAgICAgICBpZiAocHJvcGVydHkuaWQoKSAh
PSBDU1NQcm9wZXJ0eVZhcmlhYmxlICYmIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKHByb3BlcnR5LnZh
bHVlKCkpKQorICAgICAgICAgICAgcmVzb2x2ZVZhcmlhYmxlcyhwcm9wZXJ0eS5pZCgpLCBwcm9w
ZXJ0eS52YWx1ZSgpLCBrbm93bkV4cHJlc3Npb25zKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCgpLCBwcm9wZXJ0eS52YWx1ZSgpKTsKKyAgICB9
Cit9CisjZW5kaWYKKwordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykK
KyAgICBpZiAoaWQgIT0gQ1NTUHJvcGVydHlWYXJpYWJsZSAmJiBoYXNWYXJpYWJsZVJlZmVyZW5j
ZSh2YWx1ZSkpIHsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJp
bmc+ID4ga25vd25FeHByZXNzaW9uczsKKyAgICAgICAgcmVzb2x2ZVZhcmlhYmxlcyhpZCwgdmFs
dWUsIGtub3duRXhwcmVzc2lvbnMpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisK
KyAgICAvLyBDU1MgdmFyaWFibGVzIGRvbid0IHJlc29sdmUgc2hvcnRoYW5kcyBhdCBwYXJzaW5n
IHRpbWUsIHNvIHRoaXMgc2hvdWxkIGJlICphZnRlciogaGFuZGxpbmcgdmFyaWFibGVzLgorICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoIWlzRXhwYW5kZWRTaG9ydGhhbmQoaWQpLCAiU2hvcnRoYW5k
IHByb3BlcnR5IGlkID0gJWQgd2Fzbid0IGV4cGFuZGVkIGF0IHBhcnNpbmcgdGltZSIsIGlkKTsK
KworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0
ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKKyAgICBib29sIGlz
SW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSgp
ICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOworCisgICAgQVNTRVJUKCFpc0luaGVyaXQg
fHwgIWlzSW5pdGlhbCk7IC8vIGlzSW5oZXJpdCAtPiAhaXNJbml0aWFsICYmIGlzSW5pdGlhbCAt
PiAhaXNJbmhlcml0CisgICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgKHN0YXRlLnBhcmVudE5vZGUo
KSAmJiBzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7IC8vIGlzSW5oZXJpdCAtPiAoc3RhdGUucGFyZW50
Tm9kZSgpICYmIHN0YXRlLnBhcmVudFN0eWxlKCkpCisKKyAgICBpZiAoIXN0YXRlLmFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpICYmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSgpIHx8ICFpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkpKSB7CisgICAgICAg
IC8vIExpbWl0IHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUg
b25lcyBob25vcmVkIGJ5IDp2aXNpdGVkLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGlzSW5oZXJpdCAmJiAhc3RhdGUucGFyZW50U3R5bGUoKS0+aGFzRXhwbGljaXRseUluaGVy
aXRlZFByb3BlcnRpZXMoKSAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQp
KQorICAgICAgICBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVk
UHJvcGVydGllcygpOworCisjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCisgICAgaWYgKGlkID09
IENTU1Byb3BlcnR5VmFyaWFibGUpIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04odmFsdWUtPmlzVmFyaWFibGVWYWx1ZSgpKTsKKyAgICAgICAgQ1NTVmFyaWFibGVW
YWx1ZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxDU1NWYXJpYWJsZVZhbHVlKj4odmFsdWUpOwor
ICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT5uYW1lKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNT
RVJUKCF2YXJpYWJsZS0+dmFsdWUoKS5pc0VtcHR5KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRWYXJpYWJsZSh2YXJpYWJsZS0+bmFtZSgpLCB2YXJpYWJsZS0+dmFsdWUoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIC8vIENoZWNrIGxvb2t1cCB0YWJsZSBm
b3IgaW1wbGVtZW50YXRpb25zIGFuZCB1c2Ugd2hlbiBhdmFpbGFibGUuCisgICAgY29uc3QgUHJv
cGVydHlIYW5kbGVyJiBoYW5kbGVyID0gbV9kZXByZWNhdGVkU3R5bGVCdWlsZGVyLnByb3BlcnR5
SGFuZGxlcihpZCk7CisgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKSB7CisgICAgICAgIGlmIChp
c0luaGVyaXQpCisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKGlkLCB0aGlz
KTsKKyAgICAgICAgZWxzZSBpZiAoaXNJbml0aWFsKQorICAgICAgICAgICAgaGFuZGxlci5hcHBs
eUluaXRpYWxWYWx1ZShpZCwgdGhpcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRs
ZXIuYXBwbHlWYWx1ZShpZCwgdGhpcywgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSA/IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpIDogMDsK
KworICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7
CisKKyAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3Bl
cnRpZXMgaW50byB0aGVpciBjb3JyZXNwb25kaW5nIGZyb250LWVuZAorICAgIC8vIFJlbmRlclN0
eWxlIHZhbHVlcy4KKyAgICBzd2l0Y2ggKGlkKSB7CisgICAgLy8gbGlzdHMKKyAgICBjYXNlIENT
U1Byb3BlcnR5Q29udGVudDoKKyAgICAgICAgLy8gbGlzdCBvZiBzdHJpbmcsIHVyaSwgY291bnRl
ciwgYXR0ciwgaQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGSVhNRTogSW4gQ1NTMywgaXQg
d2lsbCBiZSBwb3NzaWJsZSB0byBpbmhlcml0IGNvbnRlbnQuIEluIENTUzIgaXQgaXMgbm90LiBU
aGlzCisgICAgICAgICAgICAvLyBub3RlIGlzIGEgcmVtaW5kZXIgdGhhdCBldmVudHVhbGx5ICJp
bmhlcml0IiBuZWVkcyB0byBiZSBzdXBwb3J0ZWQuCisKKyAgICAgICAgICAgIGlmIChpc0luaXRp
YWwpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5jbGVhckNvbnRlbnQoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
dmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBib29sIGRpZFNldCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJ
dGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICAg
ICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOworICAgICAgICAgICAgICAgIGlmIChp
dGVtLT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
aXRlbS0+aXNHcmFkaWVudFZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShzdGF0aWNfY2Fz
dDxDU1NHcmFkaWVudFZhbHVlKj4oaXRlbSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRo
aXMpLmdldCgpKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZElt
YWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KGl0ZW0pKSwg
ZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyNpZiBFTkFCTEUo
Q1NTX0lNQUdFX1NFVCkKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzSW1hZ2VT
ZXRWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRl
bnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nhc3Q8
Q1NTSW1hZ2VTZXRWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
ZGlkU2V0ID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmIChpdGVtLT5pc0ltYWdlVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0
eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihpdGVtKSksIGRpZFNldCk7Cisg
ICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghaXRlbS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOworCisgICAgICAgICAgICAgICAgaWYgKGNvbnRl
bnRWYWx1ZS0+aXNTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNl
dCk7CisgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQXR0cigpKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBDYW4gYSBuYW1lc3BhY2UgYmUgc3BlY2lmaWVkIGZvciBhbiBhdHRyKGZvbyk/
CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBO
T1BTRVVETykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVuaXF1
ZSgpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5wYXJlbnRTdHlsZSgpLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgUXVh
bGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCku
aW1wbCgpLCBudWxsQXRvbSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUgPSBzdGF0ZS5lbGVtZW50KCktPmdldEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVt
cHR5QXRvbSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZGlk
U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIGZhY3QgdGhh
dCB0aGUgYXR0cmlidXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0eWxlCisgICAgICAgICAgICAgICAg
ICAgIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5hdHRyc0luUnVsZXMuYWRkKGF0dHIubG9jYWxOYW1l
KCkuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXND
b3VudGVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ291bnRlciogY291bnRlclZhbHVlID0g
Y29udGVudFZhbHVlLT5nZXRDb3VudGVyVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgRUxp
c3RTdHlsZVR5cGUgbGlzdFN0eWxlVHlwZSA9IE5vbmVMaXN0U3R5bGU7CisgICAgICAgICAgICAg
ICAgICAgIENTU1ZhbHVlSUQgbGlzdFN0eWxlSWRlbnQgPSBjb3VudGVyVmFsdWUtPmxpc3RTdHls
ZUlkZW50KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NW
YWx1ZU5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0U3R5bGVUeXBlID0gc3RhdGlj
X2Nhc3Q8RUxpc3RTdHlsZVR5cGU+KGxpc3RTdHlsZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsKKyAg
ICAgICAgICAgICAgICAgICAgT3duUHRyPENvdW50ZXJDb250ZW50PiBjb3VudGVyID0gYWRvcHRQ
dHIobmV3IENvdW50ZXJDb250ZW50KGNvdW50ZXJWYWx1ZS0+aWRlbnRpZmllcigpLCBsaXN0U3R5
bGVUeXBlLCBjb3VudGVyVmFsdWUtPnNlcGFyYXRvcigpKSk7CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoY291bnRlci5yZWxlYXNlKCksIGRpZFNldCk7Cisg
ICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldFZhbHVlSUQo
KSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlT3BlblF1b3RlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBk
aWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
Q2xvc2VRdW90ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENv
bnRlbnQoQ0xPU0VfUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVOb09wZW5RdW90ZToKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoTk9fT1BFTl9RVU9URSwgZGlkU2V0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xvc2VRdW90ZToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoTk9fQ0xP
U0VfUVVPVEUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWwgYW5kIG5vbmUgZG8gbm90
IGhhdmUgYW55IGVmZmVjdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHsgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKCFkaWRTZXQpCisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+Y2xlYXJDb250
ZW50KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICBjYXNlIENTU1Byb3Bl
cnR5UXVvdGVzOgorICAgICAgICBpZiAoaXNJbmhlcml0KSB7CisgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRRdW90ZXMoc3RhdGUucGFyZW50U3R5bGUoKS0+cXVvdGVzKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChpc0luaXRpYWwpIHsKKyAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcygwKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAg
ICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVl
KTsKKyAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+ID4gcXVvdGVz
OworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsgaSAr
PSAyKSB7CisgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGZpcnN0ID0gbGlzdC0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAgICAgICAvLyBpdGVtKCkgcmV0dXJucyBudWxs
IGlmIG91dCBvZiBib3VuZHMgc28gdGhpcyBpcyBzYWZlLgorICAgICAgICAgICAgICAgIENTU1Zh
bHVlKiBzZWNvbmQgPSBsaXN0LT5pdGVtKGkgKyAxKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNl
Y29uZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oZmlyc3QtPmlzUHJpbWl0aXZlVmFsdWUoKSk7
CisgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc2Vjb25k
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpOworICAgICAgICAgICAgICAgIFN0cmluZyBzdGFydFF1b3Rl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihmaXJzdCktPmdldFN0cmluZ1ZhbHVl
KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGVuZFF1b3RlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPihzZWNvbmQpLT5nZXRTdHJpbmdWYWx1ZSgpOworICAgICAgICAgICAgICAg
IHF1b3Rlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoc3RhcnRRdW90ZSwgZW5kUXVvdGUpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcyhRdW90ZXNE
YXRhOjpjcmVhdGUocXVvdGVzKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0UXVvdGVzKFF1b3Rlc0RhdGE6OmNyZWF0ZShWZWN0b3I8c3RkOjpwYWlyPFN0
cmluZywgU3RyaW5nPiA+KCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgLy8g
U2hvcnRoYW5kIHByb3BlcnRpZXMuCisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnQ6CisgICAgICAg
IGlmIChpc0luaGVyaXQpIHsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoc3RhdGUucGFyZW50U3R5bGUoKS0+c3Bl
Y2lmaWVkTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1
ZSgwKTsKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwor
ICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgeworICAgICAgICAgICAgU2V0dGluZ3MqIHNl
dHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpOworICAgICAgICAgICAgQVNTRVJUKHNldHRpbmdz
KTsgLy8gSWYgd2UncmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwgdGhpcyBkb2N1bWVudCBzaG91
bGQgYWx3YXlzIGJlIGluIGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBzZXR0aW5ncworICAgICAgICAg
ICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBp
bml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsKKyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZSkgeworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChSZW5k
ZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICBzdGF0ZS5zZXRMaW5l
SGVpZ2h0VmFsdWUoMCk7CisKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb247CisgICAgICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUZv
bnQocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSwgZm9udERlc2NyaXB0aW9uKTsKKworICAg
ICAgICAgICAgLy8gRG91YmxlLWNoZWNrIGFuZCBzZWUgaWYgdGhlIHRoZW1lIGRpZCBhbnl0aGlu
Zy4gSWYgbm90LCBkb24ndCBib3RoZXIgdXBkYXRpbmcgdGhlIGZvbnQuCisgICAgICAgICAgICBp
ZiAoZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgdGhlIHJlbmRlcmluZyBtb2RlIGFuZCBwcmludGVyIGZvbnQgc2V0dGluZ3Mg
YXJlIHVwZGF0ZWQuCisgICAgICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1l
bnRTZXR0aW5ncygpOworICAgICAgICAgICAgICAgIEFTU0VSVChzZXR0aW5ncyk7IC8vIElmIHdl
J3JlIGRvaW5nIHN0eWxlIHJlc29sdXRpb24sIHRoaXMgZG9jdW1lbnQgc2hvdWxkIGFsd2F5cyBi
ZSBpbiBhIGZyYW1lIGFuZCB0aHVzIGhhdmUgc2V0dGluZ3MKKyAgICAgICAgICAgICAgICBpZiAo
IXNldHRpbmdzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdN
b2RlKCkpOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9u
dChkb2N1bWVudCgpLT5wcmludGluZygpIHx8ICFzZXR0aW5ncy0+c2NyZWVuRm9udFN1YnN0aXR1
dGlvbkVuYWJsZWQoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20gZmFj
dG9yLgorICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0
Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUoKSwg
Zm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVjaWZp
ZWRTaXplKCksIHVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgICAgICAgICAgICAgc2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAodmFsdWUtPmlzRm9udFZhbHVlKCkpIHsKKyAgICAgICAgICAgIEZvbnRWYWx1ZSogZm9u
dCA9IHN0YXRpY19jYXN0PEZvbnRWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghZm9u
dC0+c3R5bGUgfHwgIWZvbnQtPnZhcmlhbnQgfHwgIWZvbnQtPndlaWdodAorICAgICAgICAgICAg
ICAgIHx8ICFmb250LT5zaXplIHx8ICFmb250LT5saW5lSGVpZ2h0IHx8ICFmb250LT5mYW1pbHkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUZvbnRTdHlsZSwgZm9udC0+c3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBmb250LT52YXJpYW50LmdldCgpKTsKKyAg
ICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250LT53ZWln
aHQuZ2V0KCkpOworICAgICAgICAgICAgLy8gVGhlIHByZXZpb3VzIHByb3BlcnRpZXMgY2FuIGRp
cnR5IG91ciBmb250IGJ1dCB0aGV5IGRvbid0IHRyeSB0byByZWFkIHRoZSBmb250J3MKKyAgICAg
ICAgICAgIC8vIHByb3BlcnRpZXMgYmFjaywgd2hpY2ggaXMgc2FmZS4gSG93ZXZlciBpZiBmb250
LXNpemUgaXMgdXNpbmcgdGhlICdleCcgdW5pdCwgaXQgd2lsbAorICAgICAgICAgICAgLy8gbmVl
ZCBxdWVyeSB0aGUgZGlydGllZCBmb250J3MgeC1oZWlnaHQgdG8gZ2V0IHRoZSBjb21wdXRlZCBz
aXplLiBUbyBiZSBzYWZlIGluIHRoaXMKKyAgICAgICAgICAgIC8vIGNhc2UsIGxldCdzIGp1c3Qg
dXBkYXRlIHRoZSBmb250IG5vdy4KKyAgICAgICAgICAgIHVwZGF0ZUZvbnQoKTsKKyAgICAgICAg
ICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC0+c2l6ZS5nZXQoKSk7
CisKKyAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShmb250LT5saW5lSGVpZ2h0
LmdldCgpKTsKKworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1p
bHksIGZvbnQtPmZhbWlseS5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRQb3NpdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0
b206CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJJbWFnZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyUmFkaXVzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdo
dDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyU3BhY2luZzoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVyV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5l
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvdzoKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFk
ZGluZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlvbjoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJBZnRl
cjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJFbmQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRl
clN0YXJ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXM6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbnM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENv
bHVtblJ1bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXg6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEZsZXhGbG93OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkQ29s
dW1uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkUm93OgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXJnaW5Db2xsYXBzZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
cXVlZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFza1Bvc2l0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVw
ZWF0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXM6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zaXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpbjoKKyAg
ICAgICAgQVNTRVJUKGlzRXhwYW5kZWRTaG9ydGhhbmQoaWQpKTsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworCisgICAgLy8gQ1NTMyBQcm9wZXJ0aWVzCisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRTaGFkb3c6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJveFNo
YWRvdzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93OiB7CisgICAgICAgIGlm
IChpc0luaGVyaXQpIHsKKyAgICAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVRleHRTaGFk
b3cpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFkb3co
c3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dFNoYWRvdygpID8gYWRvcHRQdHIobmV3IFNoYWRvd0Rh
dGEoKnN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRTaGFkb3coKSkpIDogbnVsbHB0cik7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGUuc3R5bGUoKS0+c2V0Qm94U2hhZG93KHN0YXRlLnBhcmVudFN0
eWxlKCktPmJveFNoYWRvdygpID8gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoKnN0YXRlLnBhcmVu
dFN0eWxlKCktPmJveFNoYWRvdygpKSkgOiBudWxscHRyKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoaXNJbml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwgbm9uZQorICAgICAg
ICAgICAgcmV0dXJuIGlkID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/IHN0YXRlLnN0eWxlKCkt
PnNldFRleHRTaGFkb3cobnVsbHB0cikgOiBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hTaGFkb3cobnVs
bHB0cik7CisKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsg
aS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZh
bHVlID0gaS52YWx1ZSgpOworICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzU2hhZG93VmFs
dWUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFNoYWRvd1ZhbHVl
KiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUqPihjdXJyVmFsdWUpOworICAgICAgICAg
ICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGludCB5ID0g
aXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJs
dXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKSA6IDA7CisgICAgICAgICAgICBpbnQgc3By
ZWFkID0gaXRlbS0+c3ByZWFkID8gaXRlbS0+c3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3Rh
dGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKSA6IDA7Cisg
ICAgICAgICAgICBTaGFkb3dTdHlsZSBzaGFkb3dTdHlsZSA9IGl0ZW0tPnN0eWxlICYmIGl0ZW0t
PnN0eWxlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwor
ICAgICAgICAgICAgQ29sb3IgY29sb3I7CisgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCisg
ICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xv
ci5nZXQoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHlsZSgpKQorICAgICAgICAg
ICAgICAgIGNvbG9yID0gc3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKKworICAgICAgICAgICAgT3du
UHRyPFNoYWRvd0RhdGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0cihuZXcgU2hhZG93RGF0YShJbnRQ
b2ludCh4LCB5KSwgYmx1ciwgc3ByZWFkLCBzaGFkb3dTdHlsZSwgaWQgPT0gQ1NTUHJvcGVydHlX
ZWJraXRCb3hTaGFkb3csIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFy
ZW50KSk7CisgICAgICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQorICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRTaGFkb3coc2hhZG93RGF0YS5yZWxl
YXNlKCksIGkuaW5kZXgoKSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUg
Zmlyc3QgZW50cnkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRCb3hTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCksIGkuaW5kZXgoKSk7IC8vIGFk
ZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZs
ZWN0OiB7CisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGJveFJlZmxlY3QsIEJv
eFJlZmxlY3QpCisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkgeworICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Qm94UmVmbGVjdChSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJlZmxlY3Qo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZhbHVl
LT5pc1JlZmxlY3RWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENTU1Jl
ZmxlY3RWYWx1ZSogcmVmbGVjdFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUmVmbGVjdFZhbHVlKj4o
dmFsdWUpOworICAgICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0gU3R5
bGVSZWZsZWN0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9u
KCpyZWZsZWN0VmFsdWUtPmRpcmVjdGlvbigpKTsKKyAgICAgICAgaWYgKHJlZmxlY3RWYWx1ZS0+
b2Zmc2V0KCkpCisgICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVl
LT5vZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJj
ZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0
ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpKTsKKyAgICAgICAgTmluZVBpZWNlSW1h
Z2UgbWFzazsKKyAgICAgICAgbWFzay5zZXRNYXNrRGVmYXVsdHMoKTsKKyAgICAgICAgbV9zdHls
ZU1hcC5tYXBOaW5lUGllY2VJbWFnZShpZCwgcmVmbGVjdFZhbHVlLT5tYXNrKCksIG1hc2spOwor
ICAgICAgICByZWZsZWN0aW9uLT5zZXRNYXNrKG1hc2spOworCisgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEJveFJlZmxlY3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlTcmM6IC8vIE9ubHkgdXNlZCBpbiBAZm9udC1m
YWNlIHJ1bGVzLgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVVuaWNvZGVS
YW5nZTogLy8gT25seSB1c2VkIGluIEBmb250LWZhY2UgcnVsZXMuCisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9jYWxlOiB7CisgICAgICAgIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMKGxvY2FsZSwgTG9jYWxlKTsKKyAgICAgICAgaWYgKCFwcmltaXRpdmVW
YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0TG9jYWxlKG51bGxBdG9tKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0TG9jYWxlKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAg
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRv
U2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24oc3RhdGUuc3R5bGUoKS0+bG9jYWxlKCkpKTsKKyAg
ICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXREYXNoYm9hcmRSZWdpb246CisgICAgeworICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTChkYXNoYm9hcmRSZWdpb25zLCBEYXNoYm9hcmRSZWdpb25zKQorICAgICAg
ICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkgeworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9ucyhSZW5kZXJTdHlsZTo6bm9u
ZURhc2hib2FyZFJlZ2lvbnMoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBEYXNoYm9hcmRSZWdpb24qIHJlZ2lvbiA9IHByaW1pdGl2ZVZhbHVlLT5nZXREYXNo
Ym9hcmRSZWdpb25WYWx1ZSgpOworICAgICAgICBpZiAoIXJlZ2lvbikKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBEYXNoYm9hcmRSZWdpb24qIGZpcnN0ID0gcmVnaW9uOworICAgICAg
ICB3aGlsZSAocmVnaW9uKSB7CisgICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvSW50
TGVuZ3RoKHJlZ2lvbi0+dG9wKCksIHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5
bGUoKSk7CisgICAgICAgICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVn
aW9uLT5yaWdodCgpLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwor
ICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmJv
dHRvbSgpLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOworICAgICAg
ICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5sZWZ0KCksIHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7CisKKyAgICAgICAgICAgIGlm
ICh0b3AuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICB0b3AgPSBMZW5ndGgoKTsKKyAg
ICAgICAgICAgIGlmIChyaWdodC5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIHJpZ2h0
ID0gTGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAoYm90dG9tLmlzVW5kZWZpbmVkKCkpCisgICAg
ICAgICAgICAgICAgYm90dG9tID0gTGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAobGVmdC5pc1Vu
ZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGxlZnQgPSBMZW5ndGgoKTsKKworICAgICAgICAg
ICAgaWYgKHJlZ2lvbi0+bV9pc0NpcmNsZSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OkNpcmNsZSwgcmVnaW9u
LT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZh
bHNlIDogdHJ1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChyZWdpb24tPm1faXNSZWN0YW5nbGUp
CisgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxl
RGFzaGJvYXJkUmVnaW9uOjpSZWN0YW5nbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwg
Ym90dG9tLCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOworICAgICAgICAg
ICAgcmVnaW9uID0gcmVnaW9uLT5tX25leHQuZ2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBz
dGF0ZS5kb2N1bWVudCgpLT5zZXRIYXNBbm5vdGF0ZWRSZWdpb25zKHRydWUpOworCisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYKKyNpZiBFTkFCTEUoRFJBR0dBQkxFX1JFR0lPTikKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXBwUmVnaW9uOiB7CisgICAgICAgIGlmICghcHJpbWl0
aXZlVmFsdWUgfHwgIXByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERyYWdnYWJsZVJlZ2lvbk1vZGUocHJp
bWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZURyYWcgPyBEcmFnZ2FibGVSZWdp
b25EcmFnIDogRHJhZ2dhYmxlUmVnaW9uTm9EcmFnKTsKKyAgICAgICAgc3RhdGUuZG9jdW1lbnQo
KS0+c2V0SGFzQW5ub3RhdGVkUmVnaW9ucyh0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlV2lkdGg6IHsKKyAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dFN0cm9rZVdpZHRoLCBUZXh0U3Ry
b2tlV2lkdGgpCisgICAgICAgIGZsb2F0IHdpZHRoID0gMDsKKyAgICAgICAgc3dpdGNoIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVUaGluOgor
ICAgICAgICBjYXNlIENTU1ZhbHVlTWVkaXVtOgorICAgICAgICBjYXNlIENTU1ZhbHVlVGhpY2s6
IHsKKyAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSAxLjAgLyA0ODsKKyAgICAgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTWVkaXVtKQorICAgICAg
ICAgICAgICAgIHJlc3VsdCAqPSAzOworICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVRoaWNrKQorICAgICAgICAgICAgICAgIHJlc3Vs
dCAqPSA1OworICAgICAgICAgICAgd2lkdGggPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJl
c3VsdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpLT5jb21wdXRlTGVuZ3RoPGZsb2F0Pihz
dGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0YXRlLnN0eWxl
KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0U3Ryb2tlV2lk
dGgod2lkdGgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUcmFuc2Zvcm06IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodHJh
bnNmb3JtLCBUcmFuc2Zvcm0pOworICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlv
bnM7CisgICAgICAgIHRyYW5zZm9ybXNGb3JWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlKCksIHZhbHVlLCBvcGVyYXRpb25zKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZTogeworICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChwZXJzcGVjdGl2ZSwgUGVyc3BlY3RpdmUpCisKKyAgICAgICAgaWYg
KCFwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldFBlcnNwZWN0aXZlKDApOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgcGVyc3BlY3RpdmVWYWx1ZTsKKyAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQorICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1
ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZSgpLCBz
dGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOworICAgICAgICBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgeworICAgICAgICAgICAgLy8gRm9yIGJhY2t3YXJk
IGNvbXBhdGliaWxpdHksIHRyZWF0IHZhbHVlbGVzcyBudW1iZXJzIGFzIHB4LgorICAgICAgICAg
ICAgcGVyc3BlY3RpdmVWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZl
VmFsdWUtPmdldERvdWJsZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpLT5jb21w
dXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCks
IHpvb21GYWN0b3IpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAocGVyc3BlY3RpdmVWYWx1ZSA+PSAwLjBmKQorICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0UGVyc3BlY3RpdmUocGVyc3BlY3RpdmVWYWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VGFwSGlnaGxpZ2h0Q29sb3I6IHsKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJ
QUwodGFwSGlnaGxpZ2h0Q29sb3IsIFRhcEhpZ2hsaWdodENvbG9yKTsKKyAgICAgICAgaWYgKCFw
cmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIENvbG9yIGNvbCA9
IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbmRpZgorI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpCisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiB7CisgICAgICAgIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcsIFVzZVRv
dWNoT3ZlcmZsb3dTY3JvbGxpbmcpOworICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVzZVRvdWNoT3ZlcmZs
b3dTY3JvbGxpbmcocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVRvdWNo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGNhc2UgQ1NTUHJvcGVydHlJ
bnZhbGlkOgorICAgICAgICByZXR1cm47CisgICAgLy8gRGlyZWN0aW9uYWwgcHJvcGVydGllcyBh
cmUgcmVzb2x2ZWQgYnkgcmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoKSBiZWZvcmUgdGhl
IHN3aXRjaC4KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kQ29sb3I6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckVuZFN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3JkZXJFbmRXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVy
U3RhcnRDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRTdHlsZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyU3RhcnRXaWR0aDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJvcmRlckJlZm9yZVN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJC
ZWZvcmVXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJDb2xvcjoK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJTdHlsZToKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXJXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFyZ2luRW5kOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5TdGFydDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQmVmb3JlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXJnaW5BZnRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQmVm
b3JlQ29sbGFwc2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNl
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5BZnRlckNvbGxhcHNlOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Cb3R0b21Db2xsYXBzZToKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0UGFkZGluZ0VuZDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGlu
Z1N0YXJ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nQmVmb3JlOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRQYWRkaW5nQWZ0ZXI6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdExvZ2ljYWxXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9naWNhbEhlaWdo
dDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9naWNhbFdpZHRoOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNaW5Mb2dpY2FsSGVpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXhMb2dpY2FsV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1heExvZ2lj
YWxIZWlnaHQ6CisgICAgeworICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVy
dHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSwgc3RhdGUuc3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CisgICAgICAgIEFTU0VSVChu
ZXdJZCAhPSBpZCk7CisgICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5KG5ld0lkLCB2YWx1ZSk7
CisgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3RyZXRjaDoKKyAgICBjYXNlIENTU1By
b3BlcnR5UGFnZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdoOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlUZXh0TGluZVRocm91Z2hDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dExpbmVUaHJvdWdoTW9kZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdo
U3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaFdpZHRoOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVy
bGluZUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVNb2RlOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4
dE92ZXJsaW5lV2lkdGg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmU6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dFVuZGVybGluZU1vZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVTdHls
ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZVdpZHRoOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRGb250U2l6ZURlbHRhOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdDoKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ1NTIFRl
eHQgTGF5b3V0IE1vZHVsZSBMZXZlbCAzOiBWZXJ0aWNhbCB3cml0aW5nIHN1cHBvcnQKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01vZGU6IHsKKyAgICAgICAgSEFORExFX0lOSEVS
SVRfQU5EX0lOSVRJQUwod3JpdGluZ01vZGUsIFdyaXRpbmdNb2RlKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHNldFdyaXRpbmdNb2RlKCpwcmlt
aXRpdmVWYWx1ZSk7CisKKyAgICAgICAgLy8gRklYTUU6IEl0IGlzIG5vdCBvayB0byBtb2RpZnkg
ZG9jdW1lbnQgc3RhdGUgd2hpbGUgYXBwbHlpbmcgc3R5bGUuCisgICAgICAgIGlmIChzdGF0ZS5l
bGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpID09IHN0YXRlLmRvY3VtZW50KCktPmRvY3VtZW50
RWxlbWVudCgpKQorICAgICAgICAgICAgc3RhdGUuZG9jdW1lbnQoKS0+c2V0V3JpdGluZ01vZGVT
ZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0T3JpZW50YXRpb246IHsKKyAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dE9yaWVudGF0aW9uLCBUZXh0T3JpZW50YXRpb24pOwor
CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHNldFRleHRPcmllbnRh
dGlvbigqcHJpbWl0aXZlVmFsdWUpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUJveENvbnRhaW46IHsKKyAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUwobGluZUJveENvbnRhaW4sIExpbmVCb3hDb250YWluKQorICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZU5vbmUpIHsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVCb3hDb250
YWluKExpbmVCb3hDb250YWluTm9uZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIXZhbHVlLT5pc0NTU0xpbmVCb3hDb250YWluVmFsdWUoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBDU1NMaW5lQm94Q29udGFpblZhbHVlKiBsaW5lQm94
Q29udGFpblZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTTGluZUJveENvbnRhaW5WYWx1ZSo+KHZhbHVl
KTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4obGluZUJveENvbnRh
aW5WYWx1ZS0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDU1Mg
Rm9udHMgTW9kdWxlIExldmVsIDMKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEZlYXR1
cmVTZXR0aW5nczogeworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgeworICAgICAgICAgICAgc2V0Rm9u
dERlc2NyaXB0aW9uKHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLm1ha2VOb3JtYWxG
ZWF0dXJlU2V0dGluZ3MoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5m
b250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nh
c3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOworICAgICAgICBSZWZQdHI8Rm9udEZlYXR1cmVTZXR0
aW5ncz4gc2V0dGluZ3MgPSBGb250RmVhdHVyZVNldHRpbmdzOjpjcmVhdGUoKTsKKyAgICAgICAg
aW50IGxlbiA9IGxpc3QtPmxlbmd0aCgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxl
bjsgKytpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzRm9udEZlYXR1cmVWYWx1
ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgRm9udEZlYXR1cmVW
YWx1ZSogZmVhdHVyZSA9IHN0YXRpY19jYXN0PEZvbnRGZWF0dXJlVmFsdWUqPihpdGVtKTsKKyAg
ICAgICAgICAgIHNldHRpbmdzLT5hcHBlbmQoRm9udEZlYXR1cmUoZmVhdHVyZS0+dGFnKCksIGZl
YXR1cmUtPnZhbHVlKCkpKTsKKyAgICAgICAgfQorICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
RmVhdHVyZVNldHRpbmdzKHNldHRpbmdzLnJlbGVhc2UoKSk7CisgICAgICAgIHNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYg
RU5BQkxFKENTU19GSUxURVJTKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXI6IHsK
KyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoZmlsdGVyLCBGaWx0ZXIpOworICAg
ICAgICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgICAgIGlmIChjcmVhdGVGaWx0
ZXJPcGVyYXRpb25zKHZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxl
KCksIG9wZXJhdGlvbnMpKQorICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RmlsdGVyKG9w
ZXJhdGlvbnMpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEdyaWRBdXRvQ29sdW1uczogeworICAgICAgICBHcmlkVHJhY2tTaXplIHRy
YWNrU2l6ZTsKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tTaXplKHZhbHVlLCB0cmFja1Np
emUsIHN0YXRlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0R3JpZEF1dG9Db2x1bW5zKHRyYWNrU2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRBdXRvUm93czogeworICAgICAgICBHcmlkVHJh
Y2tTaXplIHRyYWNrU2l6ZTsKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tTaXplKHZhbHVl
LCB0cmFja1NpemUsIHN0YXRlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0R3JpZEF1dG9Sb3dzKHRyYWNrU2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWREZWZpbml0aW9uQ29sdW1uczogewor
ICAgICAgICBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4gdHJhY2tTaXplczsKKyAgICAgICAgTmFtZWRH
cmlkTGluZXNNYXAgbmFtZWRHcmlkTGluZXM7CisgICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNr
TGlzdCh2YWx1ZSwgdHJhY2tTaXplcywgbmFtZWRHcmlkTGluZXMsIHN0YXRlKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZENvbHVtbnModHJhY2tT
aXplcyk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE5hbWVkR3JpZENvbHVtbkxpbmVzKG5h
bWVkR3JpZExpbmVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0R3JpZERlZmluaXRpb25Sb3dzOiB7CisgICAgICAgIFZlY3RvcjxHcmlkVHJhY2tT
aXplPiB0cmFja1NpemVzOworICAgICAgICBOYW1lZEdyaWRMaW5lc01hcCBuYW1lZEdyaWRMaW5l
czsKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCB0cmFja1NpemVzLCBu
YW1lZEdyaWRMaW5lcywgc3RhdGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRHcmlkUm93cyh0cmFja1NpemVzKTsKKyAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0TmFtZWRHcmlkUm93TGluZXMobmFtZWRHcmlkTGluZXMpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRDb2x1bW5TdGFydDogewor
ICAgICAgICBHcmlkUG9zaXRpb24gY29sdW1uU3RhcnRQb3NpdGlvbjsKKyAgICAgICAgaWYgKCFj
cmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIGNvbHVtblN0YXJ0UG9zaXRpb24pKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkSXRlbUNvbHVtblN0YXJ0
KGNvbHVtblN0YXJ0UG9zaXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRHcmlkQ29sdW1uRW5kOiB7CisgICAgICAgIEdyaWRQb3NpdGlvbiBj
b2x1bW5FbmRQb3NpdGlvbjsKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlkUG9zaXRpb24odmFsdWUs
IGNvbHVtbkVuZFBvc2l0aW9uKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0R3JpZEl0ZW1Db2x1bW5FbmQoY29sdW1uRW5kUG9zaXRpb24pOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRSb3dTdGFy
dDogeworICAgICAgICBHcmlkUG9zaXRpb24gcm93U3RhcnRQb3NpdGlvbjsKKyAgICAgICAgaWYg
KCFjcmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIHJvd1N0YXJ0UG9zaXRpb24pKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkSXRlbVJvd1N0YXJ0KHJv
d1N0YXJ0UG9zaXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRHcmlkUm93RW5kOiB7CisgICAgICAgIEdyaWRQb3NpdGlvbiByb3dFbmRQb3Np
dGlvbjsKKyAgICAgICAgaWYgKCFjcmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIHJvd0VuZFBvc2l0
aW9uKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3Jp
ZEl0ZW1Sb3dFbmQocm93RW5kUG9zaXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gVGhlc2UgcHJvcGVydGllcyBhcmUgYWxpYXNlZCBhbmQgRGVwcmVjYXRlZFN0eWxlQnVp
bGRlciBhbHJlYWR5IGFwcGxpZWQgdGhlIHByb3BlcnR5IG9uIHRoZSBwcmVmaXhlZCB2ZXJzaW9u
LgorICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uRGVsYXk6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25EdXJhdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlvblBy
b3BlcnR5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246Cisg
ICAgICAgIHJldHVybjsKKyAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBpbXBsZW1lbnRlZCBp
biB0aGUgRGVwcmVjYXRlZFN0eWxlQnVpbGRlciBsb29rdXAgdGFibGUuCisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ2xpcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRPcmlnaW46CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblg6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRSZXBlYXRYOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0
WToKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemU6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlckJvdHRvbUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21M
ZWZ0UmFkaXVzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21SaWdodFJhZGl1czoK
KyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGU6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlckJvdHRvbVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBz
ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VPdXRzZXQ6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckltYWdlUmVwZWF0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFn
ZVNsaWNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZToKKyAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
TGVmdENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0U3R5bGU6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
UmlnaHRDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZToKKyAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9y
ZGVyVG9wQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXM6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFJpZ2h0UmFkaXVzOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJUb3BTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGg6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvdHRvbToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm94U2l6
aW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlDYXB0aW9uU2lkZToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5Q2xlYXI6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUNsaXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlDb3VudGVySW5jcmVtZW50OgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlDb3VudGVyUmVzZXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlEaXNwbGF5
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlFbXB0eUNlbGxzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlG
bG9hdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFNpemU6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUZvbnRTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQ6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUZvbnRXZWlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUhlaWdodDoKKyNpZiBF
TkFCTEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9OKQorICAgIGNhc2UgQ1NTUHJvcGVydHlJbWFnZU9y
aWVudGF0aW9uOgorI2VuZGlmCisgICAgY2FzZSBDU1NQcm9wZXJ0eUltYWdlUmVuZGVyaW5nOgor
I2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikKKyAgICBjYXNlIENTU1Byb3BlcnR5SW1h
Z2VSZXNvbHV0aW9uOgorI2VuZGlmCisgICAgY2FzZSBDU1NQcm9wZXJ0eUxlZnQ6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUxldHRlclNwYWNpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWln
aHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlMaXN0U3R5bGVQb3NpdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlVHlw
ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luQm90dG9tOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlNYXJnaW5MZWZ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5SaWdodDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5TWFyZ2luVG9wOgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhIZWlnaHQ6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eU1heFdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5IZWln
aHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1pbldpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlP
cGFjaXR5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlPcnBoYW5zOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlPdXRsaW5lQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQ6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGlu
ZVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1dyYXA6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eU92ZXJmbG93WDoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dZOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tOgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5n
TGVmdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0OgorICAgIGNhc2UgQ1NTUHJv
cGVydHlQYWRkaW5nVG9wOgorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtBZnRlcjoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5UGFnZUJyZWFrQmVmb3JlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlQ
YWdlQnJlYWtJbnNpZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBvaW50ZXJFdmVudHM6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVBvc2l0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlSZXNpemU6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVJpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlTaXplOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlTcGVhazoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGFiU2l6ZToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5VGFibGVMYXlvdXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRB
bGlnbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb246CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVRleHRJbmRlbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdzoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dFJlbmRlcmluZzoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4
dFRyYW5zZm9ybToKKyAgICBjYXNlIENTU1Byb3BlcnR5VG9wOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlVbmljb2RlQmlkaToKKyNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKKyAgICBjYXNlIENTU1By
b3BlcnR5VmFyaWFibGU6CisjZW5kaWYKKyAgICBjYXNlIENTU1Byb3BlcnR5VmVydGljYWxBbGln
bjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VmlzaWJpbGl0eToKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0QW5pbWF0aW9uRGVsYXk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlv
bkRpcmVjdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb246
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkZpbGxNb2RlOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudDoKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5p
bWF0aW9uUGxheVN0YXRlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1p
bmdGdW5jdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QXBwZWFyYW5jZToKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QXNwZWN0UmF0aW86CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJhY2tmYWNlVmlzaWJpbGl0eToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dy
b3VuZENsaXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGU6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRPcmlnaW46CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRTaXplOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJGaXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxT
cGFjaW5nOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJJbWFnZToKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3hBbGlnbjoKKyNpZiBFTkFCTEUoQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFL
KQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hEZWNvcmF0aW9uQnJlYWs6CisjZW5kaWYK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RGlyZWN0aW9uOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3hGbGV4OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hGbGV4R3Jv
dXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveExpbmVzOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3hPcmRpbmFsR3JvdXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
eE9yaWVudDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UGFjazoKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Q29sb3JDb3JyZWN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRDb2x1bW5BeGlzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0FmdGVy
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0JlZm9yZToKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtJbnNpZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtbkNvdW50OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5HYXA6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblByb2dyZXNzaW9uOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdENvbHVtblJ1bGVTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVs
ZVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5TcGFuOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aDoKKyNpZiBFTkFCTEUoQ1VSU09SX1ZJU0lCSUxJ
VFkpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEN1cnNvclZpc2liaWxpdHk6CisjZW5kaWYK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QWxpZ25Db250ZW50OgorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRBbGlnbkl0ZW1zOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbGlnblNl
bGY6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhCYXNpczoKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0RmxleERpcmVjdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rmxl
eEdyb3c6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhTaHJpbms6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEZsZXhXcmFwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRKdXN0
aWZ5Q29udGVudDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0T3JkZXI6CisjaWYgRU5BQkxF
KENTU19SRUdJT05TKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbG93RnJvbToKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Rmxvd0ludG86CisjZW5kaWYKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Rm9udEtlcm5pbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTbW9v
dGhpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRWYXJpYW50TGlnYXR1cmVzOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIaWdobGlnaHQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEh5cGhlbmF0ZUNoYXJhY3RlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlw
aGVuYXRlTGltaXRBZnRlcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlTGlt
aXRCZWZvcmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXM6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbnM6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdExpbmVBbGlnbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUJyZWFrOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQ2xhbXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdExpbmVHcmlkOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lU25hcDoKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZURpcmVjdGlvbjoKKyAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFycXVlZUluY3JlbWVudDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFycXVlZVJlcGV0aXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTcGVl
ZDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVN0eWxlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tCb3hJbWFnZU91dHNldDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdl
UmVwZWF0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTbGljZToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFza0NsaXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDb21wb3NpdGU6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZToKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFza09yaWdpbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9u
WDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWToKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tSZXBlYXRZOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZToKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TmJzcE1vZGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBl
cnNwZWN0aXZlT3JpZ2luOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZU9y
aWdpblg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luWToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UHJpbnRDb2xvckFkanVzdDoKKyNpZiBFTkFCTEUoQ1NT
X1JFR0lPTlMpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrQWZ0ZXI6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrQmVmb3JlOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRSZWdpb25CcmVha0luc2lkZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0UmVnaW9uRnJhZ21lbnQ6CisjZW5kaWYKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UnRs
T3JkZXJpbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbjoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dENvbWJpbmU6CisjaWYgRU5BQkxFKENTUzNfVEVYVCkK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25MaW5lOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvblN0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUZXh0RGVjb3JhdGlvbkNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
ZXh0QWxpZ25MYXN0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0SnVzdGlmeToKKyAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFVuZGVybGluZVBvc2l0aW9uOgorI2VuZGlmIC8v
IENTUzNfVEVYVAorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xvcjoK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzUG9zaXRpb246CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUZXh0RmlsbENvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U2Vj
dXJpdHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvcjoKKyAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJh
bnNmb3JtT3JpZ2luWjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtU3R5bGU6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheToKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25UaW1pbmdGdW5jdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWc6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJNb2RpZnk6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFVzZXJTZWxlY3Q6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENsaXBQYXRo
OgorI2lmIEVOQUJMRShDU1NfU0hBUEVTKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFw
ZU1hcmdpbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVQYWRkaW5nOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZUluc2lkZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0U2hhcGVPdXRzaWRlOgorI2VuZGlmCisjaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwRmxvdzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0V3JhcFRocm91Z2g6CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eU1peDoKKyAgICBjYXNlIENTU1Byb3BlcnR5UGFyYW1ldGVyczoKKyNlbmRp
ZgorICAgIGNhc2UgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
aWRvd3M6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlX
b3JkQnJlYWs6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdvcmRTcGFjaW5nOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlXb3JkV3JhcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5WkluZGV4OgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlab29tOgorI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCisgICAg
Y2FzZSBDU1NQcm9wZXJ0eU1heFpvb206CisgICAgY2FzZSBDU1NQcm9wZXJ0eU1pblpvb206Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eU9yaWVudGF0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlVc2Vy
Wm9vbToKKyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGRlZmF1bHQ6CisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgLy8gVHJ5IHRoZSBT
VkcgcHJvcGVydGllcworICAgICAgICBhcHBseVNWR1Byb3BlcnR5KGlkLCB2YWx1ZSk7CisjZW5k
aWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBT
dHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVl
KiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQorICAgICAgICByZXR1
cm4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFn
ZVZhbHVlKj4odmFsdWUpKTsKKworICAgIGlmICh2YWx1ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVl
KCkpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5pc0dyYWRpZW50VmFsdWUoKSkKKyAgICAgICAgICAg
IHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0
PENTU0dyYWRpZW50VmFsdWUqPih2YWx1ZSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRo
aXMpLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShw
cm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KHZhbHVlKSk7Cisg
ICAgfQorCisjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCisgICAgaWYgKHZhbHVlLT5pc0ltYWdl
U2V0VmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIHNldE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0
eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KHZhbHVlKSk7CisjZW5kaWYKKworICAg
IGlmICh2YWx1ZS0+aXNDdXJzb3JJbWFnZVZhbHVlKCkpCisgICAgICAgIHJldHVybiBjdXJzb3JP
clBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0N1cnNvckltYWdlVmFs
dWUqPih2YWx1ZSkpOworCisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIENTU0ltYWdlVmFsdWUqIHZhbHVlKQoreworICAgIFJlZlB0cjxTdHlsZUltYWdl
PiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOworICAgIGlmIChpbWFnZSAm
JiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgcmV0dXJuIGltYWdlLnJlbGVh
c2UoKTsKK30KKworUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpnZW5lcmF0
ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5pc1BlbmRpbmcoKSkgeworICAg
ICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIFN0eWxlUGVuZGluZ0ltYWdlOjpjcmVhdGUodmFsdWUpOworICAg
IH0KKyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKK30KKwor
I2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJl
c29sdmVyOjpzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NT
SW1hZ2VTZXRWYWx1ZSogdmFsdWUpCit7CisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0g
dmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KCkpOworICAgIGlmIChpbWFn
ZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgcmV0dXJuIGltYWdlLnJl
bGVhc2UoKTsKK30KKyNlbmRpZgorCitQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2
ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1ND
dXJzb3JJbWFnZVZhbHVlKiB2YWx1ZSkKK3sKKyAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2Ug
PSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoZG9jdW1lbnQoKSk7CisgICAgaWYgKGltYWdl
ICYmIGltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFn
ZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICByZXR1cm4gaW1hZ2UucmVs
ZWFzZSgpOworfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5k
ZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK3sKKyAgICBpZiAoc3R5
bGUtPmVmZmVjdGl2ZVpvb20oKSA9PSBwYXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0
eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2Ny
aXB0aW9uKGNoaWxkRm9udCk7CisgICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBj
aGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKKyAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9u
KG5ld0ZvbnREZXNjcmlwdGlvbik7Cit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JH
ZW5lcmljRmFtaWx5Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKQoreworICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpOworCisgICAgaWYgKGNoaWxkRm9udC5pc0Fic29sdXRlU2l6ZSgp
IHx8ICFwYXJlbnRTdHlsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBwYXJlbnRGb250ID0gcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAg
IGlmIChjaGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID09IHBhcmVudEZvbnQudXNlRml4
ZWREZWZhdWx0U2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGb3Igbm93LCBsdW1w
IGFsbCBmYW1pbGllcyBidXQgbW9ub3NwYWNlIHRvZ2V0aGVyLgorICAgIGlmIChjaGlsZEZvbnQu
Z2VuZXJpY0ZhbWlseSgpICE9IEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5CisgICAg
ICAgICYmIHBhcmVudEZvbnQuZ2VuZXJpY0ZhbWlseSgpICE9IEZvbnREZXNjcmlwdGlvbjo6TW9u
b3NwYWNlRmFtaWx5KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBrbm93IHRoZSBwYXJl
bnQgaXMgbW9ub3NwYWNlIG9yIHRoZSBjaGlsZCBpcyBtb25vc3BhY2UsIGFuZCB0aGF0IGZvbnQK
KyAgICAvLyBzaXplIHdhcyB1bnNwZWNpZmllZC4gV2Ugd2FudCB0byBzY2FsZSBvdXIgZm9udCBz
aXplIGFzIGFwcHJvcHJpYXRlLgorICAgIC8vIElmIHRoZSBmb250IHVzZXMgYSBrZXl3b3JkIHNp
emUsIHRoZW4gd2UgcmVmZXRjaCBmcm9tIHRoZSB0YWJsZSByYXRoZXIgdGhhbgorICAgIC8vIG11
bHRpcGx5aW5nIGJ5IG91ciBzY2FsZSBmYWN0b3IuCisgICAgZmxvYXQgc2l6ZTsKKyAgICBpZiAo
Y2hpbGRGb250LmtleXdvcmRTaXplKCkpCisgICAgICAgIHNpemUgPSBmb250U2l6ZUZvcktleXdv
cmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgY2hpbGRGb250LmtleXdvcmRTaXplKCkg
LSAxLCBjaGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpOworICAgICAgICBmbG9h
dCBmaXhlZFNjYWxlRmFjdG9yID0gKHNldHRpbmdzICYmIHNldHRpbmdzLT5kZWZhdWx0Rml4ZWRG
b250U2l6ZSgpICYmIHNldHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKSkKKyAgICAgICAgICAgID8g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHNldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpKSAvIHNl
dHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKQorICAgICAgICAgICAgOiAxOworICAgICAgICBzaXpl
ID0gcGFyZW50Rm9udC51c2VGaXhlZERlZmF1bHRTaXplKCkgPworICAgICAgICAgICAgICAgIGNo
aWxkRm9udC5zcGVjaWZpZWRTaXplKCkgLyBmaXhlZFNjYWxlRmFjdG9yIDoKKyAgICAgICAgICAg
ICAgICBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpICogZml4ZWRTY2FsZUZhY3RvcjsKKyAgICB9
CisKKyAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9udCk7Cisg
ICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICBzdHlsZS0+c2V0
Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7Cit9CisKK3ZvaWQgU3R5bGVSZXNv
bHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyogc2V0dGluZ3MpCit7CisgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0R2Vu
ZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5KTsKKyAgICBmb250RGVz
Y3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7
CisgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGRvY3VtZW50KCktPnByaW50
aW5nKCkgfHwgIXNldHRpbmdzLT5zY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZCgpKTsKKyAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHN0YW5kYXJkRm9udEZhbWlseSA9IGRvY3VtZW50U2V0dGlu
Z3MoKS0+c3RhbmRhcmRGb250RmFtaWx5KCk7CisgICAgaWYgKCFzdGFuZGFyZEZvbnRGYW1pbHku
aXNFbXB0eSgpKQorICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KHN0YW5kYXJk
Rm9udEZhbWlseSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVl
TWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7CisgICAgc2V0Rm9udFNpemUoZm9udERlc2Ny
aXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZh
bHNlKSk7CisgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjpp
bml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBtX3N0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsK
KyAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKK30KKwordm9pZCBTdHls
ZVJlc29sdmVyOjpzZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
ZmxvYXQgc2l6ZSkKK3sKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXpl
KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZy
b21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIG1fc3RhdGUuc3R5bGUoKSwgZm9udERlc2NyaXB0
aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcygpKSk7Cit9CisKK2Zs
b2F0IFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3Vt
ZW50KiBkb2N1bWVudCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIGlzQWJzb2x1dGVTaXplLCBm
bG9hdCBzcGVjaWZpZWRTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcykKK3sKKyAgICBmbG9hdCB6
b29tRmFjdG9yID0gMS4wZjsKKyAgICBpZiAoIXVzZVNWR1pvb21SdWxlcykgeworICAgICAgICB6
b29tRmFjdG9yID0gc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKQorICAgICAgICAgICAgem9vbUZhY3RvciAqPSBmcmFt
ZS0+dGV4dFpvb21GYWN0b3IoKTsKKyAgICB9CisKKyAgICByZXR1cm4gU3R5bGVSZXNvbHZlcjo6
Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQsIHpvb21GYWN0b3IsIGlz
QWJzb2x1dGVTaXplLCBzcGVjaWZpZWRTaXplKTsKK30KKworZmxvYXQgU3R5bGVSZXNvbHZlcjo6
Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBmbG9h
dCB6b29tRmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBF
U21hcnRNaW5pbXVtRm9yRm9udFNpemUgdXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUpCit7Cisg
ICAgLy8gVGV4dCB3aXRoIGEgMHB4IGZvbnQgc2l6ZSBzaG91bGQgbm90IGJlIHZpc2libGUgYW5k
IHRoZXJlZm9yZSBuZWVkcyB0byBiZQorICAgIC8vIGV4ZW1wdCBmcm9tIG1pbmltdW0gZm9udCBz
aXplIHJ1bGVzLiBBY2lkMyByZWxpZXMgb24gdGhpcyBmb3IgcGl4ZWwtcGVyZmVjdAorICAgIC8v
IHJlbmRlcmluZy4gVGhpcyBpcyBhbHNvIGNvbXBhdGlibGUgd2l0aCBvdGhlciBicm93c2VycyB0
aGF0IGhhdmUgbWluaW11bQorICAgIC8vIGZvbnQgc2l6ZSBzZXR0aW5ncyAoZS5nLiBGaXJlZm94
KS4KKyAgICBpZiAoZmFic2Yoc3BlY2lmaWVkU2l6ZSkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6ZXBzaWxvbigpKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIC8vIFdlIHN1cHBv
cnQgdHdvIHR5cGVzIG9mIG1pbmltdW0gZm9udCBzaXplLiBUaGUgZmlyc3QgaXMgYSBoYXJkIG92
ZXJyaWRlIHRoYXQgYXBwbGllcyB0bworICAgIC8vIGFsbCBmb250cy4gVGhpcyBpcyAibWluU2l6
ZS4iIFRoZSBzZWNvbmQgdHlwZSBvZiBtaW5pbXVtIGZvbnQgc2l6ZSBpcyBhICJzbWFydCBtaW5p
bXVtIgorICAgIC8vIHRoYXQgaXMgYXBwbGllZCBvbmx5IHdoZW4gdGhlIFdlYiBwYWdlIGNhbid0
IGtub3cgd2hhdCBzaXplIGl0IHJlYWxseSBhc2tlZCBmb3IsIGUuZy4sCisgICAgLy8gd2hlbiBp
dCB1c2VzIGxvZ2ljYWwgc2l6ZXMgbGlrZSAic21hbGwiIG9yIGV4cHJlc3NlcyB0aGUgZm9udC1z
aXplIGFzIGEgcGVyY2VudGFnZSBvZgorICAgIC8vIHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IHNl
dHRpbmcuCisKKyAgICAvLyBXaXRoIHRoZSBzbWFydCBtaW5pbXVtLCB3ZSBuZXZlciB3YW50IHRv
IGdldCBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gZm9udCBzaXplIHRvIGtlZXAgZm9udHMgcmVh
ZGFibGUuCisgICAgLy8gSG93ZXZlciB3ZSBhbHdheXMgYWxsb3cgdGhlIHBhZ2UgdG8gc2V0IGFu
IGV4cGxpY2l0IHBpeGVsIHNpemUgdGhhdCBpcyBzbWFsbGVyLAorICAgIC8vIHNpbmNlIHNpdGVz
IHdpbGwgbWlzLXJlbmRlciBvdGhlcndpc2UgKGUuZy4sIGh0dHA6Ly93d3cuZ2FtZXNwb3QuY29t
IHdpdGggYSA5cHggbWluaW11bSkuCisKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVu
dC0+c2V0dGluZ3MoKTsKKyAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICByZXR1cm4gMS4wZjsK
KworICAgIGludCBtaW5TaXplID0gc2V0dGluZ3MtPm1pbmltdW1Gb250U2l6ZSgpOworICAgIGlu
dCBtaW5Mb2dpY2FsU2l6ZSA9IHNldHRpbmdzLT5taW5pbXVtTG9naWNhbEZvbnRTaXplKCk7Cisg
ICAgZmxvYXQgem9vbWVkU2l6ZSA9IHNwZWNpZmllZFNpemUgKiB6b29tRmFjdG9yOworCisgICAg
Ly8gQXBwbHkgdGhlIGhhcmQgbWluaW11bSBmaXJzdC4gV2Ugb25seSBhcHBseSB0aGUgaGFyZCBt
aW5pbXVtIGlmIGFmdGVyIHpvb21pbmcgd2UncmUgc3RpbGwgdG9vIHNtYWxsLgorICAgIGlmICh6
b29tZWRTaXplIDwgbWluU2l6ZSkKKyAgICAgICAgem9vbWVkU2l6ZSA9IG1pblNpemU7CisKKyAg
ICAvLyBOb3cgYXBwbHkgdGhlICJzbWFydCBtaW5pbXVtLiIgVGhpcyBtaW5pbXVtIGlzIGFsc28g
b25seSBhcHBsaWVkIGlmIHdlJ3JlIHN0aWxsIHRvbyBzbWFsbAorICAgIC8vIGFmdGVyIHpvb21p
bmcuIFRoZSBmb250IHNpemUgbXVzdCBlaXRoZXIgYmUgcmVsYXRpdmUgdG8gdGhlIHVzZXIgZGVm
YXVsdCBvciB0aGUgb3JpZ2luYWwgc2l6ZQorICAgIC8vIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGFi
bGUuIEluIG90aGVyIHdvcmRzLCB3ZSBvbmx5IGFwcGx5IHRoZSBzbWFydCBtaW5pbXVtIHdoZW5l
dmVyIHdlJ3JlIHBvc2l0aXZlCisgICAgLy8gZG9pbmcgc28gd29uJ3QgZGlzcnVwdCB0aGUgbGF5
b3V0LgorICAgIGlmICh1c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSAmJiB6b29tZWRTaXplIDwg
bWluTG9naWNhbFNpemUgJiYgKHNwZWNpZmllZFNpemUgPj0gbWluTG9naWNhbFNpemUgfHwgIWlz
QWJzb2x1dGVTaXplKSkKKyAgICAgICAgem9vbWVkU2l6ZSA9IG1pbkxvZ2ljYWxTaXplOworCisg
ICAgLy8gQWxzbyBjbGFtcCB0byBhIHJlYXNvbmFibGUgbWF4aW11bSB0byBwcmV2ZW50IGluc2Fu
ZSBmb250IHNpemVzIGZyb20gY2F1c2luZyBjcmFzaGVzIG9uIHZhcmlvdXMKKyAgICAvLyBwbGF0
Zm9ybXMgKEknbSBsb29raW5nIGF0IHlvdSwgV2luZG93cy4pCisgICAgcmV0dXJuIG1pbihtYXhp
bXVtQWxsb3dlZEZvbnRTaXplLCB6b29tZWRTaXplKTsKK30KKworY29uc3QgaW50IGZvbnRTaXpl
VGFibGVNYXggPSAxNjsKK2NvbnN0IGludCBmb250U2l6ZVRhYmxlTWluID0gOTsKK2NvbnN0IGlu
dCB0b3RhbEtleXdvcmRzID0gODsKKworLy8gV2luSUUvTmF2NCB0YWJsZSBmb3IgZm9udCBzaXpl
cy4gRGVzaWduZWQgdG8gbWF0Y2ggdGhlIGxlZ2FjeSBmb250IG1hcHBpbmcgc3lzdGVtIG9mIEhU
TUwuCitzdGF0aWMgY29uc3QgaW50IHF1aXJrc0ZvbnRTaXplVGFibGVbZm9udFNpemVUYWJsZU1h
eCAtIGZvbnRTaXplVGFibGVNaW4gKyAxXVt0b3RhbEtleXdvcmRzXSA9Cit7CisgICAgICB7IDks
ICAgIDksICAgICA5LCAgICAgOSwgICAgMTEsICAgIDE0LCAgICAxOCwgICAgMjggfSwKKyAgICAg
IHsgOSwgICAgOSwgICAgIDksICAgIDEwLCAgICAxMiwgICAgMTUsICAgIDIwLCAgICAzMSB9LAor
ICAgICAgeyA5LCAgICA5LCAgICAgOSwgICAgMTEsICAgIDEzLCAgICAxNywgICAgMjIsICAgIDM0
IH0sCisgICAgICB7IDksICAgIDksICAgIDEwLCAgICAxMiwgICAgMTQsICAgIDE4LCAgICAyNCwg
ICAgMzcgfSwKKyAgICAgIHsgOSwgICAgOSwgICAgMTAsICAgIDEzLCAgICAxNiwgICAgMjAsICAg
IDI2LCAgICA0MCB9LCAvLyBmaXhlZCBmb250IGRlZmF1bHQgKDEzKQorICAgICAgeyA5LCAgICA5
LCAgICAxMSwgICAgMTQsICAgIDE3LCAgICAyMSwgICAgMjgsICAgIDQyIH0sCisgICAgICB7IDks
ICAgMTAsICAgIDEyLCAgICAxNSwgICAgMTcsICAgIDIzLCAgICAzMCwgICAgNDUgfSwKKyAgICAg
IHsgOSwgICAxMCwgICAgMTMsICAgIDE2LCAgICAxOCwgICAgMjQsICAgIDMyLCAgICA0OCB9IC8v
IHByb3BvcnRpb25hbCBmb250IGRlZmF1bHQgKDE2KQorfTsKKy8vIEhUTUwgICAgICAgMSAgICAg
IDIgICAgICAzICAgICAgNCAgICAgIDUgICAgICA2ICAgICAgNworLy8gQ1NTICB4eHMgICB4cyAg
ICAgcyAgICAgIG0gICAgICBsICAgICB4bCAgICAgeHhsCisvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgfAorLy8gICAgICAgICAgICAgICAgICAgICAgdXNlciBwcmVmCisKKy8vIFN0cmljdCBt
b2RlIHRhYmxlIG1hdGNoZXMgTWFjSUUgYW5kIE1vemlsbGEncyBzZXR0aW5ncyBleGFjdGx5Lgor
c3RhdGljIGNvbnN0IGludCBzdHJpY3RGb250U2l6ZVRhYmxlW2ZvbnRTaXplVGFibGVNYXggLSBm
b250U2l6ZVRhYmxlTWluICsgMV1bdG90YWxLZXl3b3Jkc10gPQoreworICAgICAgeyA5LCAgICA5
LCAgICAgOSwgICAgIDksICAgIDExLCAgICAxNCwgICAgMTgsICAgIDI3IH0sCisgICAgICB7IDks
ICAgIDksICAgICA5LCAgICAxMCwgICAgMTIsICAgIDE1LCAgICAyMCwgICAgMzAgfSwKKyAgICAg
IHsgOSwgICAgOSwgICAgMTAsICAgIDExLCAgICAxMywgICAgMTcsICAgIDIyLCAgICAzMyB9LAor
ICAgICAgeyA5LCAgICA5LCAgICAxMCwgICAgMTIsICAgIDE0LCAgICAxOCwgICAgMjQsICAgIDM2
IH0sCisgICAgICB7IDksICAgMTAsICAgIDEyLCAgICAxMywgICAgMTYsICAgIDIwLCAgICAyNiwg
ICAgMzkgfSwgLy8gZml4ZWQgZm9udCBkZWZhdWx0ICgxMykKKyAgICAgIHsgOSwgICAxMCwgICAg
MTIsICAgIDE0LCAgICAxNywgICAgMjEsICAgIDI4LCAgICA0MiB9LAorICAgICAgeyA5LCAgIDEw
LCAgICAxMywgICAgMTUsICAgIDE4LCAgICAyMywgICAgMzAsICAgIDQ1IH0sCisgICAgICB7IDks
ICAgMTAsICAgIDEzLCAgICAxNiwgICAgMTgsICAgIDI0LCAgICAzMiwgICAgNDggfSAvLyBwcm9w
b3J0aW9uYWwgZm9udCBkZWZhdWx0ICgxNikKK307CisvLyBIVE1MICAgICAgIDEgICAgICAyICAg
ICAgMyAgICAgIDQgICAgICA1ICAgICAgNiAgICAgIDcKKy8vIENTUyAgeHhzICAgeHMgICAgIHMg
ICAgICBtICAgICAgbCAgICAgeGwgICAgIHh4bAorLy8gICAgICAgICAgICAgICAgICAgICAgICAg
IHwKKy8vICAgICAgICAgICAgICAgICAgICAgIHVzZXIgcHJlZgorCisvLyBGb3IgdmFsdWVzIG91
dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSB0YWJsZSwgd2UgdXNlIFRvZGQgRmFocm5lcidzIHN1Z2dl
c3RlZCBzY2FsZQorLy8gZmFjdG9ycyBmb3IgZWFjaCBrZXl3b3JkIHZhbHVlLgorc3RhdGljIGNv
bnN0IGZsb2F0IGZvbnRTaXplRmFjdG9yc1t0b3RhbEtleXdvcmRzXSA9IHsgMC42MGYsIDAuNzVm
LCAwLjg5ZiwgMS4wZiwgMS4yZiwgMS41ZiwgMi4wZiwgMy4wZiB9OworCitmbG9hdCBTdHlsZVJl
c29sdmVyOjpmb250U2l6ZUZvcktleXdvcmQoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQga2V5d29y
ZCwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKQoreworICAgIFNldHRpbmdzKiBzZXR0
aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAg
IHJldHVybiAxLjBmOworCisgICAgYm9vbCBxdWlya3NNb2RlID0gZG9jdW1lbnQtPmluUXVpcmtz
TW9kZSgpOworICAgIGludCBtZWRpdW1TaXplID0gc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSA/
IHNldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpIDogc2V0dGluZ3MtPmRlZmF1bHRGb250
U2l6ZSgpOworICAgIGlmIChtZWRpdW1TaXplID49IGZvbnRTaXplVGFibGVNaW4gJiYgbWVkaXVt
U2l6ZSA8PSBmb250U2l6ZVRhYmxlTWF4KSB7CisgICAgICAgIC8vIExvb2sgdXAgdGhlIGVudHJ5
IGluIHRoZSB0YWJsZS4KKyAgICAgICAgaW50IHJvdyA9IG1lZGl1bVNpemUgLSBmb250U2l6ZVRh
YmxlTWluOworICAgICAgICBpbnQgY29sID0gKGtleXdvcmQgLSBDU1NWYWx1ZVh4U21hbGwpOwor
ICAgICAgICByZXR1cm4gcXVpcmtzTW9kZSA/IHF1aXJrc0ZvbnRTaXplVGFibGVbcm93XVtjb2xd
IDogc3RyaWN0Rm9udFNpemVUYWJsZVtyb3ddW2NvbF07CisgICAgfQorCisgICAgLy8gVmFsdWUg
aXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIHRhYmxlLiBBcHBseSB0aGUgc2NhbGUgZmFjdG9y
IGluc3RlYWQuCisgICAgZmxvYXQgbWluTG9naWNhbFNpemUgPSBtYXgoc2V0dGluZ3MtPm1pbmlt
dW1Mb2dpY2FsRm9udFNpemUoKSwgMSk7CisgICAgcmV0dXJuIG1heChmb250U2l6ZUZhY3RvcnNb
a2V5d29yZCAtIENTU1ZhbHVlWHhTbWFsbF0qbWVkaXVtU2l6ZSwgbWluTG9naWNhbFNpemUpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIGludCBmaW5kTmVhcmVzdExlZ2FjeUZv
bnRTaXplKGludCBwaXhlbEZvbnRTaXplLCBjb25zdCBUKiB0YWJsZSwgaW50IG11bHRpcGxpZXIp
Cit7CisgICAgLy8gSWdub3JlIHRhYmxlWzBdIGJlY2F1c2UgeHgtc21hbGwgZG9lcyBub3QgY29y
cmVzcG9uZCB0byBhbnkgbGVnYWN5IGZvbnQgc2l6ZS4KKyAgICBmb3IgKGludCBpID0gMTsgaSA8
IHRvdGFsS2V5d29yZHMgLSAxOyBpKyspIHsKKyAgICAgICAgaWYgKHBpeGVsRm9udFNpemUgKiAy
IDwgKHRhYmxlW2ldICsgdGFibGVbaSArIDFdKSAqIG11bHRpcGxpZXIpCisgICAgICAgICAgICBy
ZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIHRvdGFsS2V5d29yZHMgLSAxOworfQorCitpbnQg
U3R5bGVSZXNvbHZlcjo6bGVnYWN5Rm9udFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQgcGl4
ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplKQoreworICAgIFNldHRp
bmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3Mp
CisgICAgICAgIHJldHVybiAxOworCisgICAgYm9vbCBxdWlya3NNb2RlID0gZG9jdW1lbnQtPmlu
UXVpcmtzTW9kZSgpOworICAgIGludCBtZWRpdW1TaXplID0gc2hvdWxkVXNlRml4ZWREZWZhdWx0
U2l6ZSA/IHNldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpIDogc2V0dGluZ3MtPmRlZmF1
bHRGb250U2l6ZSgpOworICAgIGlmIChtZWRpdW1TaXplID49IGZvbnRTaXplVGFibGVNaW4gJiYg
bWVkaXVtU2l6ZSA8PSBmb250U2l6ZVRhYmxlTWF4KSB7CisgICAgICAgIGludCByb3cgPSBtZWRp
dW1TaXplIC0gZm9udFNpemVUYWJsZU1pbjsKKyAgICAgICAgcmV0dXJuIGZpbmROZWFyZXN0TGVn
YWN5Rm9udFNpemU8aW50PihwaXhlbEZvbnRTaXplLCBxdWlya3NNb2RlID8gcXVpcmtzRm9udFNp
emVUYWJsZVtyb3ddIDogc3RyaWN0Rm9udFNpemVUYWJsZVtyb3ddLCAxKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmluZE5lYXJlc3RMZWdhY3lGb250U2l6ZTxmbG9hdD4ocGl4ZWxGb250U2l6ZSwg
Zm9udFNpemVGYWN0b3JzLCBtZWRpdW1TaXplKTsKK30KKworc3RhdGljIENvbG9yIGNvbG9yRm9y
Q1NTVmFsdWUoQ1NTVmFsdWVJRCBjc3NWYWx1ZUlkKQoreworICAgIHN0cnVjdCBDb2xvclZhbHVl
IHsKKyAgICAgICAgQ1NTVmFsdWVJRCBjc3NWYWx1ZUlkOworICAgICAgICBSR0JBMzIgY29sb3I7
CisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBDb2xvclZhbHVlIGNvbG9yVmFsdWVzW10gPSB7
CisgICAgICAgIHsgQ1NTVmFsdWVBcXVhLCAweEZGMDBGRkZGIH0sCisgICAgICAgIHsgQ1NTVmFs
dWVCbGFjaywgMHhGRjAwMDAwMCB9LAorICAgICAgICB7IENTU1ZhbHVlQmx1ZSwgMHhGRjAwMDBG
RiB9LAorICAgICAgICB7IENTU1ZhbHVlRnVjaHNpYSwgMHhGRkZGMDBGRiB9LAorICAgICAgICB7
IENTU1ZhbHVlR3JheSwgMHhGRjgwODA4MCB9LAorICAgICAgICB7IENTU1ZhbHVlR3JlZW4sIDB4
RkYwMDgwMDAgIH0sCisgICAgICAgIHsgQ1NTVmFsdWVHcmV5LCAweEZGODA4MDgwIH0sCisgICAg
ICAgIHsgQ1NTVmFsdWVMaW1lLCAweEZGMDBGRjAwIH0sCisgICAgICAgIHsgQ1NTVmFsdWVNYXJv
b24sIDB4RkY4MDAwMDAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZU5hdnksIDB4RkYwMDAwODAgfSwK
KyAgICAgICAgeyBDU1NWYWx1ZU9saXZlLCAweEZGODA4MDAwICB9LAorICAgICAgICB7IENTU1Zh
bHVlT3JhbmdlLCAweEZGRkZBNTAwIH0sCisgICAgICAgIHsgQ1NTVmFsdWVQdXJwbGUsIDB4RkY4
MDAwODAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZVJlZCwgMHhGRkZGMDAwMCB9LAorICAgICAgICB7
IENTU1ZhbHVlU2lsdmVyLCAweEZGQzBDMEMwIH0sCisgICAgICAgIHsgQ1NTVmFsdWVUZWFsLCAw
eEZGMDA4MDgwICB9LAorICAgICAgICB7IENTU1ZhbHVlVHJhbnNwYXJlbnQsIDB4MDAwMDAwMDAg
fSwKKyAgICAgICAgeyBDU1NWYWx1ZVdoaXRlLCAweEZGRkZGRkZGIH0sCisgICAgICAgIHsgQ1NT
VmFsdWVZZWxsb3csIDB4RkZGRkZGMDAgfSwKKyAgICAgICAgeyBDU1NWYWx1ZUludmFsaWQsIENT
U1ZhbHVlSW52YWxpZCB9CisgICAgfTsKKworICAgIGZvciAoY29uc3QgQ29sb3JWYWx1ZSogY29s
ID0gY29sb3JWYWx1ZXM7IGNvbC0+Y3NzVmFsdWVJZDsgKytjb2wpIHsKKyAgICAgICAgaWYgKGNv
bC0+Y3NzVmFsdWVJZCA9PSBjc3NWYWx1ZUlkKQorICAgICAgICAgICAgcmV0dXJuIGNvbC0+Y29s
b3I7CisgICAgfQorICAgIHJldHVybiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3Rl
bUNvbG9yKGNzc1ZhbHVlSWQpOworfQorCitib29sIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVBy
aW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQoQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVl
KQoreworICAgIGludCBpZGVudCA9IHZhbHVlLT5nZXRWYWx1ZUlEKCk7CisgICAgc3dpdGNoIChp
ZGVudCkgeworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRUZXh0OgorICAgIGNhc2UgQ1NTVmFsdWVX
ZWJraXRMaW5rOgorICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRBY3RpdmVsaW5rOgorICAgIGNhc2Ug
Q1NTVmFsdWVDdXJyZW50Y29sb3I6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0NvbG9yIFN0eWxlUmVzb2x2ZXI6
OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBm
b3JWaXNpdGVkTGluaykgY29uc3QKK3sKKyAgICBpZiAodmFsdWUtPmlzUkdCQ29sb3IoKSkKKyAg
ICAgICAgcmV0dXJuIENvbG9yKHZhbHVlLT5nZXRSR0JBMzJWYWx1ZSgpKTsKKworICAgIGNvbnN0
IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisgICAgQ1NTVmFsdWVJRCBpZGVudCA9IHZhbHVlLT5n
ZXRWYWx1ZUlEKCk7CisgICAgc3dpdGNoIChpZGVudCkgeworICAgIGNhc2UgMDoKKyAgICAgICAg
cmV0dXJuIENvbG9yKCk7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFRleHQ6CisgICAgICAgIHJl
dHVybiBzdGF0ZS5kb2N1bWVudCgpLT50ZXh0Q29sb3IoKTsKKyAgICBjYXNlIENTU1ZhbHVlV2Vi
a2l0TGluazoKKyAgICAgICAgcmV0dXJuIChzdGF0ZS5lbGVtZW50KCktPmlzTGluaygpICYmIGZv
clZpc2l0ZWRMaW5rKSA/IHN0YXRlLmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rQ29sb3IoKSA6IHN0
YXRlLmRvY3VtZW50KCktPmxpbmtDb2xvcigpOworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRBY3Rp
dmVsaW5rOgorICAgICAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9y
KCk7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yOgorICAgICAgICByZXR1
cm4gUmVuZGVyVGhlbWU6OmZvY3VzUmluZ0NvbG9yKCk7CisgICAgY2FzZSBDU1NWYWx1ZUN1cnJl
bnRjb2xvcjoKKyAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlKCktPmNvbG9yKCk7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGNvbG9yRm9yQ1NTVmFsdWUoaWRlbnQpOworICAgIH0KK30K
Kwordm9pZCBTdHlsZVJlc29sdmVyOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1
bHQoY29uc3QgTWVkaWFRdWVyeUV4cCogZXhwciwgYm9vbCByZXN1bHQpCit7CisgICAgbV92aWV3
cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLmFwcGVuZChhZG9wdFB0cihuZXcgTWVkaWFR
dWVyeVJlc3VsdCgqZXhwciwgcmVzdWx0KSkpOworfQorCitib29sIFN0eWxlUmVzb2x2ZXI6OmFm
ZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgcyA9IG1fdmll
d3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHM7IGkrKykgeworICAgICAgICBpZiAobV9tZWRpdW0tPmV2YWwoJm1fdmll
d3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0c1tpXS0+bV9leHByZXNzaW9uKSAhPSBtX3Zp
ZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHNbaV0tPm1fcmVzdWx0KQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKK3N0YXRpYyBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmls
dGVyT3BlcmF0aW9uRm9yVHlwZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RmlsdGVyT3BlcmF0aW9u
VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgV2ViS2l0Q1NTRmls
dGVyVmFsdWU6OlJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRl
ck9wZXJhdGlvbjo6UkVGRVJFTkNFOworICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Okdy
YXlzY2FsZUZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6
R1JBWVNDQUxFOworICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNlcGlhRmlsdGVyT3Bl
cmF0aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTsKKyAgICBjYXNl
IFdlYktpdENTU0ZpbHRlclZhbHVlOjpTYXR1cmF0ZUZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAg
cmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU7CisgICAgY2FzZSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6SHVlUm90YXRlRmlsdGVyT3BlcmF0aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVy
T3BlcmF0aW9uOjpIVUVfUk9UQVRFOworICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Oklu
dmVydEZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6SU5W
RVJUOworICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Ok9wYWNpdHlGaWx0ZXJPcGVyYXRp
b246CisgICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk7CisgICAgY2FzZSBX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAg
cmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzsKKyAgICBjYXNlIFdlYktpdENTU0Zp
bHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRl
ck9wZXJhdGlvbjo6Q09OVFJBU1Q7CisgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Qmx1
ckZpbHRlck9wZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6QkxVUjsK
KyAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9u
OgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzsKKyNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpCisgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Q3VzdG9tRmls
dGVyT3BlcmF0aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT007Cisj
ZW5kaWYKKyAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpVbmtub3duRmlsdGVyT3BlcmF0
aW9uOgorICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpOT05FOworICAgIH0KKyAgICBy
ZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpOT05FOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJT
KSAmJiBFTkFCTEUoU1ZHKQordm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3Vt
ZW50cygpCit7CisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKworICAgIC8vIENyYXNoIHJl
cG9ydHMgaW5kaWNhdGUgdGhhdCB3ZSd2ZSBzZWVuIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2hl
biBvdXIKKyAgICAvLyBzdHlsZSBpcyBOVUxMLiBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2h5IHRo
aXMgaGFwcGVucy4gT3VyIGd1ZXNzIGlzCisgICAgLy8gcmVlbnRlcmluZyBzdHlsZUZvckVsZW1l
bnQoKS4KKyAgICBBU1NFUlQoc3RhdGUuc3R5bGUoKSk7CisgICAgaWYgKCFzdGF0ZS5zdHlsZSgp
IHx8ICFzdGF0ZS5zdHlsZSgpLT5oYXNGaWx0ZXIoKSB8fCBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1l
bnRzKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDYWNoZWRSZXNvdXJjZUxv
YWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBzdGF0ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNv
dXJjZUxvYWRlcigpOworICAgIFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0
ZXJPcGVyYXRpb25zID0gc3RhdGUuc3R5bGUoKS0+bXV0YWJsZUZpbHRlcigpLm9wZXJhdGlvbnMo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyT3BlcmF0aW9ucy5zaXplKCk7
ICsraSkgeworICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0ZXJPcGVyYXRpb24g
PSBmaWx0ZXJPcGVyYXRpb25zLmF0KGkpOworICAgICAgICBpZiAoZmlsdGVyT3BlcmF0aW9uLT5n
ZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKKyAgICAg
ICAgICAgIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiogcmVmZXJlbmNlRmlsdGVyID0gc3RhdGlj
X2Nhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uLmdldCgpKTsK
KworICAgICAgICAgICAgV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSogdmFsdWUgPSBzdGF0ZS5w
ZW5kaW5nU1ZHRG9jdW1lbnRzKCkuZ2V0KHJlZmVyZW5jZUZpbHRlcik7CisgICAgICAgICAgICBp
ZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQ2FjaGVk
U1ZHRG9jdW1lbnQqIGNhY2hlZERvY3VtZW50ID0gdmFsdWUtPmxvYWQoY2FjaGVkUmVzb3VyY2VM
b2FkZXIpOworICAgICAgICAgICAgaWYgKCFjYWNoZWREb2N1bWVudCkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gU3Rhc2ggdGhlIENhY2hlZFNWR0RvY3VtZW50
IG9uIHRoZSByZWZlcmVuY2UgZmlsdGVyLgorICAgICAgICAgICAgcmVmZXJlbmNlRmlsdGVyLT5z
ZXRDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShhZG9wdFB0cihuZXcgQ2FjaGVkU1ZHRG9jdW1l
bnRSZWZlcmVuY2UoY2FjaGVkRG9jdW1lbnQpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgc3Rh
dGUucGVuZGluZ1NWR0RvY3VtZW50cygpLmNsZWFyKCk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKK1N0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYWRlcihD
U1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5pc1dlYktpdENTU1NoYWRlclZhbHVl
KCkpCisgICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShz
dGF0aWNfY2FzdDxXZWJLaXRDU1NTaGFkZXJWYWx1ZSo+KHZhbHVlKSk7CisgICAgcmV0dXJuIDA7
Cit9CisKK1N0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdTdHlsZVNo
YWRlckZyb21WYWx1ZShXZWJLaXRDU1NTaGFkZXJWYWx1ZSogdmFsdWUpCit7CisgICAgU3R5bGVT
aGFkZXIqIHNoYWRlciA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdTaGFkZXIoKTsKKyAgICBpZiAo
c2hhZGVyICYmIHNoYWRlci0+aXNQZW5kaW5nU2hhZGVyKCkpCisgICAgICAgIG1fc3RhdGUuc2V0
SGFzUGVuZGluZ1NoYWRlcnModHJ1ZSk7CisgICAgcmV0dXJuIHNoYWRlcjsKK30KKworUGFzc1Jl
ZlB0cjxDdXN0b21GaWx0ZXJQcm9ncmFtPiBTdHlsZVJlc29sdmVyOjpsb29rdXBDdXN0b21GaWx0
ZXJQcm9ncmFtKFdlYktpdENTU1NoYWRlclZhbHVlKiB2ZXJ0ZXhTaGFkZXIsIFdlYktpdENTU1No
YWRlclZhbHVlKiBmcmFnbWVudFNoYWRlciwgCisgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUg
cHJvZ3JhbVR5cGUsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1NaXhTZXR0aW5ncyYgbWl4U2V0
dGluZ3MsIEN1c3RvbUZpbHRlck1lc2hUeXBlIG1lc2hUeXBlKQoreworICAgIENhY2hlZFJlc291
cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICBLVVJMIHZlcnRleFNoYWRlclVSTCA9IHZlcnRleFNo
YWRlciA/IHZlcnRleFNoYWRlci0+Y29tcGxldGVVUkwoY2FjaGVkUmVzb3VyY2VMb2FkZXIpIDog
S1VSTCgpOworICAgIEtVUkwgZnJhZ21lbnRTaGFkZXJVUkwgPSBmcmFnbWVudFNoYWRlciA/IGZy
YWdtZW50U2hhZGVyLT5jb21wbGV0ZVVSTChjYWNoZWRSZXNvdXJjZUxvYWRlcikgOiBLVVJMKCk7
CisgICAgUmVmUHRyPFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbTsKKyAgICBpZiAo
bV9jdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUpCisgICAgICAgIHByb2dyYW0gPSBtX2N1c3RvbUZp
bHRlclByb2dyYW1DYWNoZS0+bG9va3VwKEN1c3RvbUZpbHRlclByb2dyYW1JbmZvKHZlcnRleFNo
YWRlclVSTCwgZnJhZ21lbnRTaGFkZXJVUkwsIHByb2dyYW1UeXBlLCBtaXhTZXR0aW5ncywgbWVz
aFR5cGUpKTsKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IFN0
eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbSB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgZHVyaW5nIHRoZSBs
b2FkUGVuZGluZ1NoYWRlcnMgYW5kIGFkZGVkIHRvIHRoZSBjYWNoZS4KKyAgICAgICAgcHJvZ3Jh
bSA9IFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKHZlcnRleFNoYWRlclVSTCwgdmVy
dGV4U2hhZGVyID8gc3R5bGVTaGFkZXIodmVydGV4U2hhZGVyKSA6IDAsIAorICAgICAgICAgICAg
ZnJhZ21lbnRTaGFkZXJVUkwsIGZyYWdtZW50U2hhZGVyID8gc3R5bGVTaGFkZXIoZnJhZ21lbnRT
aGFkZXIpIDogMCwgcHJvZ3JhbVR5cGUsIG1peFNldHRpbmdzLCBtZXNoVHlwZSk7CisgICAgfQor
ICAgIHJldHVybiBwcm9ncmFtLnJlbGVhc2UoKTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjps
b2FkUGVuZGluZ1NoYWRlcnMoKQoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0
byBjaGVjayB0aGF0IHN0eWxlIGlzIG5vbi1udWxsLiBUaGlzIGlzIGEgc3BlY3VsYXRpdmUgZml4
IGZvcjoKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3
NjY1CisgICAgaWYgKCFtX3N0YXRlLmhhc1BlbmRpbmdTaGFkZXJzKCkgfHwgIW1fc3RhdGUuc3R5
bGUoKSB8fCAhbV9zdGF0ZS5zdHlsZSgpLT5oYXNGaWx0ZXIoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0
ZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOworCisgICAgVmVjdG9yPFJlZlB0
cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0YXRlLnN0eWxlKCkt
Pm11dGFibGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGZpbHRlck9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPEZpbHRl
ck9wZXJhdGlvbj4gZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVyT3BlcmF0aW9ucy5hdChpKTsKKyAg
ICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRlck9w
ZXJhdGlvbjo6Q1VTVE9NKSB7CisgICAgICAgICAgICBDdXN0b21GaWx0ZXJPcGVyYXRpb24qIGN1
c3RvbUZpbHRlciA9IHN0YXRpY19jYXN0PEN1c3RvbUZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9w
ZXJhdGlvbi5nZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQoY3VzdG9tRmlsdGVyLT5wcm9ncmFt
KCkpOworICAgICAgICAgICAgU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtKiBwcm9ncmFtID0gc3Rh
dGljX2Nhc3Q8U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtKj4oY3VzdG9tRmlsdGVyLT5wcm9ncmFt
KCkpOworICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBTdHlsZVBlbmRpbmdTaGFkZXJzIGNv
dWxkIGJlIGFscmVhZHkgcmVzb2x2ZWQgdG8gU3R5bGVDYWNoZWRTaGFkZXJzLiBUaGF0J3MgYmVj
YXVzZSB0aGUgcnVsZSB3YXMgbWF0Y2hlZCBiZWZvcmUuCisgICAgICAgICAgICAvLyBIb3dldmVy
LCB0aGUgU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtIHRoYXQgd2FzIGluaXRpYWxseSBjcmVhdGVk
IGNvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNhY2hlIGluIHRoZSBtZWFud2hpbGUs
CisgICAgICAgICAgICAvLyBtZWFuaW5nIHRoYXQgd2UgZ2V0IGEgbmV3IFN0eWxlQ3VzdG9tRmls
dGVyUHJvZ3JhbSBoZXJlIHRoYXQgaXMgbm90IHlldCBpbiB0aGUgY2FjaGUsIGJ1dCBhbHJlYWR5
IGhhcyBsb2FkZWQgU3R5bGVTaGFkZXJzLgorICAgICAgICAgICAgaWYgKCFwcm9ncmFtLT5oYXNQ
ZW5kaW5nU2hhZGVycygpICYmIHByb2dyYW0tPmluQ2FjaGUoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmICghbV9jdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUpCisg
ICAgICAgICAgICAgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUgPSBhZG9wdFB0cihuZXcg
U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUoKSk7CisgICAgICAgICAgICBSZWZQdHI8U3R5
bGVDdXN0b21GaWx0ZXJQcm9ncmFtPiBzdHlsZVByb2dyYW0gPSBtX2N1c3RvbUZpbHRlclByb2dy
YW1DYWNoZS0+bG9va3VwKHByb2dyYW0pOworICAgICAgICAgICAgaWYgKHN0eWxlUHJvZ3JhbS5n
ZXQoKSkKKyAgICAgICAgICAgICAgICBjdXN0b21GaWx0ZXItPnNldFByb2dyYW0oc3R5bGVQcm9n
cmFtLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo
cHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkgJiYgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCktPmlzUGVu
ZGluZ1NoYWRlcigpKSB7CisgICAgICAgICAgICAgICAgICAgIFdlYktpdENTU1NoYWRlclZhbHVl
KiBzaGFkZXJWYWx1ZSA9IHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ1NoYWRlcio+KHByb2dyYW0t
PnZlcnRleFNoYWRlcigpKS0+Y3NzU2hhZGVyVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAg
cHJvZ3JhbS0+c2V0VmVydGV4U2hhZGVyKHNoYWRlclZhbHVlLT5jYWNoZWRTaGFkZXIoY2FjaGVk
UmVzb3VyY2VMb2FkZXIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkgJiYgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS0+
aXNQZW5kaW5nU2hhZGVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q1NTU2hhZGVy
VmFsdWUqIHNoYWRlclZhbHVlID0gc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nU2hhZGVyKj4ocHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKSktPmNzc1NoYWRlclZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgICAgIHByb2dyYW0tPnNldEZyYWdtZW50U2hhZGVyKHNoYWRlclZhbHVlLT5jYWNoZWRTaGFk
ZXIoY2FjaGVkUmVzb3VyY2VMb2FkZXIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUtPmFkZChwcm9ncmFtKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtX3N0YXRlLnNldEhhc1BlbmRpbmdTaGFkZXJz
KGZhbHNlKTsKK30KKworc3RhdGljIGJvb2wgc29ydFBhcmFtZXRlcnNCeU5hbWVDb21wYXJhdG9y
KGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBhLCBjb25zdCBSZWZQdHI8Q3Vz
dG9tRmlsdGVyUGFyYW1ldGVyPiYgYikKK3sKKyAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZUxl
c3NUaGFuKGEtPm5hbWUoKSwgYi0+bmFtZSgpKTsKK30KKworUGFzc1JlZlB0cjxDdXN0b21GaWx0
ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0
ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqIHZhbHVlcywgYm9vbCBpc0FycmF5
KQoreworICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcj4gYXJyYXlQYXJhbWV0
ZXIgPSBDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUsIGlzQXJyYXkgPyBD
dXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcjo6QVJSQVkgOiBDdXN0b21GaWx0ZXJBcnJheVBhcmFt
ZXRlcjo6TUFUUklYKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBsZW5ndGggPSB2YWx1ZXMt
Pmxlbmd0aCgpOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0g
dmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICBpZiAoIXZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgp
ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIGFycmF5UGFyYW1ldGVyLT5hZGRWYWx1ZShwcmltaXRpdmVWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBhcnJheVBhcmFtZXRlci5yZWxlYXNlKCk7
Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpw
YXJzZUN1c3RvbUZpbHRlckNvbG9yUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFs
dWVMaXN0KiB2YWx1ZXMpCit7CisgICAgQVNTRVJUKHZhbHVlcy0+bGVuZ3RoKCkpOworICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgIFJl
ZlB0cjxDdXN0b21GaWx0ZXJDb2xvclBhcmFtZXRlcj4gY29sb3JQYXJhbWV0ZXIgPSBDdXN0b21G
aWx0ZXJDb2xvclBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOworICAgIGNvbG9yUGFyYW1ldGVyLT5z
ZXRDb2xvcihDb2xvcihmaXJzdFByaW1pdGl2ZVZhbHVlLT5nZXRSR0JBMzJWYWx1ZSgpKSk7Cisg
ICAgcmV0dXJuIGNvbG9yUGFyYW1ldGVyLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxDdXN0
b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyTnVtYmVy
UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMpCit7Cisg
ICAgUmVmUHRyPEN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcj4gbnVtYmVyUGFyYW1ldGVyID0g
Q3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyOjpjcmVhdGUobmFtZSk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHZhbHVlcy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBDU1NWYWx1
ZSogdmFsdWUgPSB2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgIGlm
ICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmlt
aXRpdmVUeXBlKCkgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgbnVtYmVyUGFyYW1ldGVyLT5hZGRWYWx1ZShwcmltaXRpdmVW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBudW1iZXJQYXJhbWV0
ZXIucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5
bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoY29uc3QgU3Ry
aW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqIHZhbHVlcykKK3sKKyAgICBSZWZQdHI8Q3VzdG9tRmls
dGVyVHJhbnNmb3JtUGFyYW1ldGVyPiB0cmFuc2Zvcm1QYXJhbWV0ZXIgPSBDdXN0b21GaWx0ZXJU
cmFuc2Zvcm1QYXJhbWV0ZXI6OmNyZWF0ZShuYW1lKTsKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnM7CisgICAgdHJhbnNmb3Jtc0ZvclZhbHVlKG1fc3RhdGUuc3R5bGUoKSwgbV9z
dGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHZhbHVlcywgb3BlcmF0aW9ucyk7CisgICAgdHJhbnNm
b3JtUGFyYW1ldGVyLT5zZXRPcGVyYXRpb25zKG9wZXJhdGlvbnMpOworICAgIHJldHVybiB0cmFu
c2Zvcm1QYXJhbWV0ZXIucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBh
cmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29uc3Qg
U3RyaW5nJiBuYW1lLCBDU1NWYWx1ZSogcGFyYW1ldGVyVmFsdWUpCit7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudCBvdGhlciBwYXJhbWV0ZXJzIHR5cGVzIHBhcnNpbmcuCisgICAgLy8gdGV4dHVy
ZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTQ0MgorICAgIC8v
IG1hdDIsIG1hdDMsIG1hdDQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MTQ0NAorICAgIC8vIE51bWJlciBwYXJhbWV0ZXJzIGFyZSB3cmFwcGVkIGluc2lkZSBhIENT
U1ZhbHVlTGlzdCBhbmQgYWxsCisgICAgLy8gdGhlIG90aGVyIGZ1bmN0aW9ucyB2YWx1ZXMgaW5o
ZXJpdCBmcm9tIENTU1ZhbHVlTGlzdC4KKyAgICBpZiAoIXBhcmFtZXRlclZhbHVlLT5pc1ZhbHVl
TGlzdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIENTU1ZhbHVlTGlzdCogdmFsdWVzID0g
c3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4ocGFyYW1ldGVyVmFsdWUpOworICAgIGlmICghdmFs
dWVzLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAocGFyYW1ldGVyVmFs
dWUtPmlzV2ViS2l0Q1NTQXJyYXlGdW5jdGlvblZhbHVlKCkpCisgICAgICAgIHJldHVybiBwYXJz
ZUN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKG5hbWUsIHZhbHVlcywgdHJ1ZSk7CisKKyAgICBp
ZiAocGFyYW1ldGVyVmFsdWUtPmlzV2ViS2l0Q1NTTWF0RnVuY3Rpb25WYWx1ZSgpKQorICAgICAg
ICByZXR1cm4gcGFyc2VDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcihuYW1lLCB2YWx1ZXMsIGZh
bHNlKTsKKworICAgIC8vIElmIHRoZSBmaXJzdCB2YWx1ZSBvZiB0aGUgbGlzdCBpcyBhIHRyYW5z
Zm9ybSBmdW5jdGlvbiwKKyAgICAvLyB0aGVuIHdlIGNvdWxkIHNhZmVseSBhc3N1bWUgdGhhdCBh
bGwgdGhlIHJlbWFpbmluZyBpdGVtcworICAgIC8vIGFyZSB0cmFuc2Zvcm1zLiBwYXJzZUN1c3Rv
bUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlciB3aWxsCisgICAgLy8gcmV0dXJuIDAgaWYgdGhhdCBh
c3N1bXB0aW9uIGlzIGluY29ycmVjdC4KKyAgICBpZiAodmFsdWVzLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDApLT5pc1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKCkpCisgICAgICAgIHJldHVybiBw
YXJzZUN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcihuYW1lLCB2YWx1ZXMpOworCisgICAg
Ly8gV2UgY2FuIG9ubHkgaGF2ZSBhcnJheXMgb2YgY29sb3JzIG9yIG51bWJlcnMsIHNvIHVzZSB0
aGUgZmlyc3QgdmFsdWUgdG8gY2hvb3NlIGJldHdlZW4gdGhvc2UgdHdvLgorICAgIC8vIFdlIG5l
ZWQgdXAgdG8gNCB2YWx1ZXMgKGFsbCBib29sZWFucyBvciBhbGwgbnVtYmVycykuCisgICAgaWYg
KCF2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCktPmlzUHJpbWl0aXZlVmFsdWUoKSB8
fCB2YWx1ZXMtPmxlbmd0aCgpID4gNCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIGZpcnN0UHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7CisgICAgaWYg
KGZpcnN0UHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUikKKyAgICAgICAgcmV0dXJuIHBhcnNlQ3VzdG9tRmlsdGVyTnVtYmVyUGFy
YW1ldGVyKG5hbWUsIHZhbHVlcyk7CisKKyAgICBpZiAoZmlyc3RQcmltaXRpdmVWYWx1ZS0+cHJp
bWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkdCQ09MT1IpCisgICAgICAg
IHJldHVybiBwYXJzZUN1c3RvbUZpbHRlckNvbG9yUGFyYW1ldGVyKG5hbWUsIHZhbHVlcyk7CisK
KyAgICByZXR1cm4gMDsKK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRl
clBhcmFtZXRlckxpc3QoQ1NTVmFsdWUqIHBhcmFtZXRlcnNWYWx1ZSwgQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdCYgcGFyYW1ldGVyTGlzdCkKK3sKKyAgICBIYXNoU2V0PFN0cmluZz4ga25vd25Q
YXJhbWV0ZXJOYW1lczsKKyAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvciBwYXJhbWV0ZXJJdGVyYXRv
cihwYXJhbWV0ZXJzVmFsdWUpOworICAgIGZvciAoOyBwYXJhbWV0ZXJJdGVyYXRvci5oYXNNb3Jl
KCk7IHBhcmFtZXRlckl0ZXJhdG9yLmFkdmFuY2UoKSkgeworICAgICAgICBpZiAoIXBhcmFtZXRl
ckl0ZXJhdG9yLnZhbHVlKCktPmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGl0ZXJhdG9yKHBhcmFtZXRlckl0ZXJh
dG9yLnZhbHVlKCkpOworICAgICAgICBpZiAoIWl0ZXJhdG9yLmlzUHJpbWl0aXZlVmFsdWUoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVyYXRvci52
YWx1ZSgpKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgIT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICBTdHJpbmcgbmFtZSA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJp
bmdWYWx1ZSgpOworICAgICAgICAvLyBEbyBub3QgYWxsb3cgZHVwbGljYXRlIHBhcmFtZXRlciBu
YW1lcy4KKyAgICAgICAgaWYgKGtub3duUGFyYW1ldGVyTmFtZXMuY29udGFpbnMobmFtZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGtub3duUGFyYW1ldGVyTmFtZXMuYWRk
KG5hbWUpOworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOworICAgICAgICAK
KyAgICAgICAgaWYgKCFpdGVyYXRvci5oYXNNb3JlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJh
bWV0ZXIgPSBwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihuYW1lLCBpdGVyYXRvci52YWx1ZSgp
KTsKKyAgICAgICAgaWYgKCFwYXJhbWV0ZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHBhcmFtZXRlckxpc3QuYXBwZW5kKHBhcmFtZXRlci5yZWxlYXNlKCkpOworICAgIH0K
KyAgICAKKyAgICAvLyBNYWtlIHN1cmUgd2Ugc29ydCB0aGUgcGFyYW1ldGVycyBiZWZvcmUgcGFz
c2luZyB0aGVtIGRvd24gdG8gdGhlIEN1c3RvbUZpbHRlck9wZXJhdGlvbi4KKyAgICBzdGQ6OnNv
cnQocGFyYW1ldGVyTGlzdC5iZWdpbigpLCBwYXJhbWV0ZXJMaXN0LmVuZCgpLCBzb3J0UGFyYW1l
dGVyc0J5TmFtZUNvbXBhcmF0b3IpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitQYXNz
UmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uV2l0aEF0UnVsZVJlZmVyZW5jZVN5bnRheChXZWJLaXRDU1NGaWx0ZXJW
YWx1ZSogZmlsdGVyVmFsdWUpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBzdHlsZSByZXNv
bHV0aW9uIGZvciB0aGUgY3VzdG9tIGZpbHRlciBhdC1ydWxlIHJlZmVyZW5jZSBzeW50YXguCisg
ICAgVU5VU0VEX1BBUkFNKGZpbHRlclZhbHVlKTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1Jl
ZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZp
bHRlck9wZXJhdGlvbldpdGhJbmxpbmVTeW50YXgoV2ViS2l0Q1NTRmlsdGVyVmFsdWUqIGZpbHRl
clZhbHVlKQoreworICAgIENTU1ZhbHVlKiBzaGFkZXJzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihzaGFkZXJzVmFsdWUtPmlzVmFsdWVMaXN0KCkpOworICAgIENTU1ZhbHVlTGlzdCogc2hh
ZGVyc0xpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihzaGFkZXJzVmFsdWUpOworCisg
ICAgdW5zaWduZWQgc2hhZGVyc0xpc3RMZW5ndGggPSBzaGFkZXJzTGlzdC0+bGVuZ3RoKCk7Cisg
ICAgQVNTRVJUKHNoYWRlcnNMaXN0TGVuZ3RoKTsKKworICAgIFdlYktpdENTU1NoYWRlclZhbHVl
KiB2ZXJ0ZXhTaGFkZXIgPSB0b1dlYktpdENTU1NoYWRlclZhbHVlKHNoYWRlcnNMaXN0LT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDApKTsKKyAgICBXZWJLaXRDU1NTaGFkZXJWYWx1ZSogZnJhZ21l
bnRTaGFkZXIgPSAwOworICAgIEN1c3RvbUZpbHRlclByb2dyYW1UeXBlIHByb2dyYW1UeXBlID0g
UFJPR1JBTV9UWVBFX0JMRU5EU19FTEVNRU5UX1RFWFRVUkU7CisgICAgQ3VzdG9tRmlsdGVyUHJv
Z3JhbU1peFNldHRpbmdzIG1peFNldHRpbmdzOworCisgICAgaWYgKHNoYWRlcnNMaXN0TGVuZ3Ro
ID4gMSkgeworICAgICAgICBDU1NWYWx1ZSogZnJhZ21lbnRTaGFkZXJPck1peEZ1bmN0aW9uID0g
c2hhZGVyc0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSk7CisgICAgICAgIGlmIChmcmFn
bWVudFNoYWRlck9yTWl4RnVuY3Rpb24tPmlzV2ViS2l0Q1NTTWl4RnVuY3Rpb25WYWx1ZSgpKSB7
CisgICAgICAgICAgICBXZWJLaXRDU1NNaXhGdW5jdGlvblZhbHVlKiBtaXhGdW5jdGlvbiA9IHN0
YXRpY19jYXN0PFdlYktpdENTU01peEZ1bmN0aW9uVmFsdWUqPihmcmFnbWVudFNoYWRlck9yTWl4
RnVuY3Rpb24pOworICAgICAgICAgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXRlcmF0b3IobWl4
RnVuY3Rpb24pOworCisgICAgICAgICAgICBBU1NFUlQobWl4RnVuY3Rpb24tPmxlbmd0aCgpKTsK
KyAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyID0gdG9XZWJLaXRDU1NTaGFkZXJWYWx1ZShpdGVy
YXRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKKworICAgICAg
ICAgICAgQVNTRVJUKG1peEZ1bmN0aW9uLT5sZW5ndGgoKSA8PSAzKTsKKyAgICAgICAgICAgIHdo
aWxlIChpdGVyYXRvci5oYXNNb3JlKCkpIHsKKyAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0
ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGlmIChDU1NQYXJzZXI6OmlzQmxlbmRN
b2RlKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpKQorICAgICAgICAgICAgICAgICAgICBt
aXhTZXR0aW5ncy5ibGVuZE1vZGUgPSAqcHJpbWl0aXZlVmFsdWU7CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoQ1NTUGFyc2VyOjppc0NvbXBvc2l0ZU9wZXJhdG9yKHByaW1pdGl2ZVZhbHVlLT5n
ZXRWYWx1ZUlEKCkpKQorICAgICAgICAgICAgICAgICAgICBtaXhTZXR0aW5ncy5jb21wb3NpdGVP
cGVyYXRvciA9ICpwcmltaXRpdmVWYWx1ZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGl0ZXJh
dG9yLmFkdmFuY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHByb2dyYW1UeXBlID0gUFJPR1JBTV9UWVBFX05PX0VMRU1FTlRfVEVYVFVSRTsKKyAgICAg
ICAgICAgIGZyYWdtZW50U2hhZGVyID0gdG9XZWJLaXRDU1NTaGFkZXJWYWx1ZShmcmFnbWVudFNo
YWRlck9yTWl4RnVuY3Rpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF2ZXJ0ZXhT
aGFkZXIgJiYgIWZyYWdtZW50U2hhZGVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICB1
bnNpZ25lZCBtZXNoUm93cyA9IDE7CisgICAgdW5zaWduZWQgbWVzaENvbHVtbnMgPSAxOworICAg
IEN1c3RvbUZpbHRlck1lc2hUeXBlIG1lc2hUeXBlID0gTWVzaFR5cGVBdHRhY2hlZDsKKyAgICAK
KyAgICBDU1NWYWx1ZSogcGFyYW1ldGVyc1ZhbHVlID0gMDsKKyAgICAKKyAgICBpZiAoZmlsdGVy
VmFsdWUtPmxlbmd0aCgpID4gMSkgeworICAgICAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvciBpdGVy
YXRvcihmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBUaGUgc2Vjb25kIHZhbHVlIG1pZ2h0IGJlIHRoZSBtZXNoIGJveCBvciB0aGUg
bGlzdCBvZiBwYXJhbWV0ZXJzOgorICAgICAgICAvLyBJZiBpdCBzdGFydHMgd2l0aCBhIG51bWJl
ciBvciBhbnkgb2YgdGhlIG1lc2gtYm94IGlkZW50aWZpZXJzIGl0IGlzIAorICAgICAgICAvLyB0
aGUgbWVzaC1ib3ggbGlzdCwgaWYgbm90IGl0IG1lYW5zIGl0IGlzIHRoZSBwYXJhbWV0ZXJzIGxp
c3QuCisKKyAgICAgICAgaWYgKGl0ZXJhdG9yLmhhc01vcmUoKSAmJiBpdGVyYXRvci5pc1ByaW1p
dGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7
CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBJZiBvbmx5IG9uZSBpbnRlZ2VyIHZhbHVlIGlzIHNwZWNpZmllZCwgaXQgd2ls
bCBzZXQgYm90aAorICAgICAgICAgICAgICAgIC8vIHRoZSByb3dzIGFuZCB0aGUgY29sdW1ucy4K
KyAgICAgICAgICAgICAgICBtZXNoQ29sdW1ucyA9IG1lc2hSb3dzID0gcHJpbWl0aXZlVmFsdWUt
PmdldEludFZhbHVlKCk7CisgICAgICAgICAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRyeSB0byBtYXRjaCBhbm90aGVyIG51
bWJlciBmb3IgdGhlIHJvd3MuCisgICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmhhc01vcmUo
KSAmJiBpdGVyYXRvci5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPihpdGVyYXRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNo
Um93cyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoaXRlcmF0b3IuaGFzTW9yZSgpICYmIGl0ZXJhdG9yLmlzUHJpbWl0aXZlVmFsdWUoKSkgewor
ICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVyYXRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRGV0YWNoZWQpIHsKKyAg
ICAgICAgICAgICAgICBtZXNoVHlwZSA9IE1lc2hUeXBlRGV0YWNoZWQ7CisgICAgICAgICAgICAg
ICAgaXRlcmF0b3IuYWR2YW5jZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoIWl0ZXJhdG9yLmluZGV4KCkpIHsKKyAgICAgICAgICAgIC8vIElmIG5v
IHZhbHVlIHdhcyBjb25zdW1lZCBmcm9tIHRoZSBtZXNoIHZhbHVlLCB0aGVuIGl0IGlzIGp1c3Qg
YSBwYXJhbWV0ZXIgbGlzdCwgbWVhbmluZyB0aGF0IHdlIGVuZCB1cAorICAgICAgICAgICAgLy8g
aGF2aW5nIGp1c3QgdHdvIENTU0xpc3RWYWx1ZXM6IGxpc3Qgb2Ygc2hhZGVycyBhbmQgbGlzdCBv
ZiBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgQVNTRVJUKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9
PSAyKTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnNWYWx1ZSA9IGZpbHRlclZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDEpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChmaWx0
ZXJWYWx1ZS0+bGVuZ3RoKCkgPiAyICYmICFwYXJhbWV0ZXJzVmFsdWUpCisgICAgICAgIHBhcmFt
ZXRlcnNWYWx1ZSA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpOworICAg
IAorICAgIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QgcGFyYW1ldGVyTGlzdDsKKyAgICBpZiAo
cGFyYW1ldGVyc1ZhbHVlICYmICFwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QocGFyYW1l
dGVyc1ZhbHVlLCBwYXJhbWV0ZXJMaXN0KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQ
dHI8Q3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGxvb2t1cEN1c3RvbUZpbHRlclByb2dy
YW0odmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlciwgcHJvZ3JhbVR5cGUsIG1peFNldHRpbmdz
LCBtZXNoVHlwZSk7CisgICAgcmV0dXJuIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKHBy
b2dyYW0ucmVsZWFzZSgpLCBwYXJhbWV0ZXJMaXN0LCBtZXNoUm93cywgbWVzaENvbHVtbnMpOwor
fQorCitQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3Jl
YXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFdlYktpdENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJWYWx1
ZSkKK3sKKyAgICBBU1NFUlQoZmlsdGVyVmFsdWUtPmxlbmd0aCgpKTsKKyAgICBib29sIGlzQXRS
dWxlUmVmZXJlbmNlU3ludGF4ID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MCktPmlzUHJpbWl0aXZlVmFsdWUoKTsKKyAgICByZXR1cm4gaXNBdFJ1bGVSZWZlcmVuY2VTeW50
YXggPyBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoQXRSdWxlUmVmZXJlbmNlU3ludGF4
KGZpbHRlclZhbHVlKSA6IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGhJbmxpbmVTeW50
YXgoZmlsdGVyVmFsdWUpOworfQorCisjZW5kaWYKKworYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVh
dGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMp
Cit7CisgICAgQVNTRVJUKG91dE9wZXJhdGlvbnMuaXNFbXB0eSgpKTsKKyAgICAKKyAgICBpZiAo
IWluVmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoaW5WYWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKSB7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaW5WYWx1ZSk7CisgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoIWluVmFsdWUtPmlz
VmFsdWVMaXN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZsb2F0IHpvb21GYWN0
b3IgPSBzdHlsZSA/IHN0eWxlLT5lZmZlY3RpdmVab29tKCkgOiAxOworICAgIEZpbHRlck9wZXJh
dGlvbnMgb3BlcmF0aW9uczsKKyAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSBpblZh
bHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKKyAgICAgICAgQ1NTVmFsdWUqIGN1cnJW
YWx1ZSA9IGkudmFsdWUoKTsKKyAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzV2ViS2l0Q1NTRmls
dGVyVmFsdWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFdlYktpdENTU0Zp
bHRlclZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PFdlYktpdENTU0ZpbHRlclZhbHVl
Kj4oaS52YWx1ZSgpKTsKKyAgICAgICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvblR5cGUgPSBmaWx0ZXJPcGVyYXRpb25Gb3JUeXBlKGZpbHRlclZhbHVlLT5vcGVyYXRp
b25UeXBlKCkpOworCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBpZiAob3BlcmF0
aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OlZBTElEQVRFRF9DVVNUT00pIHsKKyAgICAgICAg
ICAgIC8vIFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbiBpcyBub3Qgc3VwcG9zZWQgdG8g
ZW5kIHVwIGluIHRoZSBSZW5kZXJTdHlsZS4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wZXJh
dGlvblR5cGUgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKKyAgICAgICAgICAgIFJlZlB0
cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IGNyZWF0ZUN1c3RvbUZpbHRlck9w
ZXJhdGlvbihmaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBpZiAoIW9wZXJhdGlvbikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG9wZXJh
dGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24pOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0
ZXJPcGVyYXRpb246OlJFRkVSRU5DRSkgeworI2lmIEVOQUJMRShTVkcpCisgICAgICAgICAgICBp
ZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpICE9IDEpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBDU1NWYWx1ZSogYXJndW1lbnQgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygwKTsKKworICAgICAgICAgICAgaWYgKCFhcmd1bWVudC0+aXNXZWJLaXRD
U1NTVkdEb2N1bWVudFZhbHVlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHN2Z0RvY3VtZW50VmFsdWUgPSBzdGF0
aWNfY2FzdDxXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKj4oYXJndW1lbnQpOworICAgICAgICAg
ICAgS1VSTCB1cmwgPSBtX3N0YXRlLmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN2Z0RvY3VtZW50
VmFsdWUtPnVybCgpKTsKKworICAgICAgICAgICAgUmVmUHRyPFJlZmVyZW5jZUZpbHRlck9wZXJh
dGlvbj4gb3BlcmF0aW9uID0gUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoc3ZnRG9j
dW1lbnRWYWx1ZS0+dXJsKCksIHVybC5mcmFnbWVudElkZW50aWZpZXIoKSwgb3BlcmF0aW9uVHlw
ZSk7CisgICAgICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjppc0V4dGVybmFsVVJJUmVmZXJl
bmNlKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpLCBtX3N0YXRlLmRvY3VtZW50KCkpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFzdmdEb2N1bWVudFZhbHVlLT5sb2FkUmVxdWVzdGVkKCkpCisgICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLnNldChvcGVyYXRp
b24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN2
Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0RvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbi0+c2V0Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoYWRvcHRQdHIobmV3IENh
Y2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKHN2Z0RvY3VtZW50VmFsdWUtPmNhY2hlZFNWR0RvY3Vt
ZW50KCkpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlv
bnMoKS5hcHBlbmQob3BlcmF0aW9uKTsKKyNlbmRpZgorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayB0aGF0IGFsbCBwYXJhbWV0ZXJzIGFyZSBwcmlt
aXRpdmUgdmFsdWVzLCB3aXRoIHRoZQorICAgICAgICAvLyBleGNlcHRpb24gb2YgZHJvcCBzaGFk
b3cgd2hpY2ggaGFzIGEgU2hhZG93VmFsdWUgcGFyYW1ldGVyLgorICAgICAgICBpZiAob3BlcmF0
aW9uVHlwZSAhPSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XKSB7CisgICAgICAgICAgICBi
b29sIGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IGZpbHRlclZhbHVlLT5sZW5ndGgoKTsgKytqKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhqKS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGhhdmVOb25QcmltaXRpdmVWYWx1
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChoYXZlTm9uUHJpbWl0aXZlVmFsdWUpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogZmlyc3RWYWx1ZSA9IGZpbHRlclZhbHVlLT5sZW5ndGgoKSA/IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4oZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MCkpIDogMDsKKyAgICAgICAgc3dpdGNoIChmaWx0ZXJWYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSB7
CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkdyYXlzY2FsZUZpbHRlck9wZXJh
dGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2VwaWFGaWx0ZXJPcGVy
YXRpb246CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNhdHVyYXRlRmlsdGVy
T3BlcmF0aW9uOiB7CisgICAgICAgICAgICBkb3VibGUgYW1vdW50ID0gMTsKKyAgICAgICAgICAg
IGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMSkgeworICAgICAgICAgICAgICAgIGFtb3Vu
dCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKGZp
cnN0VmFsdWUtPmlzUGVyY2VudGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBhbW91bnQgLz0g
MTAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMo
KS5hcHBlbmQoQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGFtb3VudCwg
b3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SHVlUm90YXRlRmlsdGVyT3BlcmF0aW9uOiB7Cisg
ICAgICAgICAgICBkb3VibGUgYW5nbGUgPSAwOworICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVl
LT5sZW5ndGgoKSA9PSAxKQorICAgICAgICAgICAgICAgIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29t
cHV0ZURlZ3JlZXMoKTsKKworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBw
ZW5kKEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShhbmdsZSwgb3BlcmF0
aW9uVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SW52ZXJ0RmlsdGVyT3BlcmF0aW9uOgorICAgICAgICBjYXNl
IFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOgorICAgICAg
ICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJhdGlvbjoKKyAg
ICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6T3BhY2l0eUZpbHRlck9wZXJhdGlvbjog
eworICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IChmaWx0ZXJWYWx1ZS0+b3BlcmF0aW9uVHlw
ZSgpID09IFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uKSA/
IDAgOiAxOworICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9PSAxKSB7Cisg
ICAgICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgICAg
ICAgICAgICAgIGFtb3VudCAvPSAxMDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uOjpjcmVhdGUoYW1vdW50LCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCbHVy
RmlsdGVyT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBMZW5ndGggc3RkRGV2aWF0aW9uID0gTGVu
Z3RoKDAsIEZpeGVkKTsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPj0g
MSkKKyAgICAgICAgICAgICAgICBzdGREZXZpYXRpb24gPSBjb252ZXJ0VG9GbG9hdExlbmd0aChm
aXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGlm
IChzdGREZXZpYXRpb24uaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChCbHVyRmls
dGVyT3BlcmF0aW9uOjpjcmVhdGUoc3RkRGV2aWF0aW9uLCBvcGVyYXRpb25UeXBlKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZh
bHVlOjpEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOiB7CisgICAgICAgICAgICBpZiAoZmlsdGVy
VmFsdWUtPmxlbmd0aCgpICE9IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgICAgICBDU1NWYWx1ZSogY3NzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygwKTsKKyAgICAgICAgICAgIGlmICghY3NzVmFsdWUtPmlzU2hhZG93VmFsdWUo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgU2hhZG93VmFsdWUq
IGl0ZW0gPSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KGNzc1ZhbHVlKTsKKyAgICAgICAgICAg
IEludFBvaW50IGxvY2F0aW9uKGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9v
dFN0eWxlLCB6b29tRmFjdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0t
PnktPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKSk7Cisg
ICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVu
Z3RoPGludD4oc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3RvcikgOiAwOworICAgICAgICAgICAg
Q29sb3IgY29sb3I7CisgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCisgICAgICAgICAgICAg
ICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CisK
KyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChEcm9wU2hhZG93Rmls
dGVyT3BlcmF0aW9uOjpjcmVhdGUobG9jYXRpb24sIGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNv
bG9yIDogQ29sb3I6OnRyYW5zcGFyZW50LCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpVbmtu
b3duRmlsdGVyT3BlcmF0aW9uOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIG91dE9wZXJhdGlvbnMgPSBvcGVyYXRpb25zOworICAgIHJldHVybiB0cnVlOworfQorCisj
ZW5kaWYKKworUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGlu
Z0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1hZ2UpCit7CisgICAgQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0ZS5kb2N1bWVudCgpLT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpOworCisgICAgaWYgKHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VW
YWx1ZSgpKSB7CisgICAgICAgIENTU0ltYWdlVmFsdWUqIGltYWdlVmFsdWUgPSBwZW5kaW5nSW1h
Z2UtPmNzc0ltYWdlVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGltYWdlVmFsdWUtPmNhY2hlZElt
YWdlKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICB9CisKKyAgICBpZiAocGVuZGluZ0ltYWdl
LT5jc3NJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKKyAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZSogaW1hZ2VHZW5lcmF0b3JWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VHZW5lcmF0
b3JWYWx1ZSgpOworICAgICAgICBpbWFnZUdlbmVyYXRvclZhbHVlLT5sb2FkU3ViaW1hZ2VzKGNh
Y2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICAgICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6
OmNyZWF0ZShpbWFnZUdlbmVyYXRvclZhbHVlKTsKKyAgICB9CisKKyAgICBpZiAocGVuZGluZ0lt
YWdlLT5jc3NDdXJzb3JJbWFnZVZhbHVlKCkpIHsKKyAgICAgICAgQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZSogY3Vyc29ySW1hZ2VWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzQ3Vyc29ySW1hZ2VWYWx1ZSgp
OworICAgICAgICByZXR1cm4gY3Vyc29ySW1hZ2VWYWx1ZS0+Y2FjaGVkSW1hZ2UoY2FjaGVkUmVz
b3VyY2VMb2FkZXIpOworICAgIH0KKworI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQorICAgIGlm
IChwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlU2V0VmFsdWUoKSkgeworICAgICAgICBDU1NJbWFnZVNl
dFZhbHVlKiBpbWFnZVNldFZhbHVlID0gcGVuZGluZ0ltYWdlLT5jc3NJbWFnZVNldFZhbHVlKCk7
CisgICAgICAgIHJldHVybiBpbWFnZVNldFZhbHVlLT5jYWNoZWRJbWFnZVNldChjYWNoZWRSZXNv
dXJjZUxvYWRlcik7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gMDsKK30KKworCisjaWYg
RU5BQkxFKENTU19TSEFQRVMpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhcGVJ
bWFnZShTaGFwZVZhbHVlKiBzaGFwZVZhbHVlKQoreworICAgIGlmICghc2hhcGVWYWx1ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzaGFwZVZhbHVlLT5pbWFn
ZSgpOworICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBTdHlsZVBlbmRpbmdJbWFnZSogcGVuZGluZ0ltYWdlID0gc3RhdGlj
X2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSk7CisgICAgQ1NTSW1hZ2VWYWx1ZSogY3Nz
SW1hZ2VWYWx1ZSA9ICBwZW5kaW5nSW1hZ2UtPmNzc0ltYWdlVmFsdWUoKTsKKyAgICBDYWNoZWRS
ZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX3N0YXRlLmRvY3VtZW50KCkt
PmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CisKKyAgICBSZXNvdXJjZUxvYWRlck9wdGlvbnMgb3B0
aW9ucyA9IENhY2hlZFJlc291cmNlTG9hZGVyOjpkZWZhdWx0Q2FjaGVkUmVzb3VyY2VPcHRpb25z
KCk7CisgICAgb3B0aW9ucy5yZXF1ZXN0T3JpZ2luUG9saWN5ID0gUmVzdHJpY3RUb1NhbWVPcmln
aW47CisKKyAgICBzaGFwZVZhbHVlLT5zZXRJbWFnZShjc3NJbWFnZVZhbHVlLT5jYWNoZWRJbWFn
ZShjYWNoZWRSZXNvdXJjZUxvYWRlciwgb3B0aW9ucykpOworfQorI2VuZGlmCisKK3ZvaWQgU3R5
bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQoreworICAgIGlmIChtX3N0YXRlLnBlbmRp
bmdJbWFnZVByb3BlcnRpZXMoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFBl
bmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBtX3N0YXRl
LnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5lbmQoKS5rZXlzKCk7CisgICAgZm9yIChQZW5kaW5n
SW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBtX3N0YXRlLnBlbmRp
bmdJbWFnZVByb3BlcnRpZXMoKS5iZWdpbigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIENTU1Byb3BlcnR5SUQgY3VycmVudFByb3BlcnR5ID0gKml0OworCisgICAgICAgIHN3
aXRjaCAoY3VycmVudFByb3BlcnR5KSB7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kSW1hZ2U6IHsKKyAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBiYWNrZ3JvdW5kTGF5ZXIg
PSBtX3N0YXRlLnN0eWxlKCktPmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExh
eWVyOyBiYWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkgJiYgYmFja2dyb3VuZExheWVy
LT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAgICAgICAgICAgICAgICBiYWNrZ3Jv
dW5kTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5k
aW5nSW1hZ2UqPihiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCkpKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29u
dGVudDogeworICAgICAgICAgICAgZm9yIChDb250ZW50RGF0YSogY29udGVudERhdGEgPSBjb25z
dF9jYXN0PENvbnRlbnREYXRhKj4obV9zdGF0ZS5zdHlsZSgpLT5jb250ZW50RGF0YSgpKTsgY29u
dGVudERhdGE7IGNvbnRlbnREYXRhID0gY29udGVudERhdGEtPm5leHQoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChjb250ZW50RGF0YS0+aXNJbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IFN0eWxlSW1hZ2UqIGltYWdlID0gc3RhdGljX2Nhc3Q8SW1hZ2VDb250ZW50RGF0YSo+KGNvbnRl
bnREYXRhKS0+aW1hZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT5pc1BlbmRp
bmdJbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4g
bG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0lt
YWdlKj4oaW1hZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkZWRJbWFnZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRh
Kj4oY29udGVudERhdGEpLT5zZXRJbWFnZShsb2FkZWRJbWFnZS5yZWxlYXNlKCkpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUN1cnNvcjog
eworICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0YXRlLnN0eWxl
KCktPmN1cnNvcnMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y3Vyc29yTGlzdC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgQ3Vyc29yRGF0
YSYgY3VycmVudEN1cnNvciA9IGN1cnNvckxpc3QtPmF0KGkpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoU3R5bGVJbWFnZSogaW1hZ2UgPSBjdXJyZW50Q3Vyc29yLmltYWdlKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q3Vyc29yLnNldEltYWdlKGxvYWRQZW5kaW5nSW1h
Z2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFn
ZTogeworICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKSAm
JiBtX3N0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisg
ICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVu
ZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgp
LT5saXN0U3R5bGVJbWFnZSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlOiB7CisgICAgICAgICAgICBp
ZiAobV9zdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpICYmIG1fc3RhdGUuc3R5bGUo
KS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlLnN0eWxlKCktPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uo
c3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxlKCktPmJvcmRlcklt
YWdlU291cmNlKCkpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogeworICAgICAgICAgICAgaWYgKFN0eWxl
UmVmbGVjdGlvbiogcmVmbGVjdGlvbiA9IG1fc3RhdGUuc3R5bGUoKS0+Ym94UmVmbGVjdCgpKSB7
CisgICAgICAgICAgICAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIG1hc2tJbWFnZSA9IHJlZmxl
Y3Rpb24tPm1hc2soKTsKKyAgICAgICAgICAgICAgICBpZiAobWFza0ltYWdlLmltYWdlKCkgJiYg
bWFza0ltYWdlLmltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0
aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tJbWFnZS5pbWFnZSgpKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2soTmluZVBpZWNlSW1hZ2UobG9hZGVkSW1h
Z2UucmVsZWFzZSgpLCBtYXNrSW1hZ2UuaW1hZ2VTbGljZXMoKSwgbWFza0ltYWdlLmZpbGwoKSwg
bWFza0ltYWdlLmJvcmRlclNsaWNlcygpLCBtYXNrSW1hZ2Uub3V0c2V0KCksIG1hc2tJbWFnZS5o
b3Jpem9udGFsUnVsZSgpLCBtYXNrSW1hZ2UudmVydGljYWxSdWxlKCkpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlOiB7CisgICAgICAg
ICAgICBpZiAobV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRl
LnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAg
ICAgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0TWFza0JveEltYWdlU291cmNlKGxvYWRQZW5k
aW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtX3N0YXRlLnN0eWxlKCkt
Pm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZTogeworICAgICAgICAgICAg
Zm9yIChGaWxsTGF5ZXIqIG1hc2tMYXllciA9IG1fc3RhdGUuc3R5bGUoKS0+YWNjZXNzTWFza0xh
eWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1hc2tMYXllci0+aW1hZ2UoKSAmJiBtYXNrTGF5ZXItPmltYWdlKCkt
PmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIG1hc2tMYXllci0+c2V0SW1h
Z2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tM
YXllci0+aW1hZ2UoKSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisjaWYgRU5BQkxFKENTU19TSEFQRVMpCisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRTaGFwZUluc2lkZToKKyAgICAgICAgICAgIGxvYWRQZW5kaW5nU2hhcGVJbWFnZShtX3N0
YXRlLnN0eWxlKCktPnNoYXBlSW5zaWRlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTaGFwZU91dHNpZGU6CisgICAgICAgICAgICBsb2FkUGVu
ZGluZ1NoYXBlSW1hZ2UobV9zdGF0ZS5zdHlsZSgpLT5zaGFwZU91dHNpZGUoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3N0YXRlLnBlbmRpbmdJ
bWFnZVByb3BlcnRpZXMoKS5jbGVhcigpOworfQorCisjaWZuZGVmIE5ERUJVRworc3RhdGljIGJv
b2wgaW5Mb2FkUGVuZGluZ1Jlc291cmNlcyA9IGZhbHNlOworI2VuZGlmCisKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKQoreworICAgIC8vIFdlJ3ZlIHNlZW4gY3Jh
c2hlcyBpbiBhbGwgdGhyZWUgb2YgdGhlIGZ1bmN0aW9ucyBiZWxvdy4gU29tZSBvZiB0aGVtCisg
ICAgLy8gaW5kaWNhdGUgdGhhdCBzdHlsZSgpIGlzIE5VTEwuIFRoaXMgTlVMTCBjaGVjayB3aWxs
IGN1dCBkb3duIG9uIHRvdGFsCisgICAgLy8gY3Jhc2hlcywgd2hpbGUgdGhlIEFTU0VSVCB3aWxs
IGhlbHAgdXMgZmluZCB0aGUgY2F1c2UgaW4gZGVidWcgYnVpbGRzLgorICAgIEFTU0VSVChzdHls
ZSgpKTsKKyAgICBpZiAoIXN0eWxlKCkpCisgICAgICAgIHJldHVybjsKKworI2lmbmRlZiBOREVC
VUcKKyAgICAvLyBSZS1lbnRlcmluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvYmFibHkgbWVhbiB0
cm91YmxlLiBDYXRjaCBpdCBpbiBkZWJ1ZyBidWlsZHMuCisgICAgQVNTRVJUKCFpbkxvYWRQZW5k
aW5nUmVzb3VyY2VzKTsKKyAgICBpbkxvYWRQZW5kaW5nUmVzb3VyY2VzID0gdHJ1ZTsKKyNlbmRp
ZgorCisgICAgLy8gU3RhcnQgbG9hZGluZyBpbWFnZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxl
LgorICAgIGxvYWRQZW5kaW5nSW1hZ2VzKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisg
ICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgc2hhZGVycyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUu
CisgICAgbG9hZFBlbmRpbmdTaGFkZXJzKCk7CisjZW5kaWYKKyAgICAKKyNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCisgICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgU1ZHIERv
Y3VtZW50cyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCisgICAgbG9hZFBlbmRpbmdTVkdEb2N1
bWVudHMoKTsKKyNlbmRpZgorCisjaWZuZGVmIE5ERUJVRworICAgIGluTG9hZFBlbmRpbmdSZXNv
dXJjZXMgPSBmYWxzZTsKKyNlbmRpZgorfQorCitpbmxpbmUgU3R5bGVSZXNvbHZlcjo6TWF0Y2hl
ZFByb3BlcnRpZXM6Ok1hdGNoZWRQcm9wZXJ0aWVzKCkKKyAgICA6IHBvc3NpYmx5UGFkZGVkTWVt
YmVyKDApCit7Cit9CisKK2lubGluZSBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVydGllczo6
fk1hdGNoZWRQcm9wZXJ0aWVzKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlRm9udFNpemVGdW5j
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywzMjk4ICsyNywyMSBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSAi
U3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgogCi0jaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5j
bHVkZSAiQ1NTQm9yZGVySW1hZ2UuaCIKLSNpbmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgi
Ci0jaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0RlZmF1bHRT
dHlsZVNoZWV0cy5oIgotI2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgotI2luY2x1ZGUgIkNT
U0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU0xpbmVCb3hDb250YWluVmFsdWUuaCIKLSNp
bmNsdWRlICJDU1NQYWdlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVz
LmgiCi0jaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTU2VsZWN0b3Iu
aCIKLSNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVJ1bGUu
aCIKLSNpbmNsdWRlICJDU1NTdXBwb3J0c1J1bGUuaCIKLSNpbmNsdWRlICJDU1NUaW1pbmdGdW5j
dGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCi0jaW5jbHVkZSAiQ2FjaGVk
SW1hZ2UuaCIKLSNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiQ29udGVu
dERhdGEuaCIKLSNpbmNsdWRlICJDb250ZXh0RmVhdHVyZXMuaCIKLSNpbmNsdWRlICJDb3VudGVy
LmgiCi0jaW5jbHVkZSAiQ291bnRlckNvbnRlbnQuaCIKLSNpbmNsdWRlICJDdXJzb3JMaXN0Lmgi
Ci0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb24uaCIKLSNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5o
IgotI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cuaCIKLSNpbmNsdWRlICJGb250RmVhdHVyZVZhbHVl
LmgiCi0jaW5jbHVkZSAiRm9udFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJG
cmFtZVNlbGVjdGlvbi5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxE
b2N1bWVudC5oIgotI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRN
TElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxP
cHRHcm91cEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgotI2luY2x1
ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgotI2luY2x1ZGUgIkluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIktleWZyYW1lTGlzdC5oIgotI2luY2x1ZGUg
IkxpbmtIYXNoLmgiCi0jaW5jbHVkZSAiTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmgiCi0jaW5jbHVk
ZSAiTWF0aE1MTmFtZXMuaCIKLSNpbmNsdWRlICJNZWRpYUxpc3QuaCIKLSNpbmNsdWRlICJNZWRp
YVF1ZXJ5RXZhbHVhdG9yLmgiCi0jaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCi0jaW5jbHVk
ZSAiTm9kZVJlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAi
UGFnZVJ1bGVDb2xsZWN0b3IuaCIKLSNpbmNsdWRlICJQYWlyLmgiCi0jaW5jbHVkZSAiUXVvdGVz
RGF0YS5oIgotI2luY2x1ZGUgIlJlY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKLSNp
bmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKLSNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXJUaGVt
ZS5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiUnVsZVNldC5oIgot
I2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgotI2luY2x1ZGUgIlNWR0ZvbnRGYWNl
RWxlbWVudC5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU2VsZWN0
b3JDaGVja2VyRmFzdFBhdGguaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU2hhZG93RGF0YS5oIgotI2luY2x1ZGUgIlNoYWRvd1Jv
b3QuaCIKLSNpbmNsdWRlICJTaGFkb3dWYWx1ZS5oIgotI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1h
Z2UuaCIKLSNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCi0jaW5jbHVkZSAiU3R5bGVQ
ZW5kaW5nSW1hZ2UuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCi0jaW5jbHVkZSAi
U3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIgotI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgotI2luY2x1
ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgotI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgot
I2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCi0jaW5jbHVkZSAiVGV4dC5oIgotI2luY2x1ZGUg
IlRyYW5zZm9ybUZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIK
LSNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgotI2luY2x1ZGUgIlZpZXdwb3J0U3R5
bGVSZXNvbHZlci5oIgotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rU3RhdGUuaCIKLSNpbmNsdWRlICJX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKLSNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NTUmVnaW9uUnVsZS5oIgotI2luY2x1ZGUgIldlYktpdENT
U1RyYW5zZm9ybVZhbHVlLmgiCi0jaW5jbHVkZSAiV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgiCi0j
aW5jbHVkZSAiWE1MTmFtZXMuaCIKLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotI2luY2x1ZGUg
IkZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIldlYktpdENTU0ZpbHRlclZhbHVlLmgiCi0j
ZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotI2luY2x1ZGUgIkNTU0ltYWdlU2V0
VmFsdWUuaCIKLSNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlU2V0LmgiCi0jZW5kaWYKLQotI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRl
ci5oIgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlckNvbG9yUGFyYW1ldGVyLmgiCi0jaW5jbHVkZSAi
Q3VzdG9tRmlsdGVyQ29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyTnVtYmVyUGFy
YW1ldGVyLmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAi
Q3VzdG9tRmlsdGVyUGFyYW1ldGVyLmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbUlu
Zm8uaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIuaCIKLSNpbmNs
dWRlICJTdHlsZUNhY2hlZFNoYWRlci5oIgotI2luY2x1ZGUgIlN0eWxlQ3VzdG9tRmlsdGVyUHJv
Z3JhbS5oIgotI2luY2x1ZGUgIlN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hlLmgiCi0jaW5j
bHVkZSAiU3R5bGVQZW5kaW5nU2hhZGVyLmgiCi0jaW5jbHVkZSAiU3R5bGVTaGFkZXIuaCIKLSNp
bmNsdWRlICJXZWJLaXRDU1NNaXhGdW5jdGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NT
U2hhZGVyVmFsdWUuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0jaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19WQVJJ
QUJMRVMpCi0jaW5jbHVkZSAiQ1NTVmFyaWFibGVWYWx1ZS5oIgotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoREFTSEJPQVJEX1NVUFBPUlQpCi0jaW5jbHVkZSAiRGFzaGJvYXJkUmVnaW9uLmgiCi0jZW5k
aWYKLQotI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotI2luY2x1ZGUgIkhUTUxB
dWRpb0VsZW1lbnQuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJDYWNo
ZWRTVkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgi
Ci0jaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKLSNpbmNsdWRl
ICJXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShWSURF
T19UUkFDSykKLSNpbmNsdWRlICJXZWJWVFRFbGVtZW50LmgiCi0jZW5kaWYKLQotdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwotCi0jZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKLWlmIChpc0lu
aGVyaXQpIHsgXAotICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9wKG1fc3RhdGUucGFyZW50
U3R5bGUoKS0+cHJvcCgpKTsgXAotICAgIHJldHVybjsgXAotfQotCi0jZGVmaW5lIEhBTkRMRV9J
TkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKLUhBTkRMRV9JTkhFUklUKHByb3AsIFBy
b3ApIFwKLWlmIChpc0luaXRpYWwpIHsgXAotICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9w
KFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCi0gICAgcmV0dXJuOyBcCi19Ci0KLVJl
bmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwotCi1pbmxp
bmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCkK
LXsKLSAgICBtX2hhc1VBQXBwZWFyYW5jZSA9IG1fc3R5bGUtPmhhc0FwcGVhcmFuY2UoKTsKLSAg
ICBpZiAobV9oYXNVQUFwcGVhcmFuY2UpIHsKLSAgICAgICAgbV9ib3JkZXJEYXRhID0gbV9zdHls
ZS0+Ym9yZGVyKCk7Ci0gICAgICAgIG1fYmFja2dyb3VuZERhdGEgPSAqbV9zdHlsZS0+YmFja2dy
b3VuZExheWVycygpOwotICAgICAgICBtX2JhY2tncm91bmRDb2xvciA9IG1fc3R5bGUtPmJhY2tn
cm91bmRDb2xvcigpOwotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OmNsZWFyKCkKLXsKLSAgICBtX2VsZW1lbnQgPSAwOwotICAgIG1fc3R5bGVkRWxlbWVudCA9
IDA7Ci0gICAgbV9wYXJlbnRTdHlsZSA9IDA7Ci0gICAgbV9wYXJlbnROb2RlID0gMDsKLSAgICBt
X3JlZ2lvbkZvclN0eWxpbmcgPSAwOwotICAgIG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5jbGVh
cigpOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBtX2hhc1BlbmRpbmdTaGFkZXJzID0g
ZmFsc2U7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCi0g
ICAgbV9wZW5kaW5nU1ZHRG9jdW1lbnRzLmNsZWFyKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBTdHls
ZVJlc29sdmVyOjpNYXRjaFJlc3VsdDo6YWRkTWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgU3R5bGVQ
cm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBsaW5rTWF0
Y2hUeXBlLCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVydHlXaGl0ZWxpc3RUeXBlKQotewot
ICAgIG1hdGNoZWRQcm9wZXJ0aWVzLmdyb3cobWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpICsgMSk7
Ci0gICAgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIG5ld1Byb3BlcnRpZXMgPSBt
YXRjaGVkUHJvcGVydGllcy5sYXN0KCk7Ci0gICAgbmV3UHJvcGVydGllcy5wcm9wZXJ0aWVzID0g
Y29uc3RfY2FzdDxTdHlsZVByb3BlcnR5U2V0Kj4ocHJvcGVydGllcyk7Ci0gICAgbmV3UHJvcGVy
dGllcy5saW5rTWF0Y2hUeXBlID0gbGlua01hdGNoVHlwZTsKLSAgICBuZXdQcm9wZXJ0aWVzLndo
aXRlbGlzdFR5cGUgPSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGU7Ci0gICAgbWF0Y2hlZFJ1bGVzLmFw
cGVuZChydWxlKTsKLX0KLQotU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgIDogbV9tYXRjaGVk
UHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VMYXN0U3dlZXAoMCkKLSAgICAsIG1fbWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZVN3ZWVwVGltZXIodGhpcywgJlN0eWxlUmVzb2x2ZXI6OnN3ZWVwTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZSkKLSAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAgLCBt
X21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyhtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAg
LCBtX2ZvbnRTZWxlY3RvcihDU1NGb250U2VsZWN0b3I6OmNyZWF0ZShkb2N1bWVudCkpCi0jaWYg
RU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKLSAgICAsIG1fdmlld3BvcnRTdHlsZVJlc29s
dmVyKFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6Y3JlYXRlKGRvY3VtZW50KSkKLSNlbmRpZgotICAg
ICwgbV9kZXByZWNhdGVkU3R5bGVCdWlsZGVyKERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXI6OnNoYXJl
ZFN0eWxlQnVpbGRlcigpKQotICAgICwgbV9zdHlsZU1hcCh0aGlzKQotewotICAgIEVsZW1lbnQq
IHJvb3QgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0KLSAgICBDU1NEZWZhdWx0U3R5
bGVTaGVldHM6OmluaXREZWZhdWx0U3R5bGUocm9vdCk7Ci0KLSAgICAvLyBjb25zdHJ1Y3QgZG9j
dW1lbnQgcm9vdCBlbGVtZW50IGRlZmF1bHQgc3R5bGUuIHRoaXMgaXMgbmVlZGVkCi0gICAgLy8g
dG8gZXZhbHVhdGUgbWVkaWEgcXVlcmllcyB0aGF0IGNvbnRhaW4gcmVsYXRpdmUgY29uc3RyYWlu
dHMsIGxpa2UgInNjcmVlbiBhbmQgKG1heC13aWR0aDogMTBlbSkiCi0gICAgLy8gVGhpcyBpcyBo
ZXJlIGluc3RlYWQgb2YgY29uc3RydWN0b3IsIGJlY2F1c2Ugd2hlbiBjb25zdHJ1Y3RvciBpcyBy
dW4sCi0gICAgLy8gZG9jdW1lbnQgZG9lc24ndCBoYXZlIGRvY3VtZW50RWxlbWVudAotICAgIC8v
IE5PVEU6IHRoaXMgYXNzdW1lcyB0aGF0IGVsZW1lbnQgdGhhdCBnZXRzIHBhc3NlZCB0byBzdHls
ZUZvckVsZW1lbnQgLWNhbGwKLSAgICAvLyBpcyBhbHdheXMgZnJvbSB0aGUgZG9jdW1lbnQgdGhh
dCBvd25zIHRoZSBzdHlsZSBzZWxlY3RvcgotICAgIEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50
LT52aWV3KCk7Ci0gICAgaWYgKHZpZXcpCi0gICAgICAgIG1fbWVkaXVtID0gYWRvcHRQdHIobmV3
IE1lZGlhUXVlcnlFdmFsdWF0b3Iodmlldy0+bWVkaWFUeXBlKCkpKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fbWVkaXVtID0gYWRvcHRQdHIobmV3IE1lZGlhUXVlcnlFdmFsdWF0b3IoImFsbCIpKTsK
LQotICAgIGlmIChyb290KQotICAgICAgICBtX3Jvb3REZWZhdWx0U3R5bGUgPSBzdHlsZUZvckVs
ZW1lbnQocm9vdCwgMCwgRGlzYWxsb3dTdHlsZVNoYXJpbmcsIE1hdGNoT25seVVzZXJBZ2VudFJ1
bGVzKTsKLQotICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5bGUgJiYgdmlldykKLSAgICAgICAgbV9t
ZWRpdW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcih2aWV3LT5tZWRpYVR5cGUo
KSwgdmlldy0+ZnJhbWUoKSwgbV9yb290RGVmYXVsdFN0eWxlLmdldCgpKSk7Ci0KLSAgICBtX3J1
bGVTZXRzLnJlc2V0QXV0aG9yU3R5bGUoKTsKLQotICAgIERvY3VtZW50U3R5bGVTaGVldENvbGxl
Y3Rpb24qIHN0eWxlU2hlZXRDb2xsZWN0aW9uID0gZG9jdW1lbnQtPnN0eWxlU2hlZXRDb2xsZWN0
aW9uKCk7Ci0gICAgbV9ydWxlU2V0cy5pbml0VXNlclN0eWxlKHN0eWxlU2hlZXRDb2xsZWN0aW9u
LCAqbV9tZWRpdW0sICp0aGlzKTsKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKGRv
Y3VtZW50LT5zdmdFeHRlbnNpb25zKCkpIHsKLSAgICAgICAgY29uc3QgSGFzaFNldDxTVkdGb250
RmFjZUVsZW1lbnQqPiYgc3ZnRm9udEZhY2VFbGVtZW50cyA9IGRvY3VtZW50LT5zdmdFeHRlbnNp
b25zKCktPnN2Z0ZvbnRGYWNlRWxlbWVudHMoKTsKLSAgICAgICAgSGFzaFNldDxTVkdGb250RmFj
ZUVsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3ZnRm9udEZhY2VFbGVtZW50cy5lbmQo
KTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFNWR0ZvbnRGYWNlRWxlbWVudCo+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IHN2Z0ZvbnRGYWNlRWxlbWVudHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICAgICAgZm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZSgoKml0KS0+Zm9udEZh
Y2VSdWxlKCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMo
MCwgc3R5bGVTaGVldENvbGxlY3Rpb24tPmFjdGl2ZUF1dGhvclN0eWxlU2hlZXRzKCkpOwotfQot
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHVuc2lnbmVkIGZp
cnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHN0eWxlU2hlZXRz
KQotewotICAgIG1fcnVsZVNldHMuYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoZmlyc3ROZXcsIHN0
eWxlU2hlZXRzLCBtX21lZGl1bS5nZXQoKSwgbV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzLCBkb2N1
bWVudCgpLT5pc1ZpZXdTb3VyY2UoKSwgdGhpcyk7Ci0gICAgaWYgKGRvY3VtZW50KCktPnJlbmRl
cmVyKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKSkKLSAgICAgICAgZG9jdW1l
bnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7
Ci0KLSNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQotICAgIHZpZXdwb3J0U3R5bGVS
ZXNvbHZlcigpLT5yZXNvbHZlKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpw
dXNoUGFyZW50RWxlbWVudChFbGVtZW50KiBwYXJlbnQpCi17Ci0gICAgY29uc3QgQ29udGFpbmVy
Tm9kZSogcGFyZW50c1BhcmVudCA9IHBhcmVudC0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgp
OwotCi0gICAgLy8gV2UgYXJlIG5vdCBhbHdheXMgaW52b2tlZCBjb25zaXN0ZW50bHkuIEZvciBl
eGFtcGxlLCBzY3JpcHQgZXhlY3V0aW9uIGNhbiBjYXVzZSB1cyB0byBlbnRlcgotICAgIC8vIHN0
eWxlIHJlY2FsYyBpbiB0aGUgbWlkZGxlIG9mIHRyZWUgYnVpbGRpbmcuIFdlIG1heSBhbHNvIGJl
IGludm9rZWQgZnJvbSBzb21ld2hlcmUgd2l0aGluIHRoZSB0cmVlLgotICAgIC8vIFJlc2V0IHRo
ZSBzdGFjayBpbiB0aGlzIGNhc2UsIG9yIGlmIHdlIHNlZSBhIG5ldyByb290IGVsZW1lbnQuCi0g
ICAgLy8gT3RoZXJ3aXNlIGp1c3QgcHVzaCB0aGUgbmV3IHBhcmVudC4KLSAgICBpZiAoIXBhcmVu
dHNQYXJlbnQgfHwgbV9zZWxlY3RvckZpbHRlci5wYXJlbnRTdGFja0lzRW1wdHkoKSkKLSAgICAg
ICAgbV9zZWxlY3RvckZpbHRlci5zZXR1cFBhcmVudFN0YWNrKHBhcmVudCk7Ci0gICAgZWxzZQot
ICAgICAgICBtX3NlbGVjdG9yRmlsdGVyLnB1c2hQYXJlbnQocGFyZW50KTsKLQotICAgIC8vIE5v
dGU6IFdlIG11c3RuJ3Qgc2tpcCBTaGFkb3dSb290IG5vZGVzIGZvciB0aGUgc2NvcGUgc3RhY2su
Ci0gICAgaWYgKG1fc2NvcGVSZXNvbHZlcikKLSAgICAgICAgbV9zY29wZVJlc29sdmVyLT5wdXNo
KHBhcmVudCwgcGFyZW50LT5wYXJlbnRPclNoYWRvd0hvc3ROb2RlKCkpOwotfQotCi12b2lkIFN0
eWxlUmVzb2x2ZXI6OnBvcFBhcmVudEVsZW1lbnQoRWxlbWVudCogcGFyZW50KQotewotICAgIC8v
IE5vdGUgdGhhdCB3ZSBtYXkgZ2V0IGludm9rZWQgZm9yIHNvbWUgcmFuZG9tIGVsZW1lbnRzIGlu
IHNvbWUgd2Fja3kgY2FzZXMgZHVyaW5nIHN0eWxlIHJlc29sdmUuCi0gICAgLy8gUGF1c2UgbWFp
bnRhaW5pbmcgdGhlIHN0YWNrIGluIHRoaXMgY2FzZS4KLSAgICBpZiAobV9zZWxlY3RvckZpbHRl
ci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChwYXJlbnQpKQotICAgICAgICBtX3NlbGVjdG9yRmls
dGVyLnBvcFBhcmVudCgpOwotICAgIGlmIChtX3Njb3BlUmVzb2x2ZXIpCi0gICAgICAgIG1fc2Nv
cGVSZXNvbHZlci0+cG9wKHBhcmVudCk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6cHVzaFBh
cmVudFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCkKLXsKLSAgICBBU1NF
UlQoc2hhZG93Um9vdC0+aG9zdCgpKTsKLSAgICBpZiAobV9zY29wZVJlc29sdmVyKQotICAgICAg
ICBtX3Njb3BlUmVzb2x2ZXItPnB1c2goc2hhZG93Um9vdCwgc2hhZG93Um9vdC0+aG9zdCgpKTsK
LX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpwb3BQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRv
d1Jvb3QqIHNoYWRvd1Jvb3QpCi17Ci0gICAgQVNTRVJUKHNoYWRvd1Jvb3QtPmhvc3QoKSk7Ci0g
ICAgaWYgKG1fc2NvcGVSZXNvbHZlcikKLSAgICAgICAgbV9zY29wZVJlc29sdmVyLT5wb3Aoc2hh
ZG93Um9vdCk7Ci19Ci0KLS8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHN0eWxlIHNldHRpbmcgZnVu
Y3Rpb24gZm9yIGtleWZyYW1lIHN0eWxlcwotdm9pZCBTdHlsZVJlc29sdmVyOjphZGRLZXlmcmFt
ZVN0eWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPiBydWxlKQotewotICAgIEF0b21p
Y1N0cmluZyBzKHJ1bGUtPm5hbWUoKSk7Ci0gICAgbV9rZXlmcmFtZXNSdWxlTWFwLnNldChzLmlt
cGwoKSwgcnVsZSk7Ci19Ci0KLVN0eWxlUmVzb2x2ZXI6On5TdHlsZVJlc29sdmVyKCkKLXsKLSAg
ICBtX2ZvbnRTZWxlY3Rvci0+Y2xlYXJEb2N1bWVudCgpOwotCi0jaWYgRU5BQkxFKENTU19ERVZJ
Q0VfQURBUFRBVElPTikKLSAgICBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlci0+Y2xlYXJEb2N1bWVu
dCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVy
dGllc0NhY2hlKFRpbWVyPFN0eWxlUmVzb2x2ZXI+KikKLXsKLSAgICAvLyBMb29rIGZvciBjYWNo
ZSBlbnRyaWVzIGNvbnRhaW5pbmcgYSBzdHlsZSBkZWNsYXJhdGlvbiB3aXRoIGEgc2luZ2xlIHJl
ZiBhbmQgcmVtb3ZlIHRoZW0uCi0gICAgLy8gVGhpcyBtYXkgaGFwcGVuIHdoZW4gYW4gZWxlbWVu
dCBhdHRyaWJ1dGUgbXV0YXRpb24gY2F1c2VzIGl0IHRvIGdlbmVyYXRlIGEgbmV3IGlubGluZVN0
eWxlKCkKLSAgICAvLyBvciBwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpLCBwb3RlbnRpYWxs
eSBsZWF2aW5nIHRoaXMgY2FjaGUgd2l0aCB0aGUgbGFzdCByZWYgb24gdGhlIG9sZCBvbmUuCi0g
ICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gdG9SZW1vdmU7Ci0gICAgTWF0Y2hlZFByb3BlcnRpZXND
YWNoZTo6aXRlcmF0b3IgaXQgPSBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUuYmVnaW4oKTsKLSAg
ICBNYXRjaGVkUHJvcGVydGllc0NhY2hlOjppdGVyYXRvciBlbmQgPSBtX21hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUuZW5kKCk7Ci0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBW
ZWN0b3I8TWF0Y2hlZFByb3BlcnRpZXM+JiBtYXRjaGVkUHJvcGVydGllcyA9IGl0LT52YWx1ZS5t
YXRjaGVkUHJvcGVydGllczsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXRjaGVk
UHJvcGVydGllcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG1hdGNoZWRQcm9wZXJ0
aWVzW2ldLnByb3BlcnRpZXMtPmhhc09uZVJlZigpKSB7Ci0gICAgICAgICAgICAgICAgdG9SZW1v
dmUuYXBwZW5kKGl0LT5rZXkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG9SZW1vdmUu
c2l6ZSgpOyArK2kpCi0gICAgICAgIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZS5yZW1vdmUodG9S
ZW1vdmVbaV0pOwotCi0gICAgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlQWRkaXRpb25zU2luY2VM
YXN0U3dlZXAgPSAwOwotfQotCi1pbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJp
bmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkKLXsKLSNpZiBFTkFCTEUoU0hBRE9XX0RPTSkK
LSAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1fc2NvcGVSZXNvbHZlci0+c3R5bGVTaGFy
aW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhtX3N0YXRlLmVsZW1lbnQoKSk7Ci0jZWxzZQot
ICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNsYXNz
TmFtZXNBZmZlY3RlZEJ5UnVsZXMoY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NOYW1lcykg
Y29uc3QKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAobV9ydWxlU2V0cy5mZWF0dXJlcygpLmNsYXNzZXNJblJ1bGVz
LmNvbnRhaW5zKGNsYXNzTmFtZXNbaV0uaW1wbCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2
ZXI6OlN0YXRlOjppbml0RWxlbWVudChFbGVtZW50KiBlKQotewotICAgIG1fZWxlbWVudCA9IGU7
Ci0gICAgbV9zdHlsZWRFbGVtZW50ID0gZSAmJiBlLT5pc1N0eWxlZEVsZW1lbnQoKSA/IHN0YXRp
Y19jYXN0PFN0eWxlZEVsZW1lbnQqPihlKSA6IDA7Ci0gICAgbV9lbGVtZW50TGlua1N0YXRlID0g
ZSA/IGUtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rU3RhdGUoKS0+ZGV0ZXJtaW5lTGlua1N0YXRl
KGUpIDogTm90SW5zaWRlTGluazsKLX0KLQotaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5p
dEVsZW1lbnQoRWxlbWVudCogZSkKLXsKLSAgICBpZiAobV9zdGF0ZS5lbGVtZW50KCkgIT0gZSkg
ewotICAgICAgICBtX3N0YXRlLmluaXRFbGVtZW50KGUpOwotICAgICAgICBpZiAoZSAmJiBlID09
IGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBlLT5kb2N1
bWVudCgpLT5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7Ci0gICAgICAg
ICAgICBlLT5kb2N1bWVudCgpLT5zZXRXcml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50KGZh
bHNlKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6
U3RhdGU6OmluaXRGb3JTdHlsZVJlc29sdmUoRG9jdW1lbnQqIGRvY3VtZW50LCBFbGVtZW50KiBl
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGlu
ZykKLXsKLSAgICBtX3JlZ2lvbkZvclN0eWxpbmcgPSByZWdpb25Gb3JTdHlsaW5nOwotCi0gICAg
aWYgKGUpIHsKLSAgICAgICAgTm9kZVJlbmRlcmluZ0NvbnRleHQgY29udGV4dChlKTsKLSAgICAg
ICAgbV9wYXJlbnROb2RlID0gY29udGV4dC5wYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUo
KTsKLSAgICAgICAgbV9wYXJlbnRTdHlsZSA9IGNvbnRleHQucmVzZXRTdHlsZUluaGVyaXRhbmNl
KCkgPyAwIDoKLSAgICAgICAgICAgIHBhcmVudFN0eWxlID8gcGFyZW50U3R5bGUgOgotICAgICAg
ICAgICAgbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMDsKLSAg
ICAgICAgbV9kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQgPSBjb250ZXh0Lmluc2VydGlvblBv
aW50KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9wYXJlbnROb2RlID0gMDsKLSAgICAgICAg
bV9wYXJlbnRTdHlsZSA9IHBhcmVudFN0eWxlOwotICAgICAgICBtX2Rpc3RyaWJ1dGVkVG9JbnNl
cnRpb25Qb2ludCA9IGZhbHNlOwotICAgIH0KLQotICAgIE5vZGUqIGRvY0VsZW1lbnQgPSBlID8g
ZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgOiAwOwotICAgIFJlbmRlclN0eWxlKiBk
b2NTdHlsZSA9IGRvY3VtZW50LT5yZW5kZXJTdHlsZSgpOwotICAgIG1fcm9vdEVsZW1lbnRTdHls
ZSA9IGRvY0VsZW1lbnQgJiYgZSAhPSBkb2NFbGVtZW50ID8gZG9jRWxlbWVudC0+cmVuZGVyU3R5
bGUoKSA6IGRvY1N0eWxlOwotCi0gICAgbV9zdHlsZSA9IDA7Ci0gICAgbV9wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzLmNsZWFyKCk7Ci0gICAgbV9mb250RGlydHkgPSBmYWxzZTsKLX0KLQotc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGNTdHlsZVNlYXJjaFRocmVzaG9sZCA9IDEwOwotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGNTdHlsZVNlYXJjaExldmVsVGhyZXNob2xkID0gMTA7Ci0KLXN0YXRpYyBpbmxp
bmUgYm9vbCBwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKGNvbnN0IEVsZW1lbnQqIHBhcmVu
dEVsZW1lbnQpCi17Ci0gICAgaWYgKCFwYXJlbnRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIHBhcmVudEVsZW1lbnQtPmhhc0ZsYWdzU2V0RHVyaW5nU3R5bGluZ09m
Q2hpbGRyZW4oKTsKLX0KLQotTm9kZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlQ291c2luTGlzdChF
bGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdAotewotICAg
IGlmICh2aXNpdGVkTm9kZUNvdW50ID49IGNTdHlsZVNlYXJjaFRocmVzaG9sZCAqIGNTdHlsZVNl
YXJjaExldmVsVGhyZXNob2xkKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIXBhcmVudCB8
fCAhcGFyZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYg
KHBhcmVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgU3R5bGVkRWxlbWVudCogcCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihwYXJlbnQp
OwotICAgIGlmIChwLT5pbmxpbmVTdHlsZSgpKQotICAgICAgICByZXR1cm4gMDsKLSNpZiBFTkFC
TEUoU1ZHKQotICAgIGlmIChwLT5pc1NWR0VsZW1lbnQoKSAmJiB0b1NWR0VsZW1lbnQocCktPmFu
aW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQotICAgICAgICByZXR1cm4gMDsKLSNlbmRpZgot
ICAgIGlmIChwLT5oYXNJRCgpICYmIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5pZHNJblJ1bGVzLmNv
bnRhaW5zKHAtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBwLT5yZW5kZXJTdHlsZSgpOwot
ICAgIHVuc2lnbmVkIHN1YmNvdW50ID0gMDsKLSAgICBOb2RlKiB0aGlzQ291c2luID0gcDsKLSAg
ICBOb2RlKiBjdXJyZW50Tm9kZSA9IHAtPnByZXZpb3VzU2libGluZygpOwotCi0gICAgLy8gUmVz
ZXJ2ZSB0aGUgdHJpZXMgZm9yIHRoaXMgbGV2ZWwuIFRoaXMgZWZmZWN0aXZlbHkgbWFrZXMgc3Vy
ZSB0aGF0IHRoZSBhbGdvcml0aG0KLSAgICAvLyB3aWxsIG5ldmVyIGdvIGRlZXBlciB0aGFuIGNT
dHlsZVNlYXJjaExldmVsVGhyZXNob2xkIGxldmVscyBpbnRvIHJlY3Vyc2lvbi4KLSAgICB2aXNp
dGVkTm9kZUNvdW50ICs9IGNTdHlsZVNlYXJjaFRocmVzaG9sZDsKLSAgICB3aGlsZSAodGhpc0Nv
dXNpbikgewotICAgICAgICB3aGlsZSAoY3VycmVudE5vZGUpIHsKLSAgICAgICAgICAgICsrc3Vi
Y291bnQ7Ci0gICAgICAgICAgICBpZiAoY3VycmVudE5vZGUtPnJlbmRlclN0eWxlKCkgPT0gcGFy
ZW50U3R5bGUgJiYgY3VycmVudE5vZGUtPmxhc3RDaGlsZCgpCi0gICAgICAgICAgICAgICAgJiYg
Y3VycmVudE5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiAhcGFyZW50RWxlbWVudFByZXZlbnRzU2hh
cmluZyh0b0VsZW1lbnQoY3VycmVudE5vZGUpKQotI2lmIEVOQUJMRShTSEFET1dfRE9NKQotICAg
ICAgICAgICAgICAgICYmICF0b0VsZW1lbnQoY3VycmVudE5vZGUpLT5zaGFkb3coKQotI2VuZGlm
Ci0gICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgLy8gQWRqdXN0IGZvciB1bnVz
ZWQgcmVzZXJ2ZWQgdHJpZXMuCi0gICAgICAgICAgICAgICAgdmlzaXRlZE5vZGVDb3VudCAtPSBj
U3R5bGVTZWFyY2hUaHJlc2hvbGQgLSBzdWJjb3VudDsKLSAgICAgICAgICAgICAgICByZXR1cm4g
Y3VycmVudE5vZGUtPmxhc3RDaGlsZCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KHN1YmNvdW50ID49IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnByZXZpb3VzU2li
bGluZygpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnJlbnROb2RlID0gbG9jYXRlQ291c2luTGlz
dCh0aGlzQ291c2luLT5wYXJlbnRFbGVtZW50KCksIHZpc2l0ZWROb2RlQ291bnQpOwotICAgICAg
ICB0aGlzQ291c2luID0gY3VycmVudE5vZGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LWJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQo
UnVsZVNldCogcnVsZVNldCkKLXsKLSAgICBpZiAoIXJ1bGVTZXQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yIGNvbGxlY3Rvcih0aGlzLCBtX3N0YXRl
KTsKLSAgICByZXR1cm4gY29sbGVjdG9yLmhhc0FueU1hdGNoaW5nUnVsZXMocnVsZVNldCk7Ci19
Ci0KLWJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxlZEVs
ZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0
ZTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9J
bnB1dEVsZW1lbnQoKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9
IHN0YXRlLmVsZW1lbnQoKS0+dG9JbnB1dEVsZW1lbnQoKTsKLQotICAgIGlmICghdGhpc0lucHV0
RWxlbWVudCB8fCAhb3RoZXJJbnB1dEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5lbGVtZW50RGF0YSgpICE9IG90aGVySW5wdXRFbGVt
ZW50LT5lbGVtZW50RGF0YSgpKSB7Ci0gICAgICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5mYXN0
R2V0QXR0cmlidXRlKHR5cGVBdHRyKSAhPSBvdGhlcklucHV0RWxlbWVudC0+ZmFzdEdldEF0dHJp
YnV0ZSh0eXBlQXR0cikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0
aGlzSW5wdXRFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikgIT0gb3RoZXJJ
bnB1dEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+aXNBdXRv
ZmlsbGVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmlzQXV0b2ZpbGxlZCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNr
ZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhcklu
ZGV0ZXJtaW5hdGUoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFySW5kZXRlcm1p
bmF0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQt
PmlzUmVxdWlyZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNSZXF1aXJlZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZWxlbWVudC0+aXNEaXNhYmxlZEZvcm1Db250cm9s
KCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0o
KSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0YXRlLmRvY3VtZW50KCktPmNvbnRhaW5zVmFsaWRp
dHlTdHlsZVJ1bGVzKCkpIHsKLSAgICAgICAgYm9vbCB3aWxsVmFsaWRhdGUgPSBlbGVtZW50LT53
aWxsVmFsaWRhdGUoKTsKLQotICAgICAgICBpZiAod2lsbFZhbGlkYXRlICE9IHN0YXRlLmVsZW1l
bnQoKS0+d2lsbFZhbGlkYXRlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgaWYgKHdpbGxWYWxpZGF0ZSAmJiAoZWxlbWVudC0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVu
dCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoZWxlbWVudC0+aXNJblJhbmdl
KCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0luUmFuZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBpZiAoZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkgIT0gc3RhdGUuZWxl
bWVudCgpLT5pc091dE9mUmFuZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRIYXNE
aXJlY3Rpb25BdXRvKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgbGlu
ZSBpcyBzdXJwcmlzaW5nbHkgaG90LCB3ZSBtYXkgd2lzaCB0byBpbmxpbmUgaGFzRGlyZWN0aW9u
QXV0byBpbnRvIFN0eWxlUmVzb2x2ZXIuCi0gICAgcmV0dXJuIGVsZW1lbnQtPmlzSFRNTEVsZW1l
bnQoKSAmJiB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5oYXNEaXJlY3Rpb25BdXRvKCk7Ci19Ci0K
LWJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZm
ZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVtZW50KiBzaGFyaW5nQ2FuZGlkYXRlKSBjb25zdAot
ewotICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0gICAgaWYgKHN0YXRlLmVsZW1l
bnQoKS0+ZWxlbWVudERhdGEoKSA9PSBzaGFyaW5nQ2FuZGlkYXRlLT5lbGVtZW50RGF0YSgpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5mYXN0R2V0QXR0
cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZmFzdEdldEF0
dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKHN0YXRlLmVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikgIT0gc2hhcmlu
Z0NhbmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmICghc3RhdGUuZWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKCkpIHsK
LSAgICAgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUtPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0Fm
ZmVjdGVkQnlSdWxlcyhzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAoc2hhcmluZ0NhbmRpZGF0ZS0+aGFzQ2xh
c3MoKSkgewotI2lmIEVOQUJMRShTVkcpCi0gICAgICAgIC8vIFNWRyBlbGVtZW50cyByZXF1aXJl
IGEgKHNsb3chKSBnZXRBdHRyaWJ1dGUgY29tcGFyaXNpb24gYmVjYXVzZSAiY2xhc3MiIGlzIGFu
IGFuaW1hdGFibGUgYXR0cmlidXRlIGZvciBTVkcuCi0gICAgICAgIGlmIChzdGF0ZS5lbGVtZW50
KCktPmlzU1ZHRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5nZXRBdHRyaWJ1dGUo
Y2xhc3NBdHRyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmNsYXNzTmFtZXMo
KSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotI2lmIEVOQUJMRShTVkcpCi0gICAgICAgIH0KLSNlbmRpZgotICAgIH0gZWxz
ZQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgp
LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVO
QUJMRShQUk9HUkVTU19FTEVNRU5UKQotICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmhhc1RhZ05h
bWUocHJvZ3Jlc3NUYWcpKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPnNob3VsZEFw
cGVhckluZGV0ZXJtaW5hdGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5zaG91bGRBcHBlYXJJbmRl
dGVybWluYXRlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotI2VuZGlmCi0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxl
V2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwotICAgIGNvbnN0IFN0YXRlJiBz
dGF0ZSA9IG1fc3RhdGU7Ci0KLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKHN0eWxlLT51bmlxdWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChzdHlsZS0+aGFzVW5pcXVlUHNldWRvU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+dGFnUU5hbWUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5pbmxpbmVTdHlsZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPm5lZWRzU3R5bGVSZWNh
bGMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKGVs
ZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmIHRvU1ZHRWxlbWVudChlbGVtZW50KS0+YW5pbWF0ZWRT
TUlMU3R5bGVQcm9wZXJ0aWVzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotICAg
IGlmIChlbGVtZW50LT5pc0xpbmsoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzTGluaygpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSAhPSBzdGF0ZS5l
bGVtZW50KCktPmhvdmVyZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVt
ZW50LT5hY3RpdmUoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmFjdGl2ZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZvY3VzZWQoKSAhPSBzdGF0ZS5lbGVtZW50KCkt
PmZvY3VzZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5zaGFk
b3dQc2V1ZG9JZCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+c2hhZG93UHNldWRvSWQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCkt
PmNzc1RhcmdldCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFzaGFyaW5nQ2Fu
ZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKGVsZW1lbnQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRp
b25BdHRyaWJ1dGVTdHlsZSgpICE9IHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+YWRkaXRpb25hbFBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChlbGVtZW50LT5oYXNJRCgpICYmIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5pZHNJblJ1bGVz
LmNvbnRhaW5zKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGls
ZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNo
YXJlIHN0eWxlIGZvciBvcHRpb24gYW5kIG9wdGdyb3VwIHdoZW5ldmVyIHBvc3NpYmxlLgotICAg
IC8vIEJlZm9yZSBkb2luZyBzbywgd2UgbmVlZCB0byByZXNvbHZlIGlzc3VlcyBpbiBIVE1MU2Vs
ZWN0RWxlbWVudDo6cmVjYWxjTGlzdEl0ZW1zCi0gICAgLy8gYW5kIFJlbmRlck1lbnVMaXN0Ojpz
ZXRUZXh0LiBTZWUgYWxzbyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODg0MDUKLSAgICBpZiAoaXNIVE1MT3B0aW9uRWxlbWVudChlbGVtZW50KSB8fCBpc0hUTUxPcHRH
cm91cEVsZW1lbnQoZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wg
aXNDb250cm9sID0gZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKTsKLQotICAgIGlmIChp
c0NvbnRyb2wgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaXNDb250cm9sICYmICFjYW5TaGFyZVN0eWxl
V2l0aENvbnRyb2woZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChz
dHlsZS0+dHJhbnNpdGlvbnMoKSB8fCBzdHlsZS0+YW5pbWF0aW9ucygpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgLy8gVHVy
biBvZmYgc3R5bGUgc2hhcmluZyBmb3IgZWxlbWVudHMgdGhhdCBjYW4gZ2FpbiBsYXllcnMgZm9y
IHJlYXNvbnMgb3V0c2lkZSBvZiB0aGUgc3R5bGUgc3lzdGVtLgotICAgIC8vIFNlZSBjb21tZW50
cyBpbiBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKCkuCi0gICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05h
bWUoaWZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykg
fHwgZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUo
Y2FudmFzVGFnKQotI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotICAgICAgICAv
LyBXaXRoIHByb3h5aW5nLCB0aGUgbWVkaWEgZWxlbWVudHMgYXJlIGJhY2tlZCBieSBhIFJlbmRl
ckVtYmVkZGVkT2JqZWN0LgotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKHZpZGVvVGFn
KSB8fCBpc0hUTUxBdWRpb0VsZW1lbnQoZWxlbWVudCkKLSNlbmRpZgotICAgICAgICApCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotCi0gICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25B
dXRvKGVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZWxlbWVudC0+
aXNMaW5rKCkgJiYgc3RhdGUuZWxlbWVudExpbmtTdGF0ZSgpICE9IHN0eWxlLT5pbnNpZGVMaW5r
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAg
ICAvLyBEZW55IHNoYXJpbmcgc3R5bGVzIGJldHdlZW4gV2ViVlRUIGFuZCBub24tV2ViVlRUIG5v
ZGVzLgotICAgIGlmIChlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSAhPSBzdGF0ZS5lbGVtZW50
KCktPmlzV2ViVlRURWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
ZWxlbWVudC0+aXNXZWJWVFRFbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpLT5pc1dlYlZUVEVs
ZW1lbnQoKSAmJiB0b1dlYlZUVEVsZW1lbnQoZWxlbWVudCktPmlzUGFzdE5vZGUoKSAhPSB0b1dl
YlZUVEVsZW1lbnQoc3RhdGUuZWxlbWVudCgpKS0+aXNQYXN0Tm9kZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBpZiAo
ZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVs
ZW1lbnQoKSB8fCBzdGF0ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9jdW1lbnQoKS0+d2Via2l0Q3Vy
cmVudEZ1bGxTY3JlZW5FbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgot
ICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgU3R5bGVkRWxlbWVudCogU3R5bGVSZXNvbHZl
cjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSogbm9kZSwgdW5zaWduZWQmIGNvdW50
KSBjb25zdAotewotICAgIGZvciAoOyBub2RlOyBub2RlID0gbm9kZS0+cHJldmlvdXNTaWJsaW5n
KCkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KHN0YXRpY19j
YXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
aWYgKGNvdW50KysgPT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSk7
Ci19Ci0KLVJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCi17
Ci0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBpZiAoIXN0YXRlLnN0eWxlZEVsZW1l
bnQoKSB8fCAhc3RhdGUucGFyZW50U3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAv
LyBJZiB0aGUgZWxlbWVudCBoYXMgaW5saW5lIHN0eWxlIGl0IGlzIHByb2JhYmx5IHVuaXF1ZS4K
LSAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpKQotICAgICAgICBy
ZXR1cm4gMDsKLSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCkt
PmlzU1ZHRWxlbWVudCgpICYmIHRvU1ZHRWxlbWVudChzdGF0ZS5zdHlsZWRFbGVtZW50KCkpLT5h
bmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0jZW5kaWYK
LSAgICAvLyBJZHMgc3RvcCBzdHlsZSBzaGFyaW5nIGlmIHRoZXkgc2hvdyB1cCBpbiB0aGUgc3R5
bGVzaGVldHMuCi0gICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aGFzSUQoKSAmJiBtX3J1
bGVTZXRzLmZlYXR1cmVzKCkuaWRzSW5SdWxlcy5jb250YWlucyhzdGF0ZS5zdHlsZWRFbGVtZW50
KCktPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUuZWxlbWVudCgpLT5wYXJl
bnRFbGVtZW50KCkpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoc3RhdGUuc3R5bGVkRWxl
bWVudCgpLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAoc3RhdGUuZWxlbWVudCgpID09IHN0YXRlLmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oc3RhdGUu
ZWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBDYWNoZSB3aGV0aGVyIHN0
YXRlLmVsZW1lbnQgaXMgYWZmZWN0ZWQgYnkgYW55IGtub3duIGNsYXNzIHNlbGVjdG9ycy4KLSAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgYSBtZW1iZXIgdmFyaWFibGUuIFRoZSBzdHls
ZSBzaGFyaW5nIGNvZGUgY291bGQgYmUgZmFjdG9yZWQgb3V0IG9mIFN0eWxlUmVzb2x2ZXIuCi0g
ICAgc3RhdGUuc2V0RWxlbWVudEFmZmVjdGVkQnlDbGFzc1J1bGVzKHN0YXRlLmVsZW1lbnQoKSAm
JiBzdGF0ZS5lbGVtZW50KCktPmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxl
cyhzdGF0ZS5lbGVtZW50KCktPmNsYXNzTmFtZXMoKSkpOwotCi0gICAgLy8gQ2hlY2sgcHJldmlv
dXMgc2libGluZ3MgYW5kIHRoZWlyIGNvdXNpbnMuCi0gICAgdW5zaWduZWQgY291bnQgPSAwOwot
ICAgIHVuc2lnbmVkIHZpc2l0ZWROb2RlQ291bnQgPSAwOwotICAgIFN0eWxlZEVsZW1lbnQqIHNo
YXJlRWxlbWVudCA9IDA7Ci0gICAgTm9kZSogY291c2luTGlzdCA9IHN0YXRlLnN0eWxlZEVsZW1l
bnQoKS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgd2hpbGUgKGNvdXNpbkxpc3QpIHsKLSAgICAg
ICAgc2hhcmVFbGVtZW50ID0gZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoY291c2luTGlzdCwg
Y291bnQpOwotICAgICAgICBpZiAoc2hhcmVFbGVtZW50KQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNvdXNpbkxpc3QgPSBsb2NhdGVDb3VzaW5MaXN0KGNvdXNpbkxpc3QtPnBhcmVudEVs
ZW1lbnQoKSwgdmlzaXRlZE5vZGVDb3VudCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgaGF2ZSBl
eGhhdXN0ZWQgYWxsIG91ciBidWRnZXQgb3Igb3VyIGNvdXNpbnMuCi0gICAgaWYgKCFzaGFyZUVs
ZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgc2libGlu
ZyBydWxlcyBhcHBseS4gVGhpcyBpcyBjaGVja2VkIGF0IHRoZSBlbmQgYXMgaXQgc2hvdWxkIHJh
cmVseSBmYWlsLgotICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldCht
X3J1bGVTZXRzLnNpYmxpbmcoKSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIC8vIENhbid0IHNo
YXJlIGlmIGF0dHJpYnV0ZSBydWxlcyBhcHBseS4KLSAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlk
YXRlTWF0Y2hlc1J1bGVTZXQobV9ydWxlU2V0cy51bmNvbW1vbkF0dHJpYnV0ZSgpKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgQGhvc3QgQC1ydWxlcyBhcHBseS4K
LSAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICAvLyBUcmFja2luZyBjaGlsZCBpbmRleCByZXF1aXJlcyB1bmlxdWUg
c3R5bGUgZm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0aGUgc2libGluZyBydWxl
IG1hdGNoIGFib3ZlLgotICAgIGlmIChwYXJlbnRFbGVtZW50UHJldmVudHNTaGFyaW5nKHN0YXRl
LmVsZW1lbnQoKS0+cGFyZW50RWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIHNoYXJlRWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0Rm9u
dEFuZEdseXBoT3JpZW50YXRpb24oY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBGb250T3JpZW50
YXRpb24mIGZvbnRPcmllbnRhdGlvbiwgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbiYgZ2x5cGhPcmll
bnRhdGlvbikKLXsKLSAgICBpZiAoc3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsK
LSAgICAgICAgZm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbDsKLSAgICAgICAgZ2x5cGhPcmll
bnRhdGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgc3dpdGNoIChzdHlsZS0+dGV4dE9yaWVudGF0aW9uKCkpIHsK
LSAgICBjYXNlIFRleHRPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ6Ci0gICAgICAgIGZvbnRPcmll
bnRhdGlvbiA9IFZlcnRpY2FsOwotICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5
cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFRl
eHRPcmllbnRhdGlvblVwcmlnaHQ6Ci0gICAgICAgIGZvbnRPcmllbnRhdGlvbiA9IFZlcnRpY2Fs
OwotICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblVwcmln
aHQ7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFRleHRPcmllbnRhdGlvblNpZGV3YXlzOgot
ICAgICAgICBpZiAoc3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gTGVmdFRvUmlnaHRXcml0aW5nTW9k
ZSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG1hcCB0byBzaWRld2F5cy1s
ZWZ0LCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIHlldC4KLSAgICAgICAgICAgIGZvbnRPcmllbnRh
dGlvbiA9IFZlcnRpY2FsOwotICAgICAgICAgICAgZ2x5cGhPcmllbnRhdGlvbiA9IE5vbkNKS0ds
eXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWw7Ci0gICAgICAgIGdseXBo
T3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodDsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgVGV4dE9yaWVudGF0aW9uU2lkZXdheXNSaWdodDoKLSAgICAg
ICAgZm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbDsKLSAgICAgICAgZ2x5cGhPcmllbnRhdGlv
biA9IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OwotICAgICAgICByZXR1cm47
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGZv
bnRPcmllbnRhdGlvbiA9IEhvcml6b250YWw7Ci0gICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBO
b25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodDsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JE
b2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQsIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9y
KQotewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotCi0gICAgLy8gSFRN
TDUgc3RhdGVzIHRoYXQgc2VhbWxlc3MgaWZyYW1lcyBzaG91bGQgcmVwbGFjZSBkZWZhdWx0IENT
UyB2YWx1ZXMKLSAgICAvLyB3aXRoIHZhbHVlcyBpbmhlcml0ZWQgZnJvbSB0aGUgY29udGFpbmlu
ZyBpZnJhbWUgZWxlbWVudC4gSG93ZXZlciwKLSAgICAvLyBzb21lIHZhbHVlcyAoc3VjaCBhcyB0
aGUgY2FzZSBvZiBkZXNpZ25Nb2RlID0gIm9uIikgc3RpbGwgbmVlZCB0bwotICAgIC8vIGJlIHNl
dCBieSB0aGlzICJkb2N1bWVudCBzdHlsZSIuCi0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBkb2N1
bWVudFN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIGJvb2wgc2VhbWxlc3NXaXRo
UGFyZW50ID0gZG9jdW1lbnQtPnNob3VsZERpc3BsYXlTZWFtbGVzc2x5V2l0aFBhcmVudCgpOwot
ICAgIGlmIChzZWFtbGVzc1dpdGhQYXJlbnQpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIGlmcmFt
ZVN0eWxlID0gZG9jdW1lbnQtPnNlYW1sZXNzUGFyZW50SUZyYW1lKCktPnJlbmRlclN0eWxlKCk7
Ci0gICAgICAgIGlmIChpZnJhbWVTdHlsZSkKLSAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPmlu
aGVyaXRGcm9tKGlmcmFtZVN0eWxlKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogSXQncyBub3Qg
Y2xlYXIgd2hpY2ggdmFsdWVzIGJlbG93IHdlIHdhbnQgdG8gb3ZlcnJpZGUgaW4gdGhlIHNlYW1s
ZXNzIGNhc2UhCi0gICAgZG9jdW1lbnRTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0gICAgaWYg
KCFzZWFtbGVzc1dpdGhQYXJlbnQpIHsKLSAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0UlRMT3Jk
ZXJpbmcoZG9jdW1lbnQtPnZpc3VhbGx5T3JkZXJlZCgpID8gVmlzdWFsT3JkZXIgOiBMb2dpY2Fs
T3JkZXIpOwotICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRab29tKGZyYW1lICYmICFkb2N1bWVu
dC0+cHJpbnRpbmcoKSA/IGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpIDogMSk7Ci0gICAgICAgIGRv
Y3VtZW50U3R5bGUtPnNldFBhZ2VTY2FsZVRyYW5zZm9ybShmcmFtZSA/IGZyYW1lLT5mcmFtZVNj
YWxlRmFjdG9yKCkgOiAxKTsKLSAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0TG9jYWxlKGRvY3Vt
ZW50LT5jb250ZW50TGFuZ3VhZ2UoKSk7Ci0gICAgfQotICAgIC8vIFRoaXMgb3ZlcnJpZGVzIGFu
eSAtd2Via2l0LXVzZXItbW9kaWZ5IGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgaWZyYW1lLgot
ICAgIGRvY3VtZW50U3R5bGUtPnNldFVzZXJNb2RpZnkoZG9jdW1lbnQtPmluRGVzaWduTW9kZSgp
ID8gUkVBRF9XUklURSA6IFJFQURfT05MWSk7Ci0KLSAgICBFbGVtZW50KiBkb2NFbGVtZW50ID0g
ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwotICAgIFJlbmRlck9iamVjdCogZG9jRWxlbWVu
dFJlbmRlcmVyID0gZG9jRWxlbWVudCA/IGRvY0VsZW1lbnQtPnJlbmRlcmVyKCkgOiAwOwotICAg
IGlmIChkb2NFbGVtZW50UmVuZGVyZXIpIHsKLSAgICAgICAgLy8gVXNlIHRoZSBkaXJlY3Rpb24g
YW5kIHdyaXRpbmctbW9kZSBvZiB0aGUgYm9keSB0byBzZXQgdGhlCi0gICAgICAgIC8vIHZpZXdw
b3J0J3MgZGlyZWN0aW9uIGFuZCB3cml0aW5nLW1vZGUgdW5sZXNzIHRoZSBwcm9wZXJ0eSBpcyBz
ZXQgb24gdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGJv
ZHksIHRoZW4gdXNlIHRoZSBkb2N1bWVudCBlbGVtZW50LgotICAgICAgICBSZW5kZXJPYmplY3Qq
IGJvZHlSZW5kZXJlciA9IGRvY3VtZW50LT5ib2R5KCkgPyBkb2N1bWVudC0+Ym9keSgpLT5yZW5k
ZXJlcigpIDogMDsKLSAgICAgICAgaWYgKGJvZHlSZW5kZXJlciAmJiAhZG9jdW1lbnQtPndyaXRp
bmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50U3R5bGUt
PnNldFdyaXRpbmdNb2RlKGJvZHlSZW5kZXJlci0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFdyaXRpbmdNb2RlKGRv
Y0VsZW1lbnRSZW5kZXJlci0+c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7Ci0gICAgICAgIGlmIChi
b2R5UmVuZGVyZXIgJiYgIWRvY3VtZW50LT5kaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudCgp
KQotICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0RGlyZWN0aW9uKGJvZHlSZW5kZXJlci0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkb2N1bWVu
dFN0eWxlLT5zZXREaXJlY3Rpb24oZG9jRWxlbWVudFJlbmRlcmVyLT5zdHlsZSgpLT5kaXJlY3Rp
b24oKSk7Ci0gICAgfQotCi0gICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIGlmIChGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFBhZ2luYXRp
b24mIHBhZ2luYXRpb24gPSBmcmFtZVZpZXctPnBhZ2luYXRpb24oKTsKLSAgICAgICAgICAgIGlm
IChwYWdpbmF0aW9uLm1vZGUgIT0gUGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQpIHsKLSAgICAgICAg
ICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRDb2x1bW5TdHlsZXNGcm9tUGFnaW5hdGlvbk1vZGUo
cGFnaW5hdGlvbi5tb2RlKTsKLSAgICAgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRDb2x1
bW5HYXAocGFnaW5hdGlvbi5nYXApOwotICAgICAgICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiB2
aWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
dmlldy0+aGFzQ29sdW1ucygpKQotICAgICAgICAgICAgICAgICAgICAgICAgdmlldy0+dXBkYXRl
Q29sdW1uSW5mb0Zyb21TdHlsZShkb2N1bWVudFN0eWxlLmdldCgpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTZWFtbGVzcyBp
ZnJhbWVzIHdhbnQgdG8gaW5oZXJpdCB0aGVpciBmb250IGZyb20gdGhlaXIgcGFyZW50IGlmcmFt
ZSwgc28gZWFybHkgcmV0dXJuIGJlZm9yZSBzZXR0aW5nIHRoZSBmb250LgotICAgIGlmIChzZWFt
bGVzc1dpdGhQYXJlbnQpCi0gICAgICAgIHJldHVybiBkb2N1bWVudFN0eWxlLnJlbGVhc2UoKTsK
LQotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247Ci0gICAgZm9udERlc2NyaXB0
aW9uLnNldFNjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKGRvY3VtZW50
U3R5bGUtPmxvY2FsZSgpKSk7Ci0gICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50
LT5zZXR0aW5ncygpKSB7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9u
dChkb2N1bWVudC0+cHJpbnRpbmcoKSB8fCAhc2V0dGluZ3MtPnNjcmVlbkZvbnRTdWJzdGl0dXRp
b25FbmFibGVkKCkpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShz
ZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc3RhbmRhcmRGb250ID0gc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseShmb250RGVzY3Jp
cHRpb24uc2NyaXB0KCkpOwotICAgICAgICBpZiAoIXN0YW5kYXJkRm9udC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlw
dGlvbjo6U3RhbmRhcmRGYW1pbHkpOwotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldE9u
ZUZhbWlseShzdGFuZGFyZEZvbnQpOwotICAgICAgICB9Ci0gICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwot
ICAgICAgICBpbnQgc2l6ZSA9IFN0eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5d29yZChkb2N1
bWVudCwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzID0gZG9j
dW1lbnQtPmlzU1ZHRG9jdW1lbnQoKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZShTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShk
b2N1bWVudCwgZG9jdW1lbnRTdHlsZS5nZXQoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVT
aXplKCksIHNpemUsIHVzZVNWR1pvb21SdWxlcykpOwotICAgIH0gZWxzZQotICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQtPnByaW50aW5nKCkpOwotCi0g
ICAgRm9udE9yaWVudGF0aW9uIGZvbnRPcmllbnRhdGlvbjsKLSAgICBOb25DSktHbHlwaE9yaWVu
dGF0aW9uIGdseXBoT3JpZW50YXRpb247Ci0gICAgZ2V0Rm9udEFuZEdseXBoT3JpZW50YXRpb24o
ZG9jdW1lbnRTdHlsZS5nZXQoKSwgZm9udE9yaWVudGF0aW9uLCBnbHlwaE9yaWVudGF0aW9uKTsK
LSAgICBmb250RGVzY3JpcHRpb24uc2V0T3JpZW50YXRpb24oZm9udE9yaWVudGF0aW9uKTsKLSAg
ICBmb250RGVzY3JpcHRpb24uc2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihnbHlwaE9yaWVudGF0
aW9uKTsKLQotICAgIGRvY3VtZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwotICAgIGRvY3VtZW50U3R5bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsK
LQotICAgIHJldHVybiBkb2N1bWVudFN0eWxlLnJlbGVhc2UoKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBib29sIGlzQXRTaGFkb3dCb3VuZGFyeShjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAg
IGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIENvbnRhaW5lck5vZGUq
IHBhcmVudE5vZGUgPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7Ci0gICAgcmV0dXJuIHBhcmVudE5v
ZGUgJiYgcGFyZW50Tm9kZS0+aXNTaGFkb3dSb290KCk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBS
ZW5kZXJTdHlsZSogZGVmYXVsdFBhcmVudCwKLSAgICBTdHlsZVNoYXJpbmdCZWhhdmlvciBzaGFy
aW5nQmVoYXZpb3IsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yIG1hdGNoaW5nQmVoYXZpb3IsIFJlbmRl
clJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZykKLXsKLSAgICAvLyBPbmNlIGFuIGVsZW1lbnQgaGFz
IGEgcmVuZGVyZXIsIHdlIGRvbid0IHRyeSB0byBkZXN0cm95IGl0LCBzaW5jZSBvdGhlcndpc2Ug
dGhlIHJlbmRlcmVyCi0gICAgLy8gd2lsbCB2YW5pc2ggaWYgYSBzdHlsZSByZWNhbGMgaGFwcGVu
cyBkdXJpbmcgbG9hZGluZy4KLSAgICBpZiAoc2hhcmluZ0JlaGF2aW9yID09IEFsbG93U3R5bGVT
aGFyaW5nICYmICFlbGVtZW50LT5kb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSAm
JiAhZWxlbWVudC0+cmVuZGVyZXIoKSkgewotICAgICAgICBpZiAoIXNfc3R5bGVOb3RZZXRBdmFp
bGFibGUpIHsKLSAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUgPSBSZW5kZXJTdHls
ZTo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgICAgICAgICAgc19zdHlsZU5vdFlldEF2YWlsYWJs
ZS0+c2V0RGlzcGxheShOT05FKTsKLSAgICAgICAgICAgIHNfc3R5bGVOb3RZZXRBdmFpbGFibGUt
PmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwotICAgICAgICB9Ci0gICAgICAgIGVsZW1l
bnQtPmRvY3VtZW50KCktPnNldEhhc05vZGVzV2l0aFBsYWNlaG9sZGVyU3R5bGUoKTsKLSAgICAg
ICAgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7Ci0gICAgfQotCi0gICAgU3RhdGUmIHN0
YXRlID0gbV9zdGF0ZTsKLSAgICBpbml0RWxlbWVudChlbGVtZW50KTsKLSAgICBzdGF0ZS5pbml0
Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGVsZW1lbnQsIGRlZmF1bHRQYXJlbnQsIHJlZ2lv
bkZvclN0eWxpbmcpOwotICAgIGlmIChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJp
bmcgJiYgIXN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpKSB7Ci0gICAgICAgIFJl
bmRlclN0eWxlKiBzaGFyZWRTdHlsZSA9IGxvY2F0ZVNoYXJlZFN0eWxlKCk7Ci0gICAgICAgIGlm
IChzaGFyZWRTdHlsZSkgewotICAgICAgICAgICAgc3RhdGUuY2xlYXIoKTsKLSAgICAgICAgICAg
IHJldHVybiBzaGFyZWRTdHlsZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChzdGF0ZS5w
YXJlbnRTdHlsZSgpKSB7Ci0gICAgICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVh
dGUoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKHN0YXRlLnBhcmVudFN0
eWxlKCksIGlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50KSA/IFJlbmRlclN0eWxlOjpBdFNoYWRv
d0JvdW5kYXJ5IDogUmVuZGVyU3R5bGU6Ok5vdEF0U2hhZG93Qm91bmRhcnkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHN0YXRlLnNldFN0eWxlKGRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKSk7Ci0g
ICAgICAgIHN0YXRlLnNldFBhcmVudFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZShzdGF0ZS5zdHls
ZSgpKSk7Ci0gICAgfQotICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBhdHRyaWJ1dGUgKGltcGxlbWVu
dGVkIGJ5IC13ZWJraXQtdXNlci1tb2RpZnkpIHNob3VsZAotICAgIC8vIGJlIHByb3BhZ2F0ZWQg
ZnJvbSBzaGFkb3cgaG9zdCB0byBkaXN0cmlidXRlZCBub2RlLgotICAgIGlmIChzdGF0ZS5kaXN0
cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQoKSkgewotICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50
ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyU3R5
bGUqIHN0eWxlT2ZTaGFkb3dIb3N0ID0gcGFyZW50LT5yZW5kZXJTdHlsZSgpKQotICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVzZXJNb2RpZnkoc3R5bGVPZlNoYWRvd0hvc3QtPnVz
ZXJNb2RpZnkoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZWxlbWVudC0+aXNMaW5r
KCkpIHsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SXNMaW5rKHRydWUpOwotICAgICAgICBF
SW5zaWRlTGluayBsaW5rU3RhdGUgPSBzdGF0ZS5lbGVtZW50TGlua1N0YXRlKCk7Ci0gICAgICAg
IGlmIChsaW5rU3RhdGUgIT0gTm90SW5zaWRlTGluaykgewotICAgICAgICAgICAgYm9vbCBmb3Jj
ZVZpc2l0ZWQgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNldWRvU3RhdGUoZWxl
bWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb1Zpc2l0ZWQpOwotICAgICAgICAgICAgaWYgKGZvcmNl
VmlzaXRlZCkKLSAgICAgICAgICAgICAgICBsaW5rU3RhdGUgPSBJbnNpZGVWaXNpdGVkTGluazsK
LSAgICAgICAgfQotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJbnNpZGVMaW5rKGxpbmtTdGF0
ZSk7Ci0gICAgfQotCi0gICAgYm9vbCBuZWVkc0NvbGxlY3Rpb24gPSBmYWxzZTsKLSAgICBDU1NE
ZWZhdWx0U3R5bGVTaGVldHM6OmVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoZWxl
bWVudCwgbmVlZHNDb2xsZWN0aW9uKTsKLSAgICBpZiAobmVlZHNDb2xsZWN0aW9uKQotICAgICAg
ICBtX3J1bGVTZXRzLmNvbGxlY3RGZWF0dXJlcyhkb2N1bWVudCgpLT5pc1ZpZXdTb3VyY2UoKSwg
bV9zY29wZVJlc29sdmVyLmdldCgpKTsKLQotICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yIGNvbGxl
Y3Rvcih0aGlzLCBzdGF0ZSk7Ci0gICAgY29sbGVjdG9yLnNldFJlZ2lvbkZvclN0eWxpbmcocmVn
aW9uRm9yU3R5bGluZyk7Ci0gICAgY29sbGVjdG9yLnNldE1lZGl1bShtX21lZGl1bS5nZXQoKSk7
Ci0KLSAgICBpZiAobWF0Y2hpbmdCZWhhdmlvciA9PSBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykK
LSAgICAgICAgY29sbGVjdG9yLm1hdGNoVUFSdWxlcygpOwotICAgIGVsc2UKLSAgICAgICAgY29s
bGVjdG9yLm1hdGNoQWxsUnVsZXMobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMsIG1hdGNoaW5n
QmVoYXZpb3IgIT0gTWF0Y2hBbGxSdWxlc0V4Y2x1ZGluZ1NNSUwpOwotCi0gICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllcyhjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgpLCBlbGVtZW50KTsKLQotICAg
IC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRp
b25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLnN0
eWxlKCksIHN0YXRlLnBhcmVudFN0eWxlKCksIGVsZW1lbnQpOwotCi0gICAgc3RhdGUuY2xlYXIo
KTsgLy8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4dCByZXNvbHZlLgotCi0gICAgZG9jdW1lbnQoKS0+
ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwotCi0gICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUu
Ci0gICAgcmV0dXJuIHN0YXRlLnRha2VTdHlsZSgpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBl
bGVtZW50U3R5bGUsIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lLCBLZXlmcmFtZVZhbHVl
JiBrZXlmcmFtZVZhbHVlKQotewotICAgIE1hdGNoUmVzdWx0IHJlc3VsdDsKLSAgICBpZiAoa2V5
ZnJhbWUtPnByb3BlcnRpZXMoKSkKLSAgICAgICAgcmVzdWx0LmFkZE1hdGNoZWRQcm9wZXJ0aWVz
KGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOwotCi0gICAgQVNTRVJUKCFtX3N0YXRlLnN0eWxlKCkp
OwotCi0gICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLQotICAgIC8vIENyZWF0ZSB0aGUgc3R5
bGUKLSAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKSk7
Ci0gICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwotCi0gICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0byBib3RoZXIgd2l0aCAhaW1wb3J0YW50LiBTaW5jZSB0aGVyZSBpcyBvbmx5IGV2ZXIgb25l
Ci0gICAgLy8gZGVjbCwgdGhlcmUncyBub3RoaW5nIHRvIG92ZXJyaWRlLiBTbyBqdXN0IGFkZCB0
aGUgZmlyc3QgcHJvcGVydGllcy4KLSAgICBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZTsKLSAg
ICBpZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKLSAgICAgICAgYXBwbHlNYXRjaGVkUHJvcGVy
dGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7Ci0KLSAgICAvLyBJZiBv
dXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBk
YXRlRm9udCgpOwotCi0gICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUg
d2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplCi0gICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1
ZSgpKQotICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUu
bGluZUhlaWdodFZhbHVlKCkpOwotCi0gICAgLy8gTm93IGRvIHJlc3Qgb2YgdGhlIHByb3BlcnRp
ZXMuCi0gICAgaWYgKGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpCi0gICAgICAgIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7Ci0KLSAgICAv
LyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCBieSBvbmUgb2YgdGhlIG5vbi1lc3NlbnRpYWwgZm9u
dCBwcm9wcywKLSAgICAvLyBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IGEgc2Vjb25kIHRpbWUuCi0g
ICAgdXBkYXRlRm9udCgpOwotCi0gICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJl
bmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7Ci0gICAgCi0g
ICAgLy8gQWRkIGFsbCB0aGUgYW5pbWF0aW5nIHByb3BlcnRpZXMgdG8gdGhlIGtleWZyYW1lLgot
ICAgIGlmIChjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZURlY2xhcmF0aW9uID0ga2V5ZnJh
bWUtPnByb3BlcnRpZXMoKSkgewotICAgICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gc3R5
bGVEZWNsYXJhdGlvbi0+cHJvcGVydHlDb3VudCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcHJvcGVydHlDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5ID0gc3R5bGVEZWNsYXJhdGlvbi0+cHJvcGVydHlBdChpKS5pZCgpOwotICAgICAg
ICAgICAgLy8gVGltaW5nLWZ1bmN0aW9uIHdpdGhpbiBrZXlmcmFtZXMgaXMgc3BlY2lhbCwgYmVj
YXVzZSBpdCBpcyBub3QgYW5pbWF0ZWQ7IGl0IGp1c3QKLSAgICAgICAgICAgIC8vIGRlc2NyaWJl
cyB0aGUgdGltaW5nIGZ1bmN0aW9uIGJldHdlZW4gdGhpcyBrZXlmcmFtZSBhbmQgdGhlIG5leHQu
Ci0gICAgICAgICAgICBpZiAocHJvcGVydHkgIT0gQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25U
aW1pbmdGdW5jdGlvbikKLSAgICAgICAgICAgICAgICBrZXlmcmFtZVZhbHVlLmFkZFByb3BlcnR5
KHByb3BlcnR5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRvY3VtZW50KCktPmRpZEFjY2Vz
c1N0eWxlUmVzb2x2ZXIoKTsKLQotICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsKLX0KLQot
dm9pZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBl
LCBjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBLZXlmcmFtZUxpc3QmIGxpc3QpCi17
Ci0gICAgbGlzdC5jbGVhcigpOwotCi0gICAgLy8gR2V0IHRoZSBrZXlmcmFtZXNSdWxlIGZvciB0
aGlzIG5hbWUKLSAgICBpZiAoIWUgfHwgbGlzdC5hbmltYXRpb25OYW1lKCkuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2tleWZyYW1lc1J1bGVNYXAuY2hlY2tDb25zaXN0ZW5j
eSgpOwotCi0gICAgS2V5ZnJhbWVzUnVsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lc1J1
bGVNYXAuZmluZChsaXN0LmFuaW1hdGlvbk5hbWUoKS5pbXBsKCkpOwotICAgIGlmIChpdCA9PSBt
X2tleWZyYW1lc1J1bGVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFN0
eWxlUnVsZUtleWZyYW1lcyoga2V5ZnJhbWVzUnVsZSA9IGl0LT52YWx1ZS5nZXQoKTsKLQotICAg
IC8vIENvbnN0cnVjdCBhbmQgcG9wdWxhdGUgdGhlIHN0eWxlIGZvciBlYWNoIGtleWZyYW1lCi0g
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPiA+JiBrZXlmcmFtZXMgPSBrZXlm
cmFtZXNSdWxlLT5rZXlmcmFtZXMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5
ZnJhbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIC8vIEFwcGx5IHRoZSBkZWNsYXJhdGlvbiB0
byB0aGUgc3R5bGUuIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGxvZ2ljIGlu
IHN0eWxlRm9yRWxlbWVudAotICAgICAgICBpbml0RWxlbWVudChlKTsKLSAgICAgICAgbV9zdGF0
ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUpOwotCi0gICAgICAgIGNvbnN0IFN0
eWxlS2V5ZnJhbWUqIGtleWZyYW1lID0ga2V5ZnJhbWVzW2ldLmdldCgpOwotCi0gICAgICAgIEtl
eWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5z
ZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwga2V5ZnJhbWUsIGtleWZyYW1l
VmFsdWUpKTsKLQotICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBzdHlsZSB0byBhbGwgdGhl
IGluZGljYXRlZCBrZXkgdGltZXMKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBrZXlzOwotICAgICAg
ICBrZXlmcmFtZS0+Z2V0S2V5cyhrZXlzKTsKLSAgICAgICAgZm9yIChzaXplX3Qga2V5SW5kZXgg
PSAwOyBrZXlJbmRleCA8IGtleXMuc2l6ZSgpOyArK2tleUluZGV4KSB7Ci0gICAgICAgICAgICBr
ZXlmcmFtZVZhbHVlLnNldEtleShrZXlzW2tleUluZGV4XSk7Ci0gICAgICAgICAgICBsaXN0Lmlu
c2VydChrZXlmcmFtZVZhbHVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHRoZSAw
JSBrZXlmcmFtZSBpcyBtaXNzaW5nLCBjcmVhdGUgaXQgKGJ1dCBvbmx5IGlmIHRoZXJlIGlzIGF0
IGxlYXN0IG9uZSBvdGhlciBrZXlmcmFtZSkKLSAgICBpbnQgaW5pdGlhbExpc3RTaXplID0gbGlz
dC5zaXplKCk7Ci0gICAgaWYgKGluaXRpYWxMaXN0U2l6ZSA+IDAgJiYgbGlzdFswXS5rZXkoKSkg
ewotICAgICAgICBzdGF0aWMgU3R5bGVLZXlmcmFtZSogemVyb1BlcmNlbnRLZXlmcmFtZTsKLSAg
ICAgICAgaWYgKCF6ZXJvUGVyY2VudEtleWZyYW1lKSB7Ci0gICAgICAgICAgICB6ZXJvUGVyY2Vu
dEtleWZyYW1lID0gU3R5bGVLZXlmcmFtZTo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgICAgICAg
ICAgemVyb1BlcmNlbnRLZXlmcmFtZS0+c2V0S2V5VGV4dCgiMCUiKTsKLSAgICAgICAgfQotICAg
ICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lVmFsdWUoMCwgMCk7Ci0gICAgICAgIGtleWZyYW1l
VmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIHplcm9QZXJjZW50
S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKLSAgICAgICAgbGlzdC5pbnNlcnQoa2V5ZnJhbWVW
YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIDEwMCUga2V5ZnJhbWUgaXMgbWlzc2luZywg
Y3JlYXRlIGl0IChidXQgb25seSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgb3RoZXIga2V5ZnJh
bWUpCi0gICAgaWYgKGluaXRpYWxMaXN0U2l6ZSA+IDAgJiYgKGxpc3RbbGlzdC5zaXplKCkgLSAx
XS5rZXkoKSAhPSAxKSkgewotICAgICAgICBzdGF0aWMgU3R5bGVLZXlmcmFtZSogaHVuZHJlZFBl
cmNlbnRLZXlmcmFtZTsKLSAgICAgICAgaWYgKCFodW5kcmVkUGVyY2VudEtleWZyYW1lKSB7Ci0g
ICAgICAgICAgICBodW5kcmVkUGVyY2VudEtleWZyYW1lID0gU3R5bGVLZXlmcmFtZTo6Y3JlYXRl
KCkubGVha1JlZigpOwotICAgICAgICAgICAgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZS0+c2V0S2V5
VGV4dCgiMTAwJSIpOwotICAgICAgICB9Ci0gICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVW
YWx1ZSgxLCAwKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZy
YW1lKGVsZW1lbnRTdHlsZSwgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkp
OwotICAgICAgICBsaXN0Lmluc2VydChrZXlmcmFtZVZhbHVlKTsKLSAgICB9Ci19Ci0KLVBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChF
bGVtZW50KiBlLCBjb25zdCBQc2V1ZG9TdHlsZVJlcXVlc3QmIHBzZXVkb1N0eWxlUmVxdWVzdCwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQotewotICAgIEFTU0VSVChwYXJlbnRTdHlsZSk7Ci0g
ICAgaWYgKCFlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3Rh
dGU7Ci0KLSAgICBpbml0RWxlbWVudChlKTsKLQotICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29s
dmUoZG9jdW1lbnQoKSwgZSwgcGFyZW50U3R5bGUpOwotCi0gICAgaWYgKG1fc3RhdGUucGFyZW50
U3R5bGUoKSkgewotICAgICAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlKCkp
OwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShtX3N0YXRlLnBhcmVudFN0eWxl
KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXRlLnNldFN0eWxlKGRlZmF1bHRTdHlsZUZv
ckVsZW1lbnQoKSk7Ci0gICAgICAgIHN0YXRlLnNldFBhcmVudFN0eWxlKFJlbmRlclN0eWxlOjpj
bG9uZShzdGF0ZS5zdHlsZSgpKSk7Ci0gICAgfQotCi0gICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNl
IHBzZXVkby1lbGVtZW50cyBpbiBhbnkgb2Ygb3VyIHF1aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVs
ZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fsa2luZwotICAgIC8vIHRob3NlIHJ1bGVzLgotCi0gICAg
Ly8gQ2hlY2sgVUEsIHVzZXIgYW5kIGF1dGhvciBydWxlcy4KLSAgICBFbGVtZW50UnVsZUNvbGxl
Y3RvciBjb2xsZWN0b3IodGhpcywgc3RhdGUpOwotICAgIGNvbGxlY3Rvci5zZXRQc2V1ZG9TdHls
ZVJlcXVlc3QocHNldWRvU3R5bGVSZXF1ZXN0KTsKLSAgICBjb2xsZWN0b3Iuc2V0TWVkaXVtKG1f
bWVkaXVtLmdldCgpKTsKLSAgICBjb2xsZWN0b3IubWF0Y2hVQVJ1bGVzKCk7Ci0KLSAgICBpZiAo
bV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpIHsKLSAgICAgICAgY29sbGVjdG9yLm1hdGNoVXNl
clJ1bGVzKGZhbHNlKTsKLSAgICAgICAgY29sbGVjdG9yLm1hdGNoQXV0aG9yUnVsZXMoZmFsc2Up
OwotICAgIH0KLQotICAgIGlmIChjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgpLm1hdGNoZWRQcm9w
ZXJ0aWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRTdHlsZVR5cGUocHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lkKTsKLQotICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXMoY29sbGVjdG9yLm1hdGNoZWRSZXN1bHQoKSwgZSk7Ci0KLSAgICAv
LyBDbGVhbiB1cCBvdXIgc3R5bGUgb2JqZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9u
cyAoYW1vbmcgb3RoZXIgZml4dXBzKS4KLSAgICBhZGp1c3RSZW5kZXJTdHlsZShzdGF0ZS5zdHls
ZSgpLCBtX3N0YXRlLnBhcmVudFN0eWxlKCksIDApOwotCi0gICAgLy8gU3RhcnQgbG9hZGluZyBy
ZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3Vy
Y2VzKCk7Ci0KLSAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7Ci0KLSAg
ICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7
Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFn
ZShpbnQgcGFnZUluZGV4KQotewotICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1
bWVudCgpLCBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRT
dHlsZSB3aWxsIGJlIHNldCB0byB0aGUgZG9jdW1lbnQgc3R5bGUuCi0KLSAgICBtX3N0YXRlLnNl
dFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7Ci0gICAgbV9zdGF0ZS5zdHlsZSgpLT5pbmhl
cml0RnJvbShtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7Ci0KLSAgICBQYWdlUnVsZUNvbGxl
Y3RvciBjb2xsZWN0b3IobV9zdGF0ZSwgbV9ydWxlU2V0cyk7Ci0gICAgY29sbGVjdG9yLm1hdGNo
QWxsUGFnZVJ1bGVzKHBhZ2VJbmRleCk7Ci0gICAgbV9zdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUo
MCk7Ci0gICAgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2U7Ci0KLSAgICBNYXRjaFJlc3VsdCYg
cmVzdWx0ID0gY29sbGVjdG9yLm1hdGNoZWRSZXN1bHQoKTsKLSNpZiBFTkFCTEUoQ1NTX1ZBUklB
QkxFUykKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KHJl
c3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhl
cml0ZWRPbmx5KTsKLSNlbmRpZgotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9y
aXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVz
LnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwotCi0gICAgLy8gSWYgb3VyIGZvbnQgZ290IGRp
cnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQoKTsKLQot
ICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24g
dGhlIGZvbnQtc2l6ZS4KLSAgICBpZiAobV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKLSAgICAg
ICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fc3RhdGUubGluZUhlaWdo
dFZhbHVlKCkpOwotCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3Bl
cnRpZXM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkg
LSAxLCBpbmhlcml0ZWRPbmx5KTsKLQotICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJl
ZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOwotCi0g
ICAgZG9jdW1lbnQoKS0+ZGlkQWNjZXNzU3R5bGVSZXNvbHZlcigpOwotCi0gICAgLy8gTm93IHJl
dHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7Ci19Ci0KLVBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1l
bnQoKQotewotICAgIG1fc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKLSAg
ICAvLyBNYWtlIHN1cmUgb3VyIGZvbnRzIGFyZSBpbml0aWFsaXplZCBpZiB3ZSBkb24ndCBpbmhl
cml0IHRoZW0gZnJvbSBvdXIgcGFyZW50IHN0eWxlLgotICAgIGlmIChTZXR0aW5ncyogc2V0dGlu
Z3MgPSBkb2N1bWVudFNldHRpbmdzKCkpIHsKLSAgICAgICAgaW5pdGlhbGl6ZUZvbnRTdHlsZShz
ZXR0aW5ncyk7Ci0gICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2Vs
ZWN0b3IoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVw
ZGF0ZSgwKTsKLQotICAgIHJldHVybiBtX3N0YXRlLnRha2VTdHlsZSgpOwotfQotCi1zdGF0aWMg
dm9pZCBhZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICAvLyBJ
bnRyaW5zaWMgbWFyZ2luIHZhbHVlLgotICAgIGNvbnN0IGludCBpbnRyaW5zaWNNYXJnaW4gPSAy
ICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLQotICAgIC8vIEZJWE1FOiBVc2luZyB3aWR0aC9o
ZWlnaHQgYWxvbmUgYW5kIG5vdCBhbHNvIGRlYWxpbmcgd2l0aCBtaW4td2lkdGgvbWF4LXdpZHRo
IGlzIGZsYXdlZC4KLSAgICAvLyBGSVhNRTogVXNpbmcgInF1aXJrIiB0byBkZWNpZGUgdGhlIG1h
cmdpbiB3YXNuJ3Qgc2V0IGlzIGtpbmQgb2YgbGFtZS4KLSAgICBpZiAoc3R5bGUtPndpZHRoKCku
aXNJbnRyaW5zaWNPckF1dG8oKSkgewotICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkxlZnQoKS5x
dWlyaygpKQotICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpbkxlZnQoTGVuZ3RoKGludHJpbnNp
Y01hcmdpbiwgRml4ZWQpKTsKLSAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5SaWdodCgpLnF1aXJr
KCkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luUmlnaHQoTGVuZ3RoKGludHJpbnNpY01h
cmdpbiwgRml4ZWQpKTsKLSAgICB9Ci0KLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygp
KSB7Ci0gICAgICAgIGlmIChzdHlsZS0+bWFyZ2luVG9wKCkucXVpcmsoKSkKLSAgICAgICAgICAg
IHN0eWxlLT5zZXRNYXJnaW5Ub3AoTGVuZ3RoKGludHJpbnNpY01hcmdpbiwgRml4ZWQpKTsKLSAg
ICAgICAgaWYgKHN0eWxlLT5tYXJnaW5Cb3R0b20oKS5xdWlyaygpKQotICAgICAgICAgICAgc3R5
bGUtPnNldE1hcmdpbkJvdHRvbShMZW5ndGgoaW50cmluc2ljTWFyZ2luLCBGaXhlZCkpOwotICAg
IH0KLX0KLQotc3RhdGljIEVEaXNwbGF5IGVxdWl2YWxlbnRCbG9ja0Rpc3BsYXkoRURpc3BsYXkg
ZGlzcGxheSwgYm9vbCBpc0Zsb2F0aW5nLCBib29sIHN0cmljdFBhcnNpbmcpCi17Ci0gICAgc3dp
dGNoIChkaXNwbGF5KSB7Ci0gICAgY2FzZSBCTE9DSzoKLSAgICBjYXNlIFRBQkxFOgotICAgIGNh
c2UgQk9YOgotICAgIGNhc2UgRkxFWDoKLSAgICBjYXNlIEdSSUQ6Ci0gICAgICAgIHJldHVybiBk
aXNwbGF5OwotCi0gICAgY2FzZSBMSVNUX0lURU06Ci0gICAgICAgIC8vIEl0IGlzIGEgV2luSUUg
YnVnIHRoYXQgZmxvYXRlZCBsaXN0IGl0ZW1zIGxvc2UgdGhlaXIgYnVsbGV0cywgc28gd2UnbGwg
ZW11bGF0ZSB0aGUgcXVpcmssIGJ1dCBvbmx5IGluIHF1aXJrcyBtb2RlLgotICAgICAgICBpZiAo
IXN0cmljdFBhcnNpbmcgJiYgaXNGbG9hdGluZykKLSAgICAgICAgICAgIHJldHVybiBCTE9DSzsK
LSAgICAgICAgcmV0dXJuIGRpc3BsYXk7Ci0gICAgY2FzZSBJTkxJTkVfVEFCTEU6Ci0gICAgICAg
IHJldHVybiBUQUJMRTsKLSAgICBjYXNlIElOTElORV9CT1g6Ci0gICAgICAgIHJldHVybiBCT1g7
Ci0gICAgY2FzZSBJTkxJTkVfRkxFWDoKLSAgICAgICAgcmV0dXJuIEZMRVg7Ci0gICAgY2FzZSBJ
TkxJTkVfR1JJRDoKLSAgICAgICAgcmV0dXJuIEdSSUQ7Ci0KLSAgICBjYXNlIElOTElORToKLSAg
ICBjYXNlIFJVTl9JTjoKLSAgICBjYXNlIENPTVBBQ1Q6Ci0gICAgY2FzZSBJTkxJTkVfQkxPQ0s6
Ci0gICAgY2FzZSBUQUJMRV9ST1dfR1JPVVA6Ci0gICAgY2FzZSBUQUJMRV9IRUFERVJfR1JPVVA6
Ci0gICAgY2FzZSBUQUJMRV9GT09URVJfR1JPVVA6Ci0gICAgY2FzZSBUQUJMRV9ST1c6Ci0gICAg
Y2FzZSBUQUJMRV9DT0xVTU5fR1JPVVA6Ci0gICAgY2FzZSBUQUJMRV9DT0xVTU46Ci0gICAgY2Fz
ZSBUQUJMRV9DRUxMOgotICAgIGNhc2UgVEFCTEVfQ0FQVElPTjoKLSAgICAgICAgcmV0dXJuIEJM
T0NLOwotICAgIGNhc2UgTk9ORToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBOT05FOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gQkxPQ0s7Ci19Ci0KLS8vIENTUyByZXF1aXJlcyB0ZXh0LWRlY29yYXRpb24gdG8gYmUg
cmVzZXQgYXQgZWFjaCBET00gZWxlbWVudCBmb3IgdGFibGVzLCAKLS8vIGlubGluZSBibG9ja3Ms
IGlubGluZSB0YWJsZXMsIHJ1bi1pbnMsIHNoYWRvdyBET00gY3Jvc3NpbmdzLCBmbG9hdGluZyBl
bGVtZW50cywKLS8vIGFuZCBhYnNvbHV0ZSBvciByZWxhdGl2ZWx5IHBvc2l0aW9uZWQgZWxlbWVu
dHMuCi1zdGF0aWMgYm9vbCBkb2VzTm90SW5oZXJpdFRleHREZWNvcmF0aW9uKFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCogZSkKLXsKLSAgICByZXR1cm4gc3R5bGUtPmRpc3BsYXkoKSA9PSBU
QUJMRSB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9UQUJMRSB8fCBzdHlsZS0+ZGlzcGxh
eSgpID09IFJVTl9JTgotICAgICAgICB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9CTE9D
SyB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9CT1ggfHwgaXNBdFNoYWRvd0JvdW5kYXJ5
KGUpCi0gICAgICAgIHx8IHN0eWxlLT5pc0Zsb2F0aW5nKCkgfHwgc3R5bGUtPmhhc091dE9mRmxv
d1Bvc2l0aW9uKCk7Ci19Ci0KLXN0YXRpYyBib29sIGlzRGlzcGxheUZsZXhpYmxlQm94KEVEaXNw
bGF5IGRpc3BsYXkpCi17Ci0gICAgcmV0dXJuIGRpc3BsYXkgPT0gRkxFWCB8fCBkaXNwbGF5ID09
IElOTElORV9GTEVYOwotfQotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEX09WRVJGTE9XX1NDUk9M
TElORykKLXN0YXRpYyBib29sIGlzU2Nyb2xsYWJsZU92ZXJmbG93KEVPdmVyZmxvdyBvdmVyZmxv
dykKLXsKLSAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT1NDUk9MTCB8fCBvdmVyZmxvdyA9PSBPQVVU
TyB8fCBvdmVyZmxvdyA9PSBPT1ZFUkxBWTsKLX0KLSNlbmRpZgotCi12b2lkIFN0eWxlUmVzb2x2
ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlLCBFbGVtZW50ICplKQotewotICAgIEFTU0VSVChwYXJlbnRTdHlsZSk7Ci0KLSAg
ICAvLyBDYWNoZSBvdXIgb3JpZ2luYWwgZGlzcGxheS4KLSAgICBzdHlsZS0+c2V0T3JpZ2luYWxE
aXNwbGF5KHN0eWxlLT5kaXNwbGF5KCkpOwotCi0gICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgIT0g
Tk9ORSkgewotICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgPHRkPiB0aGF0IHNwZWNpZmllcyBhIGZs
b2F0IHByb3BlcnR5LCBpbiBxdWlya3MgbW9kZSB3ZSBqdXN0IGRyb3AgdGhlIGZsb2F0Ci0gICAg
ICAgIC8vIHByb3BlcnR5LgotICAgICAgICAvLyBTaXRlcyBhbHNvIGNvbW1vbmx5IHVzZSBkaXNw
bGF5OmlubGluZS9ibG9jayBvbiA8dGQ+cyBhbmQgPHRhYmxlPnMuIEluIHF1aXJrcyBtb2RlIHdl
IGZvcmNlCi0gICAgICAgIC8vIHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlw
ZXMuCi0gICAgICAgIGlmIChkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSAmJiBlKSB7Ci0gICAg
ICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZSh0ZFRhZykpIHsKLSAgICAgICAgICAgICAgICBzdHls
ZS0+c2V0RGlzcGxheShUQUJMRV9DRUxMKTsKLSAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Rmxv
YXRpbmcoTm9GbG9hdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSFRNTFRhYmxlRWxlbWVu
dChlKSkKLSAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShzdHlsZS0+aXNEaXNwbGF5
SW5saW5lVHlwZSgpID8gSU5MSU5FX1RBQkxFIDogVEFCTEUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGUgJiYgKGUtPmhhc1RhZ05hbWUodGRUYWcpIHx8IGUtPmhhc1RhZ05hbWUodGhUYWcp
KSkgewotICAgICAgICAgICAgaWYgKHN0eWxlLT53aGl0ZVNwYWNlKCkgPT0gS0hUTUxfTk9XUkFQ
KSB7Ci0gICAgICAgICAgICAgICAgLy8gRmlndXJlIG91dCBpZiB3ZSBhcmUgcmVhbGx5IG5vd3Jh
cHBpbmcgb3IgaWYgd2Ugc2hvdWxkIGp1c3QKLSAgICAgICAgICAgICAgICAvLyB1c2Ugbm9ybWFs
IGluc3RlYWQuIElmIHRoZSB3aWR0aCBvZiB0aGUgY2VsbCBpcyBmaXhlZCwgdGhlbgotICAgICAg
ICAgICAgICAgIC8vIHdlIGRvbid0IGFjdHVhbGx5IHVzZSBOT1dSQVAuCi0gICAgICAgICAgICAg
ICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzRml4ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgc3R5
bGUtPnNldFdoaXRlU3BhY2UoTk9STUFMKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKE5PV1JBUCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUYWJsZXMgbmV2ZXIgc3VwcG9ydCB0aGUgLXdlYmtp
dC0qIHZhbHVlcyBmb3IgdGV4dC1hbGlnbiBhbmQgd2lsbCByZXNldCBiYWNrIHRvIHRoZSBkZWZh
dWx0LgotICAgICAgICBpZiAoZSAmJiBpc0hUTUxUYWJsZUVsZW1lbnQoZSkgJiYgKHN0eWxlLT50
ZXh0QWxpZ24oKSA9PSBXRUJLSVRfTEVGVCB8fCBzdHlsZS0+dGV4dEFsaWduKCkgPT0gV0VCS0lU
X0NFTlRFUiB8fCBzdHlsZS0+dGV4dEFsaWduKCkgPT0gV0VCS0lUX1JJR0hUKSkKLSAgICAgICAg
ICAgIHN0eWxlLT5zZXRUZXh0QWxpZ24oVEFTVEFSVCk7Ci0KLSAgICAgICAgLy8gRnJhbWVzIGFu
ZCBmcmFtZXNldHMgbmV2ZXIgaG9ub3IgcG9zaXRpb246cmVsYXRpdmUgb3IgcG9zaXRpb246YWJz
b2x1dGUuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvCi0gICAgICAgIC8vIGZpeCBhIGNyYXNoIHdoZXJl
IGEgc2l0ZSB0cmllcyB0byBwb3NpdGlvbiB0aGVzZSBvYmplY3RzLiBUaGV5IGFsc28gbmV2ZXIg
aG9ub3IgZGlzcGxheS4KLSAgICAgICAgaWYgKGUgJiYgKGUtPmhhc1RhZ05hbWUoZnJhbWVUYWcp
IHx8IGUtPmhhc1RhZ05hbWUoZnJhbWVzZXRUYWcpKSkgewotICAgICAgICAgICAgc3R5bGUtPnNl
dFBvc2l0aW9uKFN0YXRpY1Bvc2l0aW9uKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5
KEJMT0NLKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJ1YnkgdGV4dCBkb2VzIG5vdCBzdXBw
b3J0IGZsb2F0IG9yIHBvc2l0aW9uLiBUaGlzIG1pZ2h0IGNoYW5nZSB3aXRoIGV2b2x1dGlvbiBv
ZiB0aGUgc3BlY2lmaWNhdGlvbi4KLSAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZShydFRh
ZykpIHsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQb3NpdGlvbihTdGF0aWNQb3NpdGlvbik7Ci0g
ICAgICAgICAgICBzdHlsZS0+c2V0RmxvYXRpbmcoTm9GbG9hdCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGJlIG92ZXJyaWRpbmcgc3RhcnQvLXdlYmtpdC1h
dXRvIGxpa2UgdGhpcy4gRG8gaXQgaW4gaHRtbC5jc3MgaW5zdGVhZC4KLSAgICAgICAgLy8gVGFi
bGUgaGVhZGVycyB3aXRoIGEgdGV4dC1hbGlnbiBvZiAtd2Via2l0LWF1dG8gd2lsbCBjaGFuZ2Ug
dGhlIHRleHQtYWxpZ24gdG8gY2VudGVyLgotICAgICAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1l
KHRoVGFnKSAmJiBzdHlsZS0+dGV4dEFsaWduKCkgPT0gVEFTVEFSVCkKLSAgICAgICAgICAgIHN0
eWxlLT5zZXRUZXh0QWxpZ24oQ0VOVEVSKTsKLQotICAgICAgICBpZiAoZSAmJiBlLT5oYXNUYWdO
YW1lKGxlZ2VuZFRhZykpCi0gICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0K
LSAgICAgICAgLy8gQWJzb2x1dGUvZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cywgZmxvYXRpbmcg
ZWxlbWVudHMgYW5kIHRoZSBkb2N1bWVudCBlbGVtZW50IG5lZWQgYmxvY2stbGlrZSBvdXRzaWRl
IGRpc3BsYXkuCi0gICAgICAgIGlmIChzdHlsZS0+aGFzT3V0T2ZGbG93UG9zaXRpb24oKSB8fCBz
dHlsZS0+aXNGbG9hdGluZygpIHx8IChlICYmIGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVu
dCgpID09IGUpKQotICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoZXF1aXZhbGVudEJsb2Nr
RGlzcGxheShzdHlsZS0+ZGlzcGxheSgpLCBzdHlsZS0+aXNGbG9hdGluZygpLCAhZG9jdW1lbnQo
KS0+aW5RdWlya3NNb2RlKCkpKTsKLQotICAgICAgICAvLyBGSVhNRTogRG9uJ3Qgc3VwcG9ydCB0
aGlzIG11dGF0aW9uIGZvciBwc2V1ZG8gc3R5bGVzIGxpa2UgZmlyc3QtbGV0dGVyIG9yIGZpcnN0
LWxpbmUsIHNpbmNlIGl0J3Mgbm90IGNvbXBsZXRlbHkKLSAgICAgICAgLy8gY2xlYXIgaG93IHRo
YXQgc2hvdWxkIHdvcmsuCi0gICAgICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IElOTElORSAm
JiBzdHlsZS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8gJiYgc3R5bGUtPndyaXRpbmdNb2RlKCkg
IT0gcGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0RGlz
cGxheShJTkxJTkVfQkxPQ0spOwotCi0gICAgICAgIC8vIEFmdGVyIHBlcmZvcm1pbmcgdGhlIGRp
c3BsYXkgbXV0YXRpb24sIGNoZWNrIHRhYmxlIHJvd3MuIFdlIGRvIG5vdCBob25vciBwb3NpdGlv
bjpyZWxhdGl2ZSBvciBwb3NpdGlvbjpzdGlja3kgb24KLSAgICAgICAgLy8gdGFibGUgcm93cyBv
ciBjZWxscy4gVGhpcyBoYXMgYmVlbiBlc3RhYmxpc2hlZCBmb3IgcG9zaXRpb246cmVsYXRpdmUg
aW4gQ1NTMi4xIChhbmQgY2F1c2VkIGEgY3Jhc2ggaW4gY29udGFpbmluZ0Jsb2NrKCkKLSAgICAg
ICAgLy8gb24gc29tZSBzaXRlcykuCi0gICAgICAgIGlmICgoc3R5bGUtPmRpc3BsYXkoKSA9PSBU
QUJMRV9IRUFERVJfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1dfR1JPVVAK
LSAgICAgICAgICAgIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfRk9PVEVSX0dST1VQIHx8
IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XKQotICAgICAgICAgICAgJiYgc3R5bGUtPmhh
c0luRmxvd1Bvc2l0aW9uKCkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oU3RhdGlj
UG9zaXRpb24pOwotCi0gICAgICAgIC8vIHdyaXRpbmctbW9kZSBkb2VzIG5vdCBhcHBseSB0byB0
YWJsZSByb3cgZ3JvdXBzLCB0YWJsZSBjb2x1bW4gZ3JvdXBzLCB0YWJsZSByb3dzLCBhbmQgdGFi
bGUgY29sdW1ucy4KLSAgICAgICAgLy8gRklYTUU6IFRhYmxlIGNlbGxzIHNob3VsZCBiZSBhbGxv
d2VkIHRvIGJlIHBlcnBlbmRpY3VsYXIgb3IgZmxpcHBlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHRh
YmxlLCB0aG91Z2guCi0gICAgICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0NPTFVN
TiB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX0NPTFVNTl9HUk9VUCB8fCBzdHlsZS0+ZGlz
cGxheSgpID09IFRBQkxFX0ZPT1RFUl9HUk9VUAotICAgICAgICAgICAgfHwgc3R5bGUtPmRpc3Bs
YXkoKSA9PSBUQUJMRV9IRUFERVJfR1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9S
T1cgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1dfR1JPVVAKLSAgICAgICAgICAgIHx8
IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfQ0VMTCkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRX
cml0aW5nTW9kZShwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSk7Ci0KLSAgICAgICAgLy8gRklY
TUU6IFNpbmNlIHdlIGRvbid0IHN1cHBvcnQgYmxvY2stZmxvdyBvbiBmbGV4aWJsZSBib3hlcyB5
ZXQsIGRpc2FsbG93IHNldHRpbmcKLSAgICAgICAgLy8gb2YgYmxvY2stZmxvdyB0byBhbnl0aGlu
ZyBvdGhlciB0aGFuIFRvcFRvQm90dG9tV3JpdGluZ01vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjQxOCAtIEZsZXhpYmxlIGJveCBzdXBw
b3J0LgotICAgICAgICBpZiAoc3R5bGUtPndyaXRpbmdNb2RlKCkgIT0gVG9wVG9Cb3R0b21Xcml0
aW5nTW9kZSAmJiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBCT1ggfHwgc3R5bGUtPmRpc3BsYXkoKSA9
PSBJTkxJTkVfQk9YKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRXcml0aW5nTW9kZShUb3BUb0Jv
dHRvbVdyaXRpbmdNb2RlKTsKLQotICAgICAgICBpZiAoaXNEaXNwbGF5RmxleGlibGVCb3gocGFy
ZW50U3R5bGUtPmRpc3BsYXkoKSkpIHsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhO
b0Zsb2F0KTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KGVxdWl2YWxlbnRCbG9ja0Rp
c3BsYXkoc3R5bGUtPmRpc3BsYXkoKSwgc3R5bGUtPmlzRmxvYXRpbmcoKSwgIWRvY3VtZW50KCkt
PmluUXVpcmtzTW9kZSgpKSk7Ci0gICAgICAgIH0KLQotI2lmIEVOQUJMRShESUFMT0dfRUxFTUVO
VCkKLSAgICAgICAgLy8gUGVyIHRoZSBzcGVjLCBwb3NpdGlvbiAnc3RhdGljJyBhbmQgJ3JlbGF0
aXZlJyBpbiB0aGUgdG9wIGxheWVyIGNvbXB1dGUgdG8gJ2Fic29sdXRlJy4KLSAgICAgICAgaWYg
KGUgJiYgZS0+aXNJblRvcExheWVyKCkgJiYgKHN0eWxlLT5wb3NpdGlvbigpID09IFN0YXRpY1Bv
c2l0aW9uIHx8IHN0eWxlLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24pKSB7Ci0gICAg
ICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oQWJzb2x1dGVQb3NpdGlvbik7Ci0gICAgICAgICAg
ICBzdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KLQot
ICAgIC8vIE1ha2Ugc3VyZSBvdXIgei1pbmRleCB2YWx1ZSBpcyBvbmx5IGFwcGxpZWQgaWYgdGhl
IG9iamVjdCBpcyBwb3NpdGlvbmVkLgotICAgIGlmIChzdHlsZS0+cG9zaXRpb24oKSA9PSBTdGF0
aWNQb3NpdGlvbiAmJiAhaXNEaXNwbGF5RmxleGlibGVCb3gocGFyZW50U3R5bGUtPmRpc3BsYXko
KSkpCi0gICAgICAgIHN0eWxlLT5zZXRIYXNBdXRvWkluZGV4KCk7Ci0KLSAgICAvLyBBdXRvIHot
aW5kZXggYmVjb21lcyAwIGZvciB0aGUgcm9vdCBlbGVtZW50IGFuZCB0cmFuc3BhcmVudCBvYmpl
Y3RzLiBUaGlzIHByZXZlbnRzCi0gICAgLy8gY2FzZXMgd2hlcmUgb2JqZWN0cyB0aGF0IHNob3Vs
ZCBiZSBibGVuZGVkIGFzIGEgc2luZ2xlIHVuaXQgZW5kIHVwIHdpdGggYSBub24tdHJhbnNwYXJl
bnQKLSAgICAvLyBvYmplY3Qgd2VkZ2VkIGluIGJldHdlZW4gdGhlbS4gQXV0byB6LWluZGV4IGFs
c28gYmVjb21lcyAwIGZvciBvYmplY3RzIHRoYXQgc3BlY2lmeSB0cmFuc2Zvcm1zL21hc2tzL3Jl
ZmxlY3Rpb25zLgotICAgIGlmIChzdHlsZS0+aGFzQXV0b1pJbmRleCgpICYmICgoZSAmJiBlLT5k
b2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSBlKQotICAgICAgICB8fCBzdHlsZS0+b3Bh
Y2l0eSgpIDwgMS4wZgotICAgICAgICB8fCBzdHlsZS0+aGFzVHJhbnNmb3JtUmVsYXRlZFByb3Bl
cnR5KCkKLSAgICAgICAgfHwgc3R5bGUtPmhhc01hc2soKQotICAgICAgICB8fCBzdHlsZS0+Y2xp
cFBhdGgoKQotICAgICAgICB8fCBzdHlsZS0+Ym94UmVmbGVjdCgpCi0gICAgICAgIHx8IHN0eWxl
LT5oYXNGaWx0ZXIoKQotICAgICAgICB8fCBzdHlsZS0+aGFzQmxlbmRNb2RlKCkKLSAgICAgICAg
fHwgc3R5bGUtPnBvc2l0aW9uKCkgPT0gU3RpY2t5UG9zaXRpb24KLSAgICAgICAgfHwgKHN0eWxl
LT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24gJiYgZSAmJiBlLT5kb2N1bWVudCgpLT5wYWdl
KCkgJiYgZS0+ZG9jdW1lbnQoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5maXhlZFBvc2l0aW9uQ3Jl
YXRlc1N0YWNraW5nQ29udGV4dCgpKQotI2lmIEVOQUJMRShESUFMT0dfRUxFTUVOVCkKLSAgICAg
ICAgfHwgKGUgJiYgZS0+aXNJblRvcExheWVyKCkpCi0jZW5kaWYKLSAgICAgICAgKSkKLSAgICAg
ICAgc3R5bGUtPnNldFpJbmRleCgwKTsKLQotICAgIC8vIFRleHRhcmVhIGNvbnNpZGVycyBvdmVy
ZmxvdyB2aXNpYmxlIGFzIGF1dG8uCi0gICAgaWYgKGUgJiYgaXNIVE1MVGV4dEFyZWFFbGVtZW50
KGUpKSB7Ci0gICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goc3R5bGUtPm92ZXJmbG93WCgpID09
IE9WSVNJQkxFID8gT0FVVE8gOiBzdHlsZS0+b3ZlcmZsb3dYKCkpOwotICAgICAgICBzdHlsZS0+
c2V0T3ZlcmZsb3dZKHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPVklTSUJMRSA/IE9BVVRPIDogc3R5
bGUtPm92ZXJmbG93WSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoZG9lc05vdEluaGVyaXRUZXh0RGVj
b3JhdGlvbihzdHlsZSwgZSkpCi0gICAgICAgIHN0eWxlLT5zZXRUZXh0RGVjb3JhdGlvbnNJbkVm
ZmVjdChzdHlsZS0+dGV4dERlY29yYXRpb24oKSk7Ci0gICAgZWxzZQotICAgICAgICBzdHlsZS0+
YWRkVG9UZXh0RGVjb3JhdGlvbnNJbkVmZmVjdChzdHlsZS0+dGV4dERlY29yYXRpb24oKSk7Ci0K
LSAgICAvLyBJZiBlaXRoZXIgb3ZlcmZsb3cgdmFsdWUgaXMgbm90IHZpc2libGUsIGNoYW5nZSB0
byBhdXRvLgotICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT01BUlFVRUUgJiYgc3R5bGUt
Pm92ZXJmbG93WSgpICE9IE9NQVJRVUVFKQotICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9N
QVJRVUVFKTsKLSAgICBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT01BUlFVRUUgJiYg
c3R5bGUtPm92ZXJmbG93WCgpICE9IE9NQVJRVUVFKQotICAgICAgICBzdHlsZS0+c2V0T3ZlcmZs
b3dYKE9NQVJRVUVFKTsKLSAgICBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT1ZJU0lC
TEUgJiYgc3R5bGUtPm92ZXJmbG93WSgpICE9IE9WSVNJQkxFKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBPbmNlIHdlIGltcGxlbWVudCBwYWdpbmF0aW9uIGNvbnRyb2xzLCBvdmVyZmxvdy14IHNob3Vs
ZCBkZWZhdWx0IHRvIGhpZGRlbgotICAgICAgICAvLyBpZiBvdmVyZmxvdy15IGlzIHNldCB0byAt
d2Via2l0LXBhZ2VkLXggb3IgLXdlYmtpdC1wYWdlLXkuIEZvciBub3csIHdlJ2xsIGxldCBpdAot
ICAgICAgICAvLyBkZWZhdWx0IHRvIGF1dG8gc28gd2UgY2FuIGF0IGxlYXN0IHNjcm9sbCB0aHJv
dWdoIHRoZSBwYWdlcy4KLSAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WChPQVVUTyk7Ci0gICAg
fSBlbHNlIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1ZJU0lCTEUgJiYgc3R5bGUtPm92ZXJm
bG93WCgpICE9IE9WSVNJQkxFKQotICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9BVVRPKTsK
LQotICAgIC8vIENhbGwgc2V0U3R5bGVzRm9yUGFnaW5hdGlvbk1vZGUoKSBpZiBhIHBhZ2luYXRp
b24gbW9kZSBpcyBzZXQgZm9yIGFueSBub24tcm9vdCBlbGVtZW50cy4gSWYgdGhlc2UKLSAgICAv
LyBzdHlsZXMgYXJlIHNwZWNpZmllZCBvbiBhIHJvb3QgZWxlbWVudCwgdGhlbiB0aGV5IHdpbGwg
YmUgaW5jb3Jwb3JhdGVkIGluCi0gICAgLy8gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JEb2N1bWVu
dCgpLgotICAgIGlmICgoc3R5bGUtPm92ZXJmbG93WSgpID09IE9QQUdFRFggfHwgc3R5bGUtPm92
ZXJmbG93WSgpID09IE9QQUdFRFkpICYmICEoZSAmJiAoZS0+aGFzVGFnTmFtZShodG1sVGFnKSB8
fCBlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSkpCi0gICAgICAgIHN0eWxlLT5zZXRDb2x1bW5TdHls
ZXNGcm9tUGFnaW5hdGlvbk1vZGUoV2ViQ29yZTo6cGFnaW5hdGlvbk1vZGVGb3JSZW5kZXJTdHls
ZShzdHlsZSkpOwotCi0gICAgLy8gVGFibGUgcm93cywgc2VjdGlvbnMgYW5kIHRoZSB0YWJsZSBp
dHNlbGYgd2lsbCBzdXBwb3J0IG92ZXJmbG93OmhpZGRlbiBhbmQgd2lsbCBpZ25vcmUgc2Nyb2xs
L2F1dG8uCi0gICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgdGFibGUgc2VjdGlvbnMgd2lsbCBzdXBw
b3J0IGF1dG8gYW5kIHNjcm9sbC4KLSAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRSB8
fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9UQUJMRQotICAgICAgICB8fCBzdHlsZS0+ZGlz
cGxheSgpID09IFRBQkxFX1JPV19HUk9VUCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFX1JP
VykgewotICAgICAgICBpZiAoc3R5bGUtPm92ZXJmbG93WCgpICE9IE9WSVNJQkxFICYmIHN0eWxl
LT5vdmVyZmxvd1goKSAhPSBPSElEREVOKQotICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93
WChPVklTSUJMRSk7Ci0gICAgICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT1ZJU0lCTEUg
JiYgc3R5bGUtPm92ZXJmbG93WSgpICE9IE9ISURERU4pCi0gICAgICAgICAgICBzdHlsZS0+c2V0
T3ZlcmZsb3dZKE9WSVNJQkxFKTsKLSAgICB9Ci0KLSAgICAvLyBNZW51bGlzdHMgc2hvdWxkIGhh
dmUgdmlzaWJsZSBvdmVyZmxvdwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVs
aXN0UGFydCkgewotICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9WSVNJQkxFKTsKLSAgICAg
ICAgc3R5bGUtPnNldE92ZXJmbG93WShPVklTSUJMRSk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKEFD
Q0VMRVJBVEVEX09WRVJGTE9XX1NDUk9MTElORykKLSAgICAvLyBUb3VjaCBvdmVyZmxvdyBzY3Jv
bGxpbmcgY3JlYXRlcyBhIHN0YWNraW5nIGNvbnRleHQuCi0gICAgaWYgKHN0eWxlLT5oYXNBdXRv
WkluZGV4KCkgJiYgc3R5bGUtPnVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcoKSAmJiAoaXNTY3Jv
bGxhYmxlT3ZlcmZsb3coc3R5bGUtPm92ZXJmbG93WCgpKSB8fCBpc1Njcm9sbGFibGVPdmVyZmxv
dyhzdHlsZS0+b3ZlcmZsb3dZKCkpKSkKLSAgICAgICAgc3R5bGUtPnNldFpJbmRleCgwKTsKLSNl
bmRpZgotCi0gICAgLy8gQ3VsbCBvdXQgYW55IHVzZWxlc3MgbGF5ZXJzIGFuZCBhbHNvIHJlcGVh
dCBwYXR0ZXJucyBpbnRvIGFkZGl0aW9uYWwgbGF5ZXJzLgotICAgIHN0eWxlLT5hZGp1c3RCYWNr
Z3JvdW5kTGF5ZXJzKCk7Ci0gICAgc3R5bGUtPmFkanVzdE1hc2tMYXllcnMoKTsKLQotICAgIC8v
IERvIHRoZSBzYW1lIGZvciBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucy4KLSAgICBzdHlsZS0+
YWRqdXN0QW5pbWF0aW9ucygpOwotICAgIHN0eWxlLT5hZGp1c3RUcmFuc2l0aW9ucygpOwotCi0g
ICAgLy8gSW1wb3J0YW50OiBJbnRyaW5zaWMgbWFyZ2lucyBnZXQgYWRkZWQgdG8gY29udHJvbHMg
YmVmb3JlIHRoZSB0aGVtZSBoYXMgYWRqdXN0ZWQgdGhlIHN0eWxlLCBzaW5jZSB0aGUgdGhlbWUg
d2lsbAotICAgIC8vIGFsdGVyIGZvbnRzIGFuZCBoZWlnaHRzL3dpZHRocy4KLSAgICBpZiAoZSAm
JiBlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpICYmIHN0eWxlLT5mb250U2l6ZSgpID49IDExKSB7
Ci0gICAgICAgIC8vIERvbid0IGFwcGx5IGludHJpbnNpYyBtYXJnaW5zIHRvIGltYWdlIGJ1dHRv
bnMuIFRoZSBkZXNpZ25lciBrbm93cyBob3cgYmlnIHRoZSBpbWFnZXMgYXJlLAotICAgICAgICAv
LyBzbyB3ZSBoYXZlIHRvIHRyZWF0IGFsbCBpbWFnZSBidXR0b25zIGFzIHRob3VnaCB0aGV5IHdl
cmUgZXhwbGljaXRseSBzaXplZC4KLSAgICAgICAgaWYgKCFpc0hUTUxJbnB1dEVsZW1lbnQoZSkg
fHwgIXRvSFRNTElucHV0RWxlbWVudChlKS0+aXNJbWFnZUJ1dHRvbigpKQotICAgICAgICAgICAg
YWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSk7Ci0gICAgfQotCi0gICAgLy8gTGV0IHRoZSB0aGVt
ZSBhbHNvIGhhdmUgYSBjcmFjayBhdCBhZGp1c3RpbmcgdGhlIHN0eWxlLgotICAgIGlmIChzdHls
ZS0+aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkt
PmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBtX3N0YXRlLmhhc1VBQXBwZWFyYW5jZSgpLCBt
X3N0YXRlLmJvcmRlckRhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kRGF0YSgpLCBtX3N0YXRlLmJh
Y2tncm91bmRDb2xvcigpKTsKLQotICAgIC8vIElmIHdlIGhhdmUgZmlyc3QtbGV0dGVyIHBzZXVk
byBzdHlsZSwgZG8gbm90IHNoYXJlIHRoaXMgc3R5bGUuCi0gICAgaWYgKHN0eWxlLT5oYXNQc2V1
ZG9TdHlsZShGSVJTVF9MRVRURVIpKQotICAgICAgICBzdHlsZS0+c2V0VW5pcXVlKCk7Ci0KLSAg
ICAvLyBGSVhNRTogd2hlbiBkcm9wcGluZyB0aGUgLXdlYmtpdCBwcmVmaXggb24gdHJhbnNmb3Jt
LXN0eWxlLCB3ZSBzaG91bGQgYWxzbyBoYXZlIG9wYWNpdHkgPCAxIGNhdXNlIGZsYXR0ZW5pbmcu
Ci0gICAgaWYgKHN0eWxlLT5wcmVzZXJ2ZXMzRCgpICYmIChzdHlsZS0+b3ZlcmZsb3dYKCkgIT0g
T1ZJU0lCTEUKLSAgICAgICAgfHwgc3R5bGUtPm92ZXJmbG93WSgpICE9IE9WSVNJQkxFCi0gICAg
ICAgIHx8IHN0eWxlLT5oYXNGaWx0ZXIoKSkpCi0gICAgICAgIHN0eWxlLT5zZXRUcmFuc2Zvcm1T
dHlsZTNEKFRyYW5zZm9ybVN0eWxlM0RGbGF0KTsKLQotICAgIC8vIFNlYW1sZXNzIGlmcmFtZXMg
YmVoYXZlIGxpa2UgYmxvY2tzLiBNYXAgdGhlaXIgZGlzcGxheSB0byBpbmxpbmUtYmxvY2sgd2hl
biBtYXJrZWQgaW5saW5lLgotICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSAm
JiBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORSAmJiB0b0hUTUxJRnJhbWVFbGVtZW50KGUpLT5z
aG91bGREaXNwbGF5U2VhbWxlc3NseSgpKQotICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShJTkxJ
TkVfQkxPQ0spOwotCi0gICAgYWRqdXN0R3JpZEl0ZW1Qb3NpdGlvbihzdHlsZSk7Ci0KLSNpZiBF
TkFCTEUoU1ZHKQotICAgIGlmIChlICYmIGUtPmlzU1ZHRWxlbWVudCgpKSB7Ci0gICAgICAgIC8v
IFNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9tYXNraW5nLmh0bWwjT3ZlcmZsb3dQcm9w
ZXJ0eQotICAgICAgICBpZiAoc3R5bGUtPm92ZXJmbG93WSgpID09IE9TQ1JPTEwpCi0gICAgICAg
ICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9ISURERU4pOwotICAgICAgICBlbHNlIGlmIChzdHls
ZS0+b3ZlcmZsb3dZKCkgPT0gT0FVVE8pCi0gICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZ
KE9WSVNJQkxFKTsKLQotICAgICAgICBpZiAoc3R5bGUtPm92ZXJmbG93WCgpID09IE9TQ1JPTEwp
Ci0gICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dYKE9ISURERU4pOwotICAgICAgICBlbHNl
IGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT0FVVE8pCi0gICAgICAgICAgICBzdHlsZS0+c2V0
T3ZlcmZsb3dYKE9WSVNJQkxFKTsKLQotICAgICAgICAvLyBPbmx5IHRoZSByb290IDxzdmc+IGVs
ZW1lbnQgaW4gYW4gU1ZHIGRvY3VtZW50IGZyYWdtZW50IHRyZWUgaG9ub3JzIGNzcyBwb3NpdGlv
bgotICAgICAgICBpZiAoIShlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpICYmIGUtPnBh
cmVudE5vZGUoKSAmJiAhZS0+cGFyZW50Tm9kZSgpLT5pc1NWR0VsZW1lbnQoKSkpCi0gICAgICAg
ICAgICBzdHlsZS0+c2V0UG9zaXRpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxQb3NpdGlvbigpKTsK
LQotICAgICAgICAvLyBSZW5kZXJTVkdSb290IGhhbmRsZXMgem9vbWluZyBmb3IgdGhlIHdob2xl
IFNWRyBzdWJ0cmVlLCBzbyBmb3JlaWduT2JqZWN0IGNvbnRlbnQgc2hvdWxkCi0gICAgICAgIC8v
IG5vdCBiZSBzY2FsZWQgYWdhaW4uCi0gICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKFNWR05hbWVz
Ojpmb3JlaWduT2JqZWN0VGFnKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRFZmZlY3RpdmVab29t
KFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBT
dHlsZVJlc29sdmVyOjphZGp1c3RHcmlkSXRlbVBvc2l0aW9uKFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKLXsKLSAgICAvLyBJZiBvcHBvc2luZyBncmlkLXBsYWNlbWVudCBwcm9wZXJ0aWVzIGJv
dGggc3BlY2lmeSBhIGdyaWQgc3BhbiwgdGhleSBib3RoIGNvbXB1dGUgdG8g4oCYYXV0b+KAmS4K
LSAgICBpZiAoc3R5bGUtPmdyaWRJdGVtQ29sdW1uU3RhcnQoKS5pc1NwYW4oKSAmJiBzdHlsZS0+
Z3JpZEl0ZW1Db2x1bW5FbmQoKS5pc1NwYW4oKSkgewotICAgICAgICBzdHlsZS0+c2V0R3JpZEl0
ZW1Db2x1bW5TdGFydChHcmlkUG9zaXRpb24oKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRHcmlkSXRl
bUNvbHVtbkVuZChHcmlkUG9zaXRpb24oKSk7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlLT5ncmlk
SXRlbVJvd1N0YXJ0KCkuaXNTcGFuKCkgJiYgc3R5bGUtPmdyaWRJdGVtUm93RW5kKCkuaXNTcGFu
KCkpIHsKLSAgICAgICAgc3R5bGUtPnNldEdyaWRJdGVtUm93U3RhcnQoR3JpZFBvc2l0aW9uKCkp
OwotICAgICAgICBzdHlsZS0+c2V0R3JpZEl0ZW1Sb3dFbmQoR3JpZFBvc2l0aW9uKCkpOwotICAg
IH0KLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblN0eWxlKEVsZW1lbnQqIHJl
Z2lvbkVsZW1lbnQpCi17Ci0gICAgLy8gRklYTUUgKEJVRyA3MjQ3Mik6IFdlIGRvbid0IGFkZCBA
LXdlYmtpdC1yZWdpb24gcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVu
dCwKLSAgICAvLyBzbyBhbGwgcmVnaW9uIHJ1bGVzIGFyZSBnbG9iYWwgYnkgZGVmYXVsdC4gVmVy
aWZ5IHdoZXRoZXIgdGhhdCBjYW4gc3RhbmQgb3IgbmVlZHMgY2hhbmdpbmcuCi0KLSAgICB1bnNp
Z25lZCBydWxlc1NpemUgPSBtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCktPm1fcmVnaW9uU2VsZWN0
b3JzQW5kUnVsZVNldHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxl
c1NpemU7ICsraSkgewotICAgICAgICBBU1NFUlQobV9ydWxlU2V0cy5hdXRob3JTdHlsZSgpLT5t
X3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnJ1bGVTZXQuZ2V0KCkpOwotICAgICAg
ICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCktPm1fcmVn
aW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkuc2VsZWN0b3IsIHJlZ2lvbkVsZW1lbnQpKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1fcnVsZVNldHMudXNl
clN0eWxlKCkpIHsKLSAgICAgICAgcnVsZXNTaXplID0gbV9ydWxlU2V0cy51c2VyU3R5bGUoKS0+
bV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5zaXplKCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBydWxlc1NpemU7ICsraSkgewotICAgICAgICAgICAgQVNTRVJUKG1fcnVs
ZVNldHMudXNlclN0eWxlKCktPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVs
ZVNldC5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihtX3J1bGVT
ZXRzLnVzZXJTdHlsZSgpLT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNlbGVj
dG9yLCByZWdpb25FbGVtZW50KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tG
b3JPcmllbnRhdGlvbkNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0gICAgRm9udE9yaWVu
dGF0aW9uIGZvbnRPcmllbnRhdGlvbjsKLSAgICBOb25DSktHbHlwaE9yaWVudGF0aW9uIGdseXBo
T3JpZW50YXRpb247Ci0gICAgZ2V0Rm9udEFuZEdseXBoT3JpZW50YXRpb24oc3R5bGUsIGZvbnRP
cmllbnRhdGlvbiwgZ2x5cGhPcmllbnRhdGlvbik7Ci0KLSAgICBjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICBpZiAo
Zm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCkgPT0gZm9udE9yaWVudGF0aW9uICYmIGZvbnRE
ZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gZ2x5cGhPcmllbnRhdGlvbikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgRm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pOwotICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXROb25DSktHbHlw
aE9yaWVudGF0aW9uKGdseXBoT3JpZW50YXRpb24pOwotICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5z
ZXRPcmllbnRhdGlvbihmb250T3JpZW50YXRpb24pOwotICAgIHN0eWxlLT5zZXRGb250RGVzY3Jp
cHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjp1cGRh
dGVGb250KCkKLXsKLSAgICBpZiAoIW1fc3RhdGUuZm9udERpcnR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc3RhdGUuc3R5bGUoKTsKLSAgICBjaGVj
a0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7Ci0g
ICAgY2hlY2tGb3Jab29tQ2hhbmdlKHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwotICAg
IGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2Uoc3R5bGUpOwotICAgIHN0eWxlLT5mb250KCkudXBk
YXRlKG1fZm9udFNlbGVjdG9yKTsKLSAgICBtX3N0YXRlLnNldEZvbnREaXJ0eShmYWxzZSk7Ci19
Ci0KLVZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1
bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKLXsKLSAg
ICByZXR1cm4gcHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoZSwgTk9QU0VVRE8sIHJ1bGVzVG9J
bmNsdWRlKTsKLX0KLQotVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+IFN0eWxlUmVzb2x2
ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFBzZXVkb0lkIHBzZXVk
b0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKLXsKLSAgICBpZiAoIWUgfHwgIWUtPmRvY3Vt
ZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQotICAgICAgICByZXR1cm4gVmVjdG9yPFJl
ZlB0cjxTdHlsZVJ1bGVCYXNlPiA+KCk7Ci0KLSAgICBpbml0RWxlbWVudChlKTsKLSAgICBtX3N0
YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZSwgMCk7Ci0KLSAgICBFbGVtZW50
UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IodGhpcywgbV9zdGF0ZSk7Ci0gICAgY29sbGVjdG9yLnNl
dE1vZGUoU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpOwotICAgIGNvbGxlY3Rvci5z
ZXRQc2V1ZG9TdHlsZVJlcXVlc3QoUHNldWRvU3R5bGVSZXF1ZXN0KHBzZXVkb0lkKSk7Ci0gICAg
Y29sbGVjdG9yLnNldE1lZGl1bShtX21lZGl1bS5nZXQoKSk7Ci0KLSAgICBpZiAocnVsZXNUb0lu
Y2x1ZGUgJiBVQUFuZFVzZXJDU1NSdWxlcykgewotICAgICAgICAvLyBGaXJzdCB3ZSBtYXRjaCBy
dWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50IHNoZWV0LgotICAgICAgICBjb2xsZWN0b3IubWF0Y2hV
QVJ1bGVzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBy
dWxlcy4KLSAgICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICAg
ICAgY29sbGVjdG9yLm1hdGNoVXNlclJ1bGVzKHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxl
cyk7Ci0gICAgfQotCi0gICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIChydWxl
c1RvSW5jbHVkZSAmIEF1dGhvckNTU1J1bGVzKSkgewotICAgICAgICBjb2xsZWN0b3Iuc2V0U2Ft
ZU9yaWdpbk9ubHkoIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpKTsKLQot
ICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4KLSAgICAgICAgY29s
bGVjdG9yLm1hdGNoQXV0aG9yUnVsZXMocnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gY29sbGVjdG9yLm1hdGNoZWRSdWxlTGlzdCgpOwotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0aGlzIGlzIG1vc3RseSBib3Jpbmcg
c3R1ZmYgb24gaG93IHRvIGFwcGx5IGEgY2VydGFpbiBydWxlIHRvIHRoZSByZW5kZXJzdHlsZS4u
LgotCi1MZW5ndGggU3R5bGVSZXNvbHZlcjo6Y29udmVydFRvSW50TGVuZ3RoKGNvbnN0IENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKLXsKLSAgICBy
ZXR1cm4gcHJpbWl0aXZlVmFsdWUgPyBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZp
eGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252
ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lv
bj4oc3R5bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGllcikgOiBMZW5ndGgoVW5kZWZpbmVkKTsKLX0K
LQotTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGNvbnN0IENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKLXsKLSAgICBy
ZXR1cm4gcHJpbWl0aXZlVmFsdWUgPyBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZp
eGVkRmxvYXRDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVy
c2lvbiB8IEZyYWN0aW9uQ29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+
KHN0eWxlLCByb290U3R5bGUsIG11bHRpcGxpZXIpIDogTGVuZ3RoKFVuZGVmaW5lZCk7Ci19Ci0K
LXRlbXBsYXRlIDxTdHlsZVJlc29sdmVyOjpTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCog
cHJvcGVydGllcywgU3R5bGVSdWxlKiBydWxlLCBib29sIGlzSW1wb3J0YW50LCBib29sIGluaGVy
aXRlZE9ubHksIFByb3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUpCi17
Ci0gICAgQVNTRVJUKChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUgIT0gUHJvcGVydHlXaGl0ZWxpc3RS
ZWdpb24pIHx8IG1fc3RhdGUucmVnaW9uRm9yU3R5bGluZygpKTsKLSAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxs
UHJvY2Vzc1J1bGUoZG9jdW1lbnQoKSwgcnVsZSwgdGhpcyk7Ci0KLSAgICB1bnNpZ25lZCBwcm9w
ZXJ0eUNvdW50ID0gcHJvcGVydGllcy0+cHJvcGVydHlDb3VudCgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyArK2kpIHsKLSAgICAgICAgU3R5bGVQcm9wZXJ0
eVNldDo6UHJvcGVydHlSZWZlcmVuY2UgY3VycmVudCA9IHByb3BlcnRpZXMtPnByb3BlcnR5QXQo
aSk7Ci0gICAgICAgIGlmIChpc0ltcG9ydGFudCAhPSBjdXJyZW50LmlzSW1wb3J0YW50KCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGluaGVyaXRlZE9ubHkgJiYgIWN1cnJl
bnQuaXNJbmhlcml0ZWQoKSkgewotICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IHZhbHVl
IGlzIGV4cGxpY2l0bHkgaW5oZXJpdGVkLCB3ZSBuZWVkIHRvIGFwcGx5IGZ1cnRoZXIgbm9uLWlu
aGVyaXRlZCBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAvLyBhcyB0aGV5IG1pZ2h0IG92ZXJyaWRl
IHRoZSB2YWx1ZSBpbmhlcml0ZWQgaGVyZS4gRm9yIHRoaXMgcmVhc29uIHdlIGRvbid0IGFsbG93
IGRlY2xhcmF0aW9ucyB3aXRoCi0gICAgICAgICAgICAvLyBleHBsaWNpdGx5IGluaGVyaXRlZCBw
cm9wZXJ0aWVzIHRvIGJlIGNhY2hlZC4KLSAgICAgICAgICAgIEFTU0VSVCghY3VycmVudC52YWx1
ZSgpLT5pc0luaGVyaXRlZFZhbHVlKCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLSAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSA9IGN1cnJlbnQuaWQoKTsKLQotICAg
ICAgICBpZiAocHJvcGVydHlXaGl0ZWxpc3RUeXBlID09IFByb3BlcnR5V2hpdGVsaXN0UmVnaW9u
ICYmICFTdHlsZVJlc29sdmVyOjppc1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShwcm9wZXJ0eSkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgICAg
IGlmIChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPT0gUHJvcGVydHlXaGl0ZWxpc3RDdWUgJiYgIVN0
eWxlUmVzb2x2ZXI6OmlzVmFsaWRDdWVTdHlsZVByb3BlcnR5KHByb3BlcnR5KSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotI2VuZGlmCi0gICAgICAgIHN3aXRjaCAocGFzcykgewotI2lmIEVOQUJM
RShDU1NfVkFSSUFCTEVTKQotICAgICAgICBjYXNlIFZhcmlhYmxlRGVmaW5pdGlvbnM6Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChDU1NQcm9wZXJ0eVZhcmlhYmxlIDwgZmlyc3RDU1NQcm9w
ZXJ0eSwgQ1NTX3ZhcmlhYmxlX2lzX2JlZm9yZV9maXJzdF9wcm9wZXJ0eSk7Ci0gICAgICAgICAg
ICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlWYXJpYWJsZSkKLSAgICAgICAgICAgICAgICBh
cHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotI2VuZGlmCi0gICAgICAgIGNhc2UgSGlnaFByaW9yaXR5UHJvcGVydGllczoKLSAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKGZpcnN0Q1NTUHJvcGVydHkgPT0gQ1NTUHJvcGVydHlD
b2xvciwgQ1NTX2NvbG9yX2lzX2ZpcnN0X3Byb3BlcnR5KTsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKENTU1Byb3BlcnR5Wm9vbSA9PSBDU1NQcm9wZXJ0eUNvbG9yICsgMTcsIENTU196b29t
X2lzX2VuZF9vZl9maXJzdF9wcm9wX3JhbmdlKTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KENTU1Byb3BlcnR5TGluZUhlaWdodCA9PSBDU1NQcm9wZXJ0eVpvb20gKyAxLCBDU1NfbGluZV9o
ZWlnaHRfaXNfYWZ0ZXJfem9vbSk7Ci0jaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCi0gICAgICAg
ICAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlWYXJpYWJsZSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSNlbmRpZgotICAgICAgICAgICAgLy8gZ2l2ZSBzcGVjaWFsIHByaW9yaXR5
IHRvIGZvbnQteHh4LCBjb2xvciBwcm9wZXJ0aWVzLCBldGMKLSAgICAgICAgICAgIGlmIChwcm9w
ZXJ0eSA8IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAgICAgICAgICAgICBhcHBseVByb3Bl
cnR5KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKLSAgICAgICAgICAgIC8vIHdlIGFw
cGx5IGxpbmUtaGVpZ2h0IGxhdGVyCi0gICAgICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eSA9PSBD
U1NQcm9wZXJ0eUxpbmVIZWlnaHQpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRMaW5lSGVp
Z2h0VmFsdWUoY3VycmVudC52YWx1ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIExvd1ByaW9yaXR5UHJvcGVydGllczoKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA+IENT
U1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJl
bnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZFByb2Nlc3NSdWxlKGNvb2tpZSk7Ci19Ci0KLXRlbXBsYXRl
IDxTdHlsZVJlc29sdmVyOjpTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJl
c3VsdCwgYm9vbCBpc0ltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9v
bCBpbmhlcml0ZWRPbmx5KQotewotICAgIGlmIChzdGFydEluZGV4ID09IC0xKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIGlmIChzdGF0ZS5zdHls
ZSgpLT5pbnNpZGVMaW5rKCkgIT0gTm90SW5zaWRlTGluaykgewotICAgICAgICBmb3IgKGludCBp
ID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBN
YXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3VsdC5tYXRjaGVk
UHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBtYXRj
aGVkUHJvcGVydGllcy5saW5rTWF0Y2hUeXBlOwotICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdv
dWxkIGJlIG5pY2VyIHRvIHBhc3MgdGhlc2UgYXMgYXJndW1lbnRzIGJ1dCB0aGF0IHJlcXVpcmVz
IGNoYW5nZXMgaW4gbWFueSBwbGFjZXMuCi0gICAgICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUobGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hM
aW5rKTsKLSAgICAgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGUobGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKTsKLQotICAg
ICAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPHBhc3M+KG1hdGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRp
ZXMuZ2V0KCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxlc1tpXSwgaXNJbXBvcnRhbnQsIGluaGVy
aXRlZE9ubHksIHN0YXRpY19jYXN0PFByb3BlcnR5V2hpdGVsaXN0VHlwZT4obWF0Y2hlZFByb3Bl
cnRpZXMud2hpdGVsaXN0VHlwZSkpOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRlLnNldEFwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKLSAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9w
ZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewotICAgICAg
ICBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaFJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllc1tpXTsKLSAgICAgICAgYXBwbHlQcm9wZXJ0aWVzPHBhc3M+KG1h
dGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMuZ2V0KCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRSdWxl
c1tpXSwgaXNJbXBvcnRhbnQsIGluaGVyaXRlZE9ubHksIHN0YXRpY19jYXN0PFByb3BlcnR5V2hp
dGVsaXN0VHlwZT4obWF0Y2hlZFByb3BlcnRpZXMud2hpdGVsaXN0VHlwZSkpOwotICAgIH0KLX0K
LQotdW5zaWduZWQgU3R5bGVSZXNvbHZlcjo6Y29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChj
b25zdCBNYXRjaGVkUHJvcGVydGllcyogcHJvcGVydGllcywgdW5zaWduZWQgc2l6ZSkKLXsKLSAg
ICAKLSAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KHByb3BlcnRpZXMsIHNpemVv
ZihNYXRjaGVkUHJvcGVydGllcykgKiBzaXplKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmFuZ2VzJiBhLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRj
aFJhbmdlcyYgYikKLXsKLSAgICByZXR1cm4gYS5maXJzdFVBUnVsZSA9PSBiLmZpcnN0VUFSdWxl
Ci0gICAgICAgICYmIGEubGFzdFVBUnVsZSA9PSBiLmxhc3RVQVJ1bGUKLSAgICAgICAgJiYgYS5m
aXJzdEF1dGhvclJ1bGUgPT0gYi5maXJzdEF1dGhvclJ1bGUKLSAgICAgICAgJiYgYS5sYXN0QXV0
aG9yUnVsZSA9PSBiLmxhc3RBdXRob3JSdWxlCi0gICAgICAgICYmIGEuZmlyc3RVc2VyUnVsZSA9
PSBiLmZpcnN0VXNlclJ1bGUKLSAgICAgICAgJiYgYS5sYXN0VXNlclJ1bGUgPT0gYi5sYXN0VXNl
clJ1bGU7Ci19Ci0KLWJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaFJh
bmdlcyYgYSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSYW5nZXMmIGIpCi17Ci0gICAgcmV0
dXJuICEoYSA9PSBiKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlUmVzb2x2ZXI6
Ok1hdGNoZWRQcm9wZXJ0aWVzJiBhLCBjb25zdCBTdHlsZVJlc29sdmVyOjpNYXRjaGVkUHJvcGVy
dGllcyYgYikKLXsKLSAgICByZXR1cm4gYS5wcm9wZXJ0aWVzID09IGIucHJvcGVydGllcyAmJiBh
LmxpbmtNYXRjaFR5cGUgPT0gYi5saW5rTWF0Y2hUeXBlOwotfQotCi1ib29sIG9wZXJhdG9yIT0o
Y29uc3QgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3BlcnRpZXMmIGEsIGNvbnN0IFN0eWxlUmVz
b2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzJiBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19
Ci0KLWNvbnN0IFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtKiBTdHls
ZVJlc29sdmVyOjpmaW5kRnJvbU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUodW5zaWduZWQgaGFzaCwg
Y29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0KQotewotICAgIEFTU0VSVChoYXNoKTsKLQot
ICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gbV9tYXRjaGVkUHJvcGVy
dGllc0NhY2hlLmZpbmQoaGFzaCk7Ci0gICAgaWYgKGl0ID09IG1fbWF0Y2hlZFByb3BlcnRpZXND
YWNoZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgTWF0Y2hlZFByb3BlcnRpZXNDYWNo
ZUl0ZW0mIGNhY2hlSXRlbSA9IGl0LT52YWx1ZTsKLQotICAgIHNpemVfdCBzaXplID0gbWF0Y2hS
ZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpOwotICAgIGlmIChzaXplICE9IGNhY2hlSXRl
bS5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChtYXRjaFJlc3VsdC5t
YXRjaGVkUHJvcGVydGllc1tpXSAhPSBjYWNoZUl0ZW0ubWF0Y2hlZFByb3BlcnRpZXNbaV0pCi0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKGNhY2hlSXRlbS5yYW5nZXMgIT0g
bWF0Y2hSZXN1bHQucmFuZ2VzKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gJmNhY2hl
SXRlbTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjphZGRUb01hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUsIHVuc2lnbmVkIGhhc2gsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCkKLXsKLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF0Y2hlZERlY2xhcmF0aW9uQ2FjaGVBZGRpdGlvbnNC
ZXR3ZWVuU3dlZXBzID0gMTAwOwotICAgIGlmICgrK21fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFk
ZGl0aW9uc1NpbmNlTGFzdFN3ZWVwID49IG1hdGNoZWREZWNsYXJhdGlvbkNhY2hlQWRkaXRpb25z
QmV0d2VlblN3ZWVwcwotICAgICAgICAmJiAhbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlU3dlZXBU
aW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXRjaGVk
RGVjbGFyYXRpb25DYWNoZVN3ZWVwVGltZUluU2Vjb25kcyA9IDYwOwotICAgICAgICBtX21hdGNo
ZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyLnN0YXJ0T25lU2hvdChtYXRjaGVkRGVjbGFyYXRp
b25DYWNoZVN3ZWVwVGltZUluU2Vjb25kcyk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc2gpOwot
ICAgIE1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVJdGVtIGNhY2hlSXRlbTsKLSAgICBjYWNoZUl0ZW0u
bWF0Y2hlZFByb3BlcnRpZXMuYXBwZW5kVmVjdG9yKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0
aWVzKTsKLSAgICBjYWNoZUl0ZW0ucmFuZ2VzID0gbWF0Y2hSZXN1bHQucmFuZ2VzOwotICAgIC8v
IE5vdGUgdGhhdCB3ZSBkb24ndCBjYWNoZSB0aGUgb3JpZ2luYWwgUmVuZGVyU3R5bGUgaW5zdGFu
Y2UuIEl0IG1heSBiZSBmdXJ0aGVyIG1vZGlmaWVkLgotICAgIC8vIFRoZSBSZW5kZXJTdHlsZSBp
biB0aGUgY2FjaGUgaXMgcmVhbGx5IGp1c3QgYSBob2xkZXIgZm9yIHRoZSBzdWJzdHJ1Y3R1cmVz
IGFuZCBuZXZlciB1c2VkIGFzLWlzLgotICAgIGNhY2hlSXRlbS5yZW5kZXJTdHlsZSA9IFJlbmRl
clN0eWxlOjpjbG9uZShzdHlsZSk7Ci0gICAgY2FjaGVJdGVtLnBhcmVudFJlbmRlclN0eWxlID0g
UmVuZGVyU3R5bGU6OmNsb25lKHBhcmVudFN0eWxlKTsKLSAgICBtX21hdGNoZWRQcm9wZXJ0aWVz
Q2FjaGUuYWRkKGhhc2gsIGNhY2hlSXRlbSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6aW52
YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUoKQotewotICAgIG1fbWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZS5jbGVhcigpOwotfQotCi1zdGF0aWMgYm9vbCBpc0NhY2hlYWJsZUluTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLXsKLSAgICAvLyBGSVhNRTog
Q1NTUHJvcGVydHlXZWJraXRXcml0aW5nTW9kZSBtb2RpZmllcyBzdGF0ZSB3aGVuIGFwcGx5aW5n
IHRvIGRvY3VtZW50IGVsZW1lbnQuIFdlIGNhbid0IHNraXAgdGhlIGFwcGx5aW5nIGJ5IGNhY2hp
bmcuCi0gICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVt
ZW50KCkgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS0+d3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxl
bWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0eWxlLT51bmlxdWUoKSB8
fCAoc3R5bGUtPnN0eWxlVHlwZSgpICE9IE5PUFNFVURPICYmIHBhcmVudFN0eWxlLT51bmlxdWUo
KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3R5bGUtPmhhc0FwcGVhcmFuY2Uo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHlsZS0+em9vbSgpICE9IFJlbmRl
clN0eWxlOjppbml0aWFsWm9vbSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0
eWxlLT53cml0aW5nTW9kZSgpICE9IFJlbmRlclN0eWxlOjppbml0aWFsV3JpdGluZ01vZGUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIFRoZSBjYWNoZSBhc3N1bWVzIHN0YXRpYyBr
bm93bGVkZ2UgYWJvdXQgd2hpY2ggcHJvcGVydGllcyBhcmUgaW5oZXJpdGVkLgotICAgIGlmIChw
YXJlbnRTdHlsZS0+aGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBj
b25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBTdGF0
ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IG1hdGNoUmVzdWx0
LmlzQ2FjaGVhYmxlID8gY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChtYXRjaFJlc3VsdC5t
YXRjaGVkUHJvcGVydGllcy5kYXRhKCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNp
emUoKSkgOiAwOwotICAgIGJvb2wgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7Ci0gICAgY29u
c3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIGNhY2hlSXRlbSA9IDA7Ci0gICAgaWYgKGNh
Y2hlSGFzaCAmJiAoY2FjaGVJdGVtID0gZmluZEZyb21NYXRjaGVkUHJvcGVydGllc0NhY2hlKGNh
Y2hlSGFzaCwgbWF0Y2hSZXN1bHQpKSkgewotICAgICAgICAvLyBXZSBjYW4gYnVpbGQgdXAgdGhl
IHN0eWxlIGJ5IGNvcHlpbmcgbm9uLWluaGVyaXRlZCBwcm9wZXJ0aWVzIGZyb20gYW4gZWFybGll
ciBzdHlsZSBvYmplY3QgYnVpbHQgdXNpbmcgdGhlIHNhbWUgZXhhY3QKLSAgICAgICAgLy8gc3R5
bGUgZGVjbGFyYXRpb25zLiBXZSB0aGVuIG9ubHkgbmVlZCB0byBhcHBseSB0aGUgaW5oZXJpdGVk
IHByb3BlcnRpZXMsIGlmIGFueSwgYXMgdGhlaXIgdmFsdWVzIGNhbiBkZXBlbmQgb24gdGhlIAot
ICAgICAgICAvLyBlbGVtZW50IGNvbnRleHQuIFRoaXMgaXMgZmFzdCBhbmQgc2F2ZXMgbWVtb3J5
IGJ5IHJldXNpbmcgdGhlIHN0eWxlIGRhdGEgc3RydWN0dXJlcy4KLSAgICAgICAgc3RhdGUuc3R5
bGUoKS0+Y29weU5vbkluaGVyaXRlZEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7
Ci0gICAgICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5pbmhlcml0ZWREYXRhU2hhcmVkKGNh
Y2hlSXRlbS0+cGFyZW50UmVuZGVyU3R5bGUuZ2V0KCkpICYmICFpc0F0U2hhZG93Qm91bmRhcnko
ZWxlbWVudCkpIHsKLSAgICAgICAgICAgIEVJbnNpZGVMaW5rIGxpbmtTdGF0dXMgPSBzdGF0ZS5z
dHlsZSgpLT5pbnNpZGVMaW5rKCk7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgY2FjaGUgaXRlbSBw
YXJlbnQgc3R5bGUgaGFzIGlkZW50aWNhbCBpbmhlcml0ZWQgcHJvcGVydGllcyB0byB0aGUgY3Vy
cmVudCBwYXJlbnQgc3R5bGUgdGhlbiB0aGUKLSAgICAgICAgICAgIC8vIHJlc3VsdGluZyBzdHls
ZSB3aWxsIGJlIGlkZW50aWNhbCB0b28uIFdlIGNvcHkgdGhlIGluaGVyaXRlZCBwcm9wZXJ0aWVz
IG92ZXIgZnJvbSB0aGUgY2FjaGUgYW5kIGFyZSBkb25lLgotICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+aW5oZXJpdEZyb20oY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS5nZXQoKSk7Ci0KLSAgICAg
ICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgdGhlIGxpbmsgc3RhdHVzIGlzIHRyZWF0ZWQgbGlrZSBh
biBpbmhlcml0ZWQgcHJvcGVydHkuIFdlIG5lZWQgdG8gZXhwbGljaXRseSByZXN0b3JlIGl0Lgot
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SW5zaWRlTGluayhsaW5rU3RhdHVzKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkg
PSB0cnVlOyAKLSAgICB9Ci0KLSNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKLSAgICAvLyBGaXJz
dCBhcHBseSBhbGwgdmFyaWFibGUgZGVmaW5pdGlvbnMsIGFzIHRoZXkgbWF5IGJlIHVzZWQgZHVy
aW5nIGFwcGxpY2F0aW9uIG9mIGxhdGVyIHByb3BlcnRpZXMuCi0gICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJlc3VsdCwgZmFsc2UsIDAsIG1hdGNo
UmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5SW5oZXJpdGVkT25seSk7
Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihtYXRjaFJl
c3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4obWF0Y2hSZXN1bHQsIHRydWUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFz
dFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXM8VmFyaWFibGVEZWZpbml0aW9ucz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJh
bmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5o
ZXJpdGVkT25seSk7Ci0jZW5kaWYKLQotICAgIC8vIE5vdyB3ZSBoYXZlIGFsbCBvZiB0aGUgbWF0
Y2hlZCBydWxlcyBpbiB0aGUgYXBwcm9wcmlhdGUgb3JkZXIuIFdhbGsgdGhlIHJ1bGVzIGFuZCBh
cHBseQotICAgIC8vIGhpZ2gtcHJpb3JpdHkgcHJvcGVydGllcyBmaXJzdCwgaS5lLiwgdGhvc2Ug
cHJvcGVydGllcyB0aGF0IG90aGVyIHByb3BlcnRpZXMgZGVwZW5kIG9uLgotICAgIC8vIFRoZSBv
cmRlciBpcyAoMSkgaGlnaC1wcmlvcml0eSBub3QgaW1wb3J0YW50LCAoMikgaGlnaC1wcmlvcml0
eSBpbXBvcnRhbnQsICgzKSBub3JtYWwgbm90IGltcG9ydGFudAotICAgIC8vIGFuZCAoNCkgbm9y
bWFsIGltcG9ydGFudC4KLSAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7Ci0gICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwg
ZmFsc2UsIDAsIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGFwcGx5
SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQ
cm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0
aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRl
ZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGll
cz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBt
YXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1
bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmxhc3RVQVJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0KLSAgICBpZiAoY2FjaGVJdGVt
ICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBzdGF0ZS5zdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkpIHsKLSAgICAgICAgc3RhdGUuc2V0Rm9udERpcnR5KHRydWUp
OwotICAgICAgICBhcHBseUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJ
ZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCi0gICAg
dXBkYXRlRm9udCgpOwotCi0gICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1
cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgotICAgIGlmIChzdGF0ZS5saW5lSGVpZ2h0
VmFsdWUoKSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0
YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKTsKLQotICAgIC8vIE1hbnkgcHJvcGVydGllcyBkZXBlbmQg
b24gdGhlIGZvbnQuIElmIGl0IGNoYW5nZXMgd2UganVzdCBhcHBseSBhbGwgcHJvcGVydGllcy4K
LSAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpICE9IHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpKQotICAgICAgICBhcHBs
eUluaGVyaXRlZE9ubHkgPSBmYWxzZTsKLQotICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFsIHByaW9y
aXR5IFVBIHByb3BlcnRpZXMuCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0
eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0
VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKLSAgICAKLSAgICAvLyBDYWNoZSBvdXIgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIHNvIHRoYXQg
d2UgY2FuIGV4YW1pbmUgdGhlbSBsYXRlci4KLSAgICBzdGF0ZS5jYWNoZUJvcmRlckFuZEJhY2tn
cm91bmQoKTsKLSAgICAKLSAgICAvLyBOb3cgZG8gdGhlIGF1dGhvciBhbmQgdXNlciBub3JtYWwg
cHJpb3JpdHkgcHJvcGVydGllcyBhbmQgYWxsIHRoZSAhaW1wb3J0YW50IHByb3BlcnRpZXMuCi0g
ICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVz
dWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgKyAxLCBtYXRjaFJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3Vs
dCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0
Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwg
bWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0
VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
czxMb3dQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5y
YW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUlu
aGVyaXRlZE9ubHkpOwotICAgCi0gICAgLy8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJl
bmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7Ci0gICAgCi0g
ICAgQVNTRVJUKCFzdGF0ZS5mb250RGlydHkoKSk7Ci0gICAgCi0gICAgaWYgKGNhY2hlSXRlbSB8
fCAhY2FjaGVIYXNoKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc0NhY2hlYWJsZUluTWF0
Y2hlZFByb3BlcnRpZXNDYWNoZShzdGF0ZS5lbGVtZW50KCksIHN0YXRlLnN0eWxlKCksIHN0YXRl
LnBhcmVudFN0eWxlKCkpKQotICAgICAgICByZXR1cm47Ci0gICAgYWRkVG9NYXRjaGVkUHJvcGVy
dGllc0NhY2hlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnBhcmVudFN0eWxlKCksIGNhY2hlSGFzaCwg
bWF0Y2hSZXN1bHQpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1N0
eWxlKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxl
KQotewotICAgIGluaXRFbGVtZW50KDApOwotICAgIG1fc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2
ZShkb2N1bWVudCgpLCAwLCBzdHlsZSk7Ci0gICAgbV9zdGF0ZS5zZXRTdHlsZShzdHlsZSk7Ci0g
ICAgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKGlkLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVy
dHkoaWQsIHZhbHVlKTsKLX0KLQotaW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBpZCkKLXsKLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENv
bG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJUb3BDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9t
Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlP
dXRsaW5lQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvcjoK
LSNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVj
b3JhdGlvbkNvbG9yOgotI2VuZGlmIC8vIENTUzNfVEVYVAotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RW1waGFzaXNDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZp
bGxDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yOgotI2lm
IEVOQUJMRShTVkcpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUZpbGw6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVN0cm9rZToKLSNlbmRpZgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIGh0dHA6
Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtcmVnaW9ucy8jdGhlLWF0LXJlZ2lvbi1zdHlsZS1ydWxl
Ci0vLyBGSVhNRTogYWRkIGluY3JlbWVudGFsIHN1cHBvcnQgZm9yIG90aGVyIHJlZ2lvbiBzdHls
aW5nIHByb3BlcnRpZXMuCi1pbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjppc1ZhbGlkUmVnaW9u
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQotewotICAgIHN3aXRjaCAoaWQpIHsKLSAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlD
b2xvcjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQotaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6aXNWYWxpZEN1ZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCkKLXsKLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50Ogot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRQb3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0
aW9uWDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWToKLSAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dy
b3VuZFJlcGVhdFg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29s
b3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRG
YW1pbHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlGb250U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50OgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlGb250V2VpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0Ogot
ICAgIGNhc2UgQ1NTUHJvcGVydHlPcGFjaXR5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5l
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eU91dGxpbmVPZmZzZXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVTdHlsZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5T3V0bGluZVdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlWaXNpYmls
aXR5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlUZXh0RGVjb3JhdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRvdzoKLSAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyU3R5bGU6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5k
aWYKLS8vIFNWRyBoYW5kbGVzIHpvb21pbmcgaW4gYSBkaWZmZXJlbnQgd2F5IGNvbXBhcmVkIHRv
IENTUy4gVGhlIHdob2xlIGRvY3VtZW50IGlzIHNjYWxlZCBpbnN0ZWFkCi0vLyBvZiBlYWNoIGlu
ZGl2aWR1YWwgbGVuZ3RoIHZhbHVlIGluIHRoZSByZW5kZXIgc3R5bGUgLyB0cmVlLiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aCooKQotLy8gbXVsdGlwbGllcyBlYWNoIHJlc29sdmVk
IGxlbmd0aCB3aXRoIHRoZSB6b29tIG11bHRpcGxpZXIgLSBzbyBmb3IgU1ZHIHdlIG5lZWQgdG8g
ZGlzYWJsZSB0aGF0LgotLy8gVGhvdWdoIGFsbCBDU1MgdmFsdWVzIHRoYXQgY2FuIGJlIGFwcGxp
ZWQgdG8gb3V0ZXJtb3N0IDxzdmc+IGVsZW1lbnRzICh3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRp
bmcuLi4pCi0vLyBuZWVkIHRvIHJlc3BlY3QgdGhlIHNjYWxpbmcuIFJlbmRlckJveCAodGhlIHBh
cmVudCBjbGFzcyBvZiBSZW5kZXJTVkdSb290KSBncmFicyB2YWx1ZXMgbGlrZQotLy8gd2lkdGgv
aGVpZ2h0L2JvcmRlci9wYWRkaW5nLy4uLiBmcm9tIHRoZSBSZW5kZXJTdHlsZSAtPiBmb3IgU1ZH
IHRoZXNlIHZhbHVlcyB3b3VsZCBuZXZlciBzY2FsZSwKLS8vIGlmIHdlJ2QgcGFzcyBhIDEuMCB6
b29tIGZhY3RvciBldmVyeWh3ZXJlLiBTbyB3ZSBvbmx5IHBhc3MgYSB6b29tIGZhY3RvciBvZiAx
LjAgZm9yIHNwZWNpZmljCi0vLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNj
YWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcvZm9u
dC1zaXplKS4KLWJvb2wgU3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKCkKLXsKLSAgICBy
ZXR1cm4gbV9zdGF0ZS5lbGVtZW50KCkgJiYgbV9zdGF0ZS5lbGVtZW50KCktPmlzU1ZHRWxlbWVu
dCgpOwotfQotCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRl
LCBMZW5ndGgmIHdvcmtpbmdMZW5ndGgpCi17Ci0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50KSB7Ci0gICAgICAgIHdvcmtpbmdM
ZW5ndGggPSBMZW5ndGgoTWluQ29udGVudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0
TWF4Q29udGVudCkgewotICAgICAgICB3b3JraW5nTGVuZ3RoID0gTGVuZ3RoKE1heENvbnRlbnQp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB3b3JraW5nTGVuZ3RoID0gcHJp
bWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVy
Y2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uIHwgQXV0b0NvbnZl
cnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKLSAgICBpZiAod29ya2luZ0xlbmd0aC5pc1VuZGVmaW5l
ZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlz
TGVuZ3RoKCkpCi0gICAgICAgIHdvcmtpbmdMZW5ndGguc2V0UXVpcmsocHJpbWl0aXZlVmFsdWUt
PmlzUXVpcmtWYWx1ZSgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBj
cmVhdGVHcmlkVHJhY2tTaXplKENTU1ZhbHVlKiB2YWx1ZSwgR3JpZFRyYWNrU2l6ZSYgdHJhY2tT
aXplLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCi17Ci0gICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKTsKLSAgICBQYWlyKiBtaW5NYXhUcmFja0JyZWFkdGggPSBwcmltaXRpdmVW
YWx1ZS0+Z2V0UGFpclZhbHVlKCk7Ci0gICAgaWYgKCFtaW5NYXhUcmFja0JyZWFkdGgpIHsKLSAg
ICAgICAgTGVuZ3RoIHdvcmtpbmdMZW5ndGg7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRyYWNr
QnJlYWR0aChwcmltaXRpdmVWYWx1ZSwgc3RhdGUsIHdvcmtpbmdMZW5ndGgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHRyYWNrU2l6ZS5zZXRMZW5ndGgod29ya2luZ0xl
bmd0aCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIExlbmd0aCBtaW5UcmFj
a0JyZWFkdGg7Ci0gICAgTGVuZ3RoIG1heFRyYWNrQnJlYWR0aDsKLSAgICBpZiAoIWNyZWF0ZUdy
aWRUcmFja0JyZWFkdGgobWluTWF4VHJhY2tCcmVhZHRoLT5maXJzdCgpLCBzdGF0ZSwgbWluVHJh
Y2tCcmVhZHRoKSB8fCAhY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChtaW5NYXhUcmFja0JyZWFkdGgt
PnNlY29uZCgpLCBzdGF0ZSwgbWF4VHJhY2tCcmVhZHRoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgdHJhY2tTaXplLnNldE1pbk1heChtaW5UcmFja0JyZWFkdGgsIG1heFRyYWNrQnJl
YWR0aCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFj
a0xpc3QoQ1NTVmFsdWUqIHZhbHVlLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMs
IE5hbWVkR3JpZExpbmVzTWFwJiBuYW1lZEdyaWRMaW5lcywgY29uc3QgU3R5bGVSZXNvbHZlcjo6
U3RhdGUmIHN0YXRlKQotewotICAgIC8vIEhhbmRsZSAnbm9uZScuCi0gICAgaWYgKHZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAg
IHJldHVybiBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZTsKLSAg
ICB9Ci0KLSAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBzaXplX3QgY3VycmVudE5hbWVkR3JpZExpbmUgPSAwOwotICAgIGZvciAoQ1NT
VmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsK
LSAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKLSAgICAgICAgaWYgKGN1
cnJWYWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGN1
cnJWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU3RyaW5nKCkpIHsK
LSAgICAgICAgICAgICAgICBOYW1lZEdyaWRMaW5lc01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG5h
bWVkR3JpZExpbmVzLmFkZChwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSwgVmVjdG9y
PHNpemVfdD4oKSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBl
bmQoY3VycmVudE5hbWVkR3JpZExpbmUpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgKytjdXJyZW50TmFtZWRHcmlkTGluZTsK
LSAgICAgICAgR3JpZFRyYWNrU2l6ZSB0cmFja1NpemU7Ci0gICAgICAgIGlmICghY3JlYXRlR3Jp
ZFRyYWNrU2l6ZShjdXJyVmFsdWUsIHRyYWNrU2l6ZSwgc3RhdGUpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIHRyYWNrU2l6ZXMuYXBwZW5kKHRyYWNrU2l6ZSk7Ci0gICAg
fQotCi0gICAgaWYgKHRyYWNrU2l6ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi1zdGF0aWMgYm9vbCBjcmVhdGVHcmlkUG9zaXRp
b24oQ1NTVmFsdWUqIHZhbHVlLCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAgIC8vIEZv
ciBub3csIHdlIG9ubHkgYWNjZXB0OiAnYXV0bycgfCA8aW50ZWdlcj4gfCBzcGFuICYmIDxpbnRl
Z2VyPj8KLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkg
PT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVTcGFuKSB7Ci0gICAgICAg
ICAgICAvLyBJZiB0aGUgPGludGVnZXI+IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICcxJy4K
LSAgICAgICAgICAgIHBvc2l0aW9uLnNldFNwYW5Qb3NpdGlvbigxKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLT5p
c051bWJlcigpKTsKLSAgICAgICAgcG9zaXRpb24uc2V0SW50ZWdlclBvc2l0aW9uKHByaW1pdGl2
ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04odmFsdWUtPmlzVmFsdWVMaXN0KCkp
OwotICAgIENTU1ZhbHVlTGlzdCogdmFsdWVzID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4o
dmFsdWUpOwotICAgIEFTU0VSVCh2YWx1ZXMtPmxlbmd0aCgpID09IDIpOwotICAgIEFTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygx
KS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogbnVtZXJpY1Zh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZXMtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soMSkpOwotICAgIEFTU0VSVChudW1lcmljVmFsdWUtPmlzTnVtYmVyKCkpOwot
ICAgIHBvc2l0aW9uLnNldFNwYW5Qb3NpdGlvbihudW1lcmljVmFsdWUtPmdldEludFZhbHVlKCkp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi0jaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCi1zdGF0
aWMgYm9vbCBoYXNWYXJpYWJsZVJlZmVyZW5jZShDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYg
KHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
Ci0gICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS0+aGFzVmFyaWFibGVSZWZlcmVuY2UoKTsK
LSAgICB9Ci0KLSAgICBpZiAodmFsdWUtPmlzQ2FsY3VsYXRpb25WYWx1ZSgpKQotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTQ2FsY1ZhbHVlKj4odmFsdWUpLT5oYXNWYXJpYWJsZVJlZmVy
ZW5jZSgpOwotCi0gICAgaWYgKHZhbHVlLT5pc1JlZmxlY3RWYWx1ZSgpKSB7Ci0gICAgICAgIENT
U1JlZmxlY3RWYWx1ZSogcmVmbGVjdFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUmVmbGVjdFZhbHVl
Kj4odmFsdWUpOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZGlyZWN0aW9uID0gcmVmbGVj
dFZhbHVlLT5kaXJlY3Rpb24oKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIG9mZnNldCA9
IHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCk7Ci0gICAgICAgIENTU1ZhbHVlKiBtYXNrID0gcmVmbGVj
dFZhbHVlLT5tYXNrKCk7Ci0gICAgICAgIHJldHVybiAoZGlyZWN0aW9uICYmIGhhc1ZhcmlhYmxl
UmVmZXJlbmNlKGRpcmVjdGlvbikpIHx8IChvZmZzZXQgJiYgaGFzVmFyaWFibGVSZWZlcmVuY2Uo
b2Zmc2V0KSkgfHwgKG1hc2sgJiYgaGFzVmFyaWFibGVSZWZlcmVuY2UobWFzaykpOwotICAgIH0K
LQotICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsg
aS5hZHZhbmNlKCkpIHsKLSAgICAgICAgaWYgKGhhc1ZhcmlhYmxlUmVmZXJlbmNlKGkudmFsdWUo
KSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZVZhcmlhYmxlcyhDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3Ry
aW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKQotewotICAgIHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlE
LCBTdHJpbmc+IGV4cHJlc3Npb24oaWQsIHZhbHVlLT5zZXJpYWxpemVSZXNvbHZpbmdWYXJpYWJs
ZXMoKm1fc3RhdGUuc3R5bGUoKS0+dmFyaWFibGVzKCkpKTsKLQotICAgIGlmIChrbm93bkV4cHJl
c3Npb25zLmNvbnRhaW5zKGV4cHJlc3Npb24pKQotICAgICAgICByZXR1cm47IC8vIGN5Y2xlIGRl
dGVjdGVkLgotCi0gICAga25vd25FeHByZXNzaW9ucy5hcHBlbmQoZXhwcmVzc2lvbik7Ci0KLSAg
ICAvLyBGSVhNRTogSXQgd291bGQgYmUgZmFzdGVyIG5vdCB0byByZS1wYXJzZSBmcm9tIHN0cmlu
Z3MsIGJ1dCBmb3Igbm93IENTUyBwcm9wZXJ0eSB2YWxpZGF0aW9uIGxpdmVzIGluc2lkZSB0aGUg
cGFyc2VyIHNvIHdlIGRvIGl0IHRoZXJlLgotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0
eVNldD4gcmVzdWx0U2V0ID0gTXV0YWJsZVN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwotICAg
IGlmICghQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHJlc3VsdFNldC5nZXQoKSwgaWQsIGV4cHJlc3Np
b24uc2Vjb25kLCBmYWxzZSwgZG9jdW1lbnQoKSkpCi0gICAgICAgIHJldHVybjsgLy8gZXhwcmVz
c2lvbiBmYWlsZWQgdG8gcGFyc2UuCi0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVz
dWx0U2V0LT5wcm9wZXJ0eUNvdW50KCk7IGkrKykgewotICAgICAgICBTdHlsZVByb3BlcnR5U2V0
OjpQcm9wZXJ0eVJlZmVyZW5jZSBwcm9wZXJ0eSA9IHJlc3VsdFNldC0+cHJvcGVydHlBdChpKTsK
LSAgICAgICAgaWYgKHByb3BlcnR5LmlkKCkgIT0gQ1NTUHJvcGVydHlWYXJpYWJsZSAmJiBoYXNW
YXJpYWJsZVJlZmVyZW5jZShwcm9wZXJ0eS52YWx1ZSgpKSkKLSAgICAgICAgICAgIHJlc29sdmVW
YXJpYWJsZXMocHJvcGVydHkuaWQoKSwgcHJvcGVydHkudmFsdWUoKSwga25vd25FeHByZXNzaW9u
cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkocHJvcGVydHkuaWQo
KSwgcHJvcGVydHkudmFsdWUoKSk7Ci0gICAgfQotfQotI2VuZGlmCi0KLXZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCi17
Ci0jaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCi0gICAgaWYgKGlkICE9IENTU1Byb3BlcnR5VmFy
aWFibGUgJiYgaGFzVmFyaWFibGVSZWZlcmVuY2UodmFsdWUpKSB7Ci0gICAgICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+IGtub3duRXhwcmVzc2lvbnM7Ci0gICAg
ICAgIHJlc29sdmVWYXJpYWJsZXMoaWQsIHZhbHVlLCBrbm93bkV4cHJlc3Npb25zKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gQ1NTIHZhcmlhYmxlcyBkb24ndCBy
ZXNvbHZlIHNob3J0aGFuZHMgYXQgcGFyc2luZyB0aW1lLCBzbyB0aGlzIHNob3VsZCBiZSAqYWZ0
ZXIqIGhhbmRsaW5nIHZhcmlhYmxlcy4KLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFpc0V4cGFu
ZGVkU2hvcnRoYW5kKGlkKSwgIlNob3J0aGFuZCBwcm9wZXJ0eSBpZCA9ICVkIHdhc24ndCBleHBh
bmRlZCBhdCBwYXJzaW5nIHRpbWUiLCBpZCk7Ci0KLSAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRl
OwotICAgIGJvb2wgaXNJbmhlcml0ID0gc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5pc0lu
aGVyaXRlZFZhbHVlKCk7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZS0+aXNJbml0aWFsVmFs
dWUoKSB8fCAoIXN0YXRlLnBhcmVudE5vZGUoKSAmJiB2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgp
KTsKLQotICAgIEFTU0VSVCghaXNJbmhlcml0IHx8ICFpc0luaXRpYWwpOyAvLyBpc0luaGVyaXQg
LT4gIWlzSW5pdGlhbCAmJiBpc0luaXRpYWwgLT4gIWlzSW5oZXJpdAotICAgIEFTU0VSVCghaXNJ
bmhlcml0IHx8IChzdGF0ZS5wYXJlbnROb2RlKCkgJiYgc3RhdGUucGFyZW50U3R5bGUoKSkpOyAv
LyBpc0luaGVyaXQgLT4gKHN0YXRlLnBhcmVudE5vZGUoKSAmJiBzdGF0ZS5wYXJlbnRTdHlsZSgp
KQotCi0gICAgaWYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSAmJiAoIXN0
YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSB8fCAhaXNWYWxpZFZpc2l0ZWRM
aW5rUHJvcGVydHkoaWQpKSkgewotICAgICAgICAvLyBMaW1pdCB0aGUgcHJvcGVydGllcyB0aGF0
IGNhbiBiZSBhcHBsaWVkIHRvIG9ubHkgdGhlIG9uZXMgaG9ub3JlZCBieSA6dmlzaXRlZC4KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpc0luaGVyaXQgJiYgIXN0YXRlLnBhcmVu
dFN0eWxlKCktPmhhc0V4cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCkgJiYgIUNTU1Byb3Bl
cnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKLSAgICAgICAgc3RhdGUucGFyZW50U3R5bGUo
KS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKLQotI2lmIEVOQUJMRShD
U1NfVkFSSUFCTEVTKQotICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eVZhcmlhYmxlKSB7Ci0gICAg
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHZhbHVlLT5pc1ZhcmlhYmxlVmFs
dWUoKSk7Ci0gICAgICAgIENTU1ZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8
Q1NTVmFyaWFibGVWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+bmFt
ZSgpLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFTU0VSVCghdmFyaWFibGUtPnZhbHVlKCkuaXNFbXB0
eSgpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VmFyaWFibGUodmFyaWFibGUtPm5hbWUo
KSwgdmFyaWFibGUtPnZhbHVlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0K
LSAgICAvLyBDaGVjayBsb29rdXAgdGFibGUgZm9yIGltcGxlbWVudGF0aW9ucyBhbmQgdXNlIHdo
ZW4gYXZhaWxhYmxlLgotICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IG1fZGVw
cmVjYXRlZFN0eWxlQnVpbGRlci5wcm9wZXJ0eUhhbmRsZXIoaWQpOwotICAgIGlmIChoYW5kbGVy
LmlzVmFsaWQoKSkgewotICAgICAgICBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgaGFuZGxl
ci5hcHBseUluaGVyaXRWYWx1ZShpZCwgdGhpcyk7Ci0gICAgICAgIGVsc2UgaWYgKGlzSW5pdGlh
bCkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUoaWQsIHRoaXMpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5VmFsdWUoaWQsIHRoaXMsIHZhbHVl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSA9IHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgPyBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlKSA6IDA7Ci0KLSAgICBmbG9hdCB6b29tRmFjdG9yID0gc3Rh
dGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgLy8gV2hhdCBmb2xsb3dzIGlzIGEg
bGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVzcG9uZGlu
ZyBmcm9udC1lbmQKLSAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuCi0gICAgc3dpdGNoIChpZCkg
ewotICAgIC8vIGxpc3RzCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbnRlbnQ6Ci0gICAgICAgIC8v
IGxpc3Qgb2Ygc3RyaW5nLCB1cmksIGNvdW50ZXIsIGF0dHIsIGkKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gRklYTUU6IEluIENTUzMsIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gaW5oZXJpdCBj
b250ZW50LiBJbiBDU1MyIGl0IGlzIG5vdC4gVGhpcwotICAgICAgICAgICAgLy8gbm90ZSBpcyBh
IHJlbWluZGVyIHRoYXQgZXZlbnR1YWxseSAiaW5oZXJpdCIgbmVlZHMgdG8gYmUgc3VwcG9ydGVk
LgotCi0gICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+Y2xlYXJDb250ZW50KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgYm9vbCBkaWRTZXQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUo
KTsgaS5hZHZhbmNlKCkpIHsKLSAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFs
dWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzR3JhZGllbnRWYWx1ZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVy
YXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KGl0ZW0pLT5n
cmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSksIGRpZFNldCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0lt
YWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7Ci0gICAgICAgICAgICAgICAgICAg
IGRpZFNldCA9IHRydWU7Ci0jaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChpdGVtLT5pc0ltYWdlU2V0VmFsdWUoKSkgewotICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQ
cm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSksIGRp
ZFNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7Ci0jZW5kaWYKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZVZhbHVlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjYWNoZWRP
clBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFn
ZVZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOwotICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogY29udGVudFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsK
LQotICAgICAgICAgICAgICAgIGlmIChjb250ZW50VmFsdWUtPmlzU3RyaW5nKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjb250ZW50VmFsdWUtPmdl
dFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQpOwotICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudFZhbHVlLT5pc0F0
dHIoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIGEgbmFtZXNwYWNlIGJl
IHNwZWNpZmllZCBmb3IgYW4gYXR0cihmb28pPwotICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
dGUuc3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50U3R5bGUoKS0+c2V0VW5pcXVl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cihudWxsQXRvbSwgY29u
dGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgbnVsbEF0b20pOwotICAgICAgICAg
ICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gc3RhdGUuZWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUoYXR0cik7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNl
dCk7Ci0gICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3Rz
IHRoZSBzdHlsZQotICAgICAgICAgICAgICAgICAgICBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuYXR0
cnNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQ291bnRlcigpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIENvdW50ZXIqIGNvdW50ZXJWYWx1ZSA9IGNvbnRlbnRWYWx1ZS0+Z2V0Q291bnRlclZhbHVl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIEVMaXN0U3R5bGVUeXBlIGxpc3RTdHlsZVR5cGUgPSBO
b25lTGlzdFN0eWxlOwotICAgICAgICAgICAgICAgICAgICBDU1NWYWx1ZUlEIGxpc3RTdHlsZUlk
ZW50ID0gY291bnRlclZhbHVlLT5saXN0U3R5bGVJZGVudCgpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgICAg
ICAgICAgbGlzdFN0eWxlVHlwZSA9IHN0YXRpY19jYXN0PEVMaXN0U3R5bGVUeXBlPihsaXN0U3R5
bGVJZGVudCAtIENTU1ZhbHVlRGlzYyk7Ci0gICAgICAgICAgICAgICAgICAgIE93blB0cjxDb3Vu
dGVyQ29udGVudD4gY291bnRlciA9IGFkb3B0UHRyKG5ldyBDb3VudGVyQ29udGVudChjb3VudGVy
VmFsdWUtPmlkZW50aWZpZXIoKSwgbGlzdFN0eWxlVHlwZSwgY291bnRlclZhbHVlLT5zZXBhcmF0
b3IoKSkpOwotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNv
dW50ZXIucmVsZWFzZSgpLCBkaWRTZXQpOwotICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAoY29udGVudFZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU9wZW5RdW90ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldENvbnRlbnQoT1BFTl9RVU9URSwgZGlkU2V0KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNsb3NlUXVvdGU6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KENMT1NFX1FVT1RFLCBkaWRTZXQpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9PcGVuUXVv
dGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KE5P
X09QRU5fUVVPVEUsIGRpZFNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVOb0Nsb3NlUXVvdGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRDb250ZW50KE5PX0NMT1NFX1FVT1RFLCBkaWRTZXQpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gbm9ybWFsIGFuZCBub25lIGRvIG5vdCBoYXZlIGFueSBlZmZlY3QuCi0gICAgICAgICAg
ICAgICAgICAgICAgICB7IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghZGlkU2V0KQotICAgICAgICAgICAg
ICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyQ29udGVudCgpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVF1b3RlczoKLSAgICAgICAgaWYgKGlzSW5o
ZXJpdCkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKHN0YXRlLnBhcmVu
dFN0eWxlKCktPnF1b3RlcygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90
ZXMoMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhbHVl
LT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0
aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgICAgICBWZWN0b3I8c3RkOjpw
YWlyPFN0cmluZywgU3RyaW5nPiA+IHF1b3RlczsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGlzdC0+bGVuZ3RoKCk7IGkgKz0gMikgewotICAgICAgICAgICAgICAgIENTU1Zh
bHVlKiBmaXJzdCA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Ci0gICAgICAgICAg
ICAgICAgLy8gaXRlbSgpIHJldHVybnMgbnVsbCBpZiBvdXQgb2YgYm91bmRzIHNvIHRoaXMgaXMg
c2FmZS4KLSAgICAgICAgICAgICAgICBDU1NWYWx1ZSogc2Vjb25kID0gbGlzdC0+aXRlbShpICsg
MSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZWNvbmQpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KGZpcnN0LT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHNlY29uZC0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAg
ICAgICAgICAgICBTdHJpbmcgc3RhcnRRdW90ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4oZmlyc3QpLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgICAgIFN0cmluZyBl
bmRRdW90ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oc2Vjb25kKS0+Z2V0U3Ry
aW5nVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBxdW90ZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KHN0YXJ0UXVvdGUsIGVuZFF1b3RlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRRdW90ZXMoUXVvdGVzRGF0YTo6Y3JlYXRlKHF1b3RlcykpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkgewot
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVO
b25lKQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcyhRdW90ZXNEYXRh
OjpjcmVhdGUoVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gPigpKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuOwotICAgIC8vIFNob3J0aGFuZCBwcm9wZXJ0aWVzLgotICAgIGNh
c2UgQ1NTUHJvcGVydHlGb250OgotICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUucGFyZW50U3R5bGUoKS0+
Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVp
Z2h0KHN0YXRlLnBhcmVudFN0eWxlKCktPnNwZWNpZmllZExpbmVIZWlnaHQoKSk7Ci0gICAgICAg
ICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7Ci0gICAgICAgICAgICBzZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0luaXRpYWwp
IHsKLSAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKTsK
LSAgICAgICAgICAgIEFTU0VSVChzZXR0aW5ncyk7IC8vIElmIHdlJ3JlIGRvaW5nIHN0eWxlIHJl
c29sdXRpb24sIHRoaXMgZG9jdW1lbnQgc2hvdWxkIGFsd2F5cyBiZSBpbiBhIGZyYW1lIGFuZCB0
aHVzIGhhdmUgc2V0dGluZ3MKLSAgICAgICAgICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaW5pdGlhbGl6ZUZvbnRTdHlsZShzZXR0aW5ncyk7
Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkp
OwotICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwotCi0gICAgICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwotICAgICAgICAgICAgUmVuZGVyVGhl
bWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlE
KCksIGZvbnREZXNjcmlwdGlvbik7Ci0KLSAgICAgICAgICAgIC8vIERvdWJsZS1jaGVjayBhbmQg
c2VlIGlmIHRoZSB0aGVtZSBkaWQgYW55dGhpbmcuIElmIG5vdCwgZG9uJ3QgYm90aGVyIHVwZGF0
aW5nIHRoZSBmb250LgotICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRl
U2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSByZW5kZXJpbmcgbW9k
ZSBhbmQgcHJpbnRlciBmb250IHNldHRpbmdzIGFyZSB1cGRhdGVkLgotICAgICAgICAgICAgICAg
IFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKTsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoc2V0dGluZ3MpOyAvLyBJZiB3ZSdyZSBkb2luZyBzdHlsZSByZXNvbHV0aW9uLCB0
aGlzIGRvY3VtZW50IHNob3VsZCBhbHdheXMgYmUgaW4gYSBmcmFtZSBhbmQgdGh1cyBoYXZlIHNl
dHRpbmdzCi0gICAgICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdN
b2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKLSAgICAgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSB8fCAh
c2V0dGluZ3MtPnNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKCkpOwotCi0gICAgICAgICAg
ICAgICAgLy8gSGFuZGxlIHRoZSB6b29tIGZhY3Rvci4KLSAgICAgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXpl
KGRvY3VtZW50KCksIHN0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6
ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkp
OwotICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRWYWx1ZSgpKSB7
Ci0gICAgICAgICAgICBGb250VmFsdWUqIGZvbnQgPSBzdGF0aWNfY2FzdDxGb250VmFsdWUqPih2
YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIWZvbnQtPnN0eWxlIHx8ICFmb250LT52YXJpYW50IHx8
ICFmb250LT53ZWlnaHQKLSAgICAgICAgICAgICAgICB8fCAhZm9udC0+c2l6ZSB8fCAhZm9udC0+
bGluZUhlaWdodCB8fCAhZm9udC0+ZmFtaWx5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUsIGZvbnQtPnN0eWxl
LmdldCgpKTsKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFu
dCwgZm9udC0+dmFyaWFudC5nZXQoKSk7Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1By
b3BlcnR5Rm9udFdlaWdodCwgZm9udC0+d2VpZ2h0LmdldCgpKTsKLSAgICAgICAgICAgIC8vIFRo
ZSBwcmV2aW91cyBwcm9wZXJ0aWVzIGNhbiBkaXJ0eSBvdXIgZm9udCBidXQgdGhleSBkb24ndCB0
cnkgdG8gcmVhZCB0aGUgZm9udCdzCi0gICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIGJhY2ssIHdo
aWNoIGlzIHNhZmUuIEhvd2V2ZXIgaWYgZm9udC1zaXplIGlzIHVzaW5nIHRoZSAnZXgnIHVuaXQs
IGl0IHdpbGwKLSAgICAgICAgICAgIC8vIG5lZWQgcXVlcnkgdGhlIGRpcnRpZWQgZm9udCdzIHgt
aGVpZ2h0IHRvIGdldCB0aGUgY29tcHV0ZWQgc2l6ZS4gVG8gYmUgc2FmZSBpbiB0aGlzCi0gICAg
ICAgICAgICAvLyBjYXNlLCBsZXQncyBqdXN0IHVwZGF0ZSB0aGUgZm9udCBub3cuCi0gICAgICAg
ICAgICB1cGRhdGVGb250KCk7Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
Rm9udFNpemUsIGZvbnQtPnNpemUuZ2V0KCkpOwotCi0gICAgICAgICAgICBzdGF0ZS5zZXRMaW5l
SGVpZ2h0VmFsdWUoZm9udC0+bGluZUhlaWdodC5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBmb250LT5mYW1pbHkuZ2V0KCkpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb246Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRSZXBlYXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2U6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlckxlZnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJhZGl1czoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
clNwYWNpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclN0eWxlOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3JkZXJUb3A6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcldpZHRoOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZToKLSAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZs
b3c6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRy
YW5zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlckJlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJTdGFydDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVyUmFkaXVzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5zOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRGbGV4OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4RmxvdzoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZENvbHVtbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0R3JpZFJvdzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQ29sbGFwc2U6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2s6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbjoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VGV4dEVtcGhhc2lzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2Zvcm1PcmlnaW46Ci0gICAgICAgIEFTU0VSVChpc0V4cGFuZGVkU2hvcnRo
YW5kKGlkKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsK
LQotICAgIC8vIENTUzMgUHJvcGVydGllcwotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0U2hhZG93
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaGFkb3c6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJveFNoYWRvdzogewotICAgICAgICBpZiAoaXNJbmhlcml0KSB7Ci0gICAgICAgICAgICBp
ZiAoaWQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAgICAgICAgICAgICAgIHJldHVybiBz
dGF0ZS5zdHlsZSgpLT5zZXRUZXh0U2hhZG93KHN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRTaGFk
b3coKSA/IGFkb3B0UHRyKG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0
U2hhZG93KCkpKSA6IG51bGxwdHIpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlKCkt
PnNldEJveFNoYWRvdyhzdGF0ZS5wYXJlbnRTdHlsZSgpLT5ib3hTaGFkb3coKSA/IGFkb3B0UHRy
KG5ldyBTaGFkb3dEYXRhKCpzdGF0ZS5wYXJlbnRTdHlsZSgpLT5ib3hTaGFkb3coKSkpIDogbnVs
bHB0cik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzSW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1
ZSkgLy8gaW5pdGlhbCB8IG5vbmUKLSAgICAgICAgICAgIHJldHVybiBpZCA9PSBDU1NQcm9wZXJ0
eVRleHRTaGFkb3cgPyBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0U2hhZG93KG51bGxwdHIpIDogc3Rh
dGUuc3R5bGUoKS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwotCi0gICAgICAgIGlmICghdmFsdWUt
PmlzVmFsdWVMaXN0KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZm9yIChDU1NW
YWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewot
ICAgICAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKLSAgICAgICAgICAg
IGlmICghY3VyclZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1Zh
bHVlKj4oY3VyclZhbHVlKTsKLSAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxl
bmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZh
Y3Rvcik7Ci0gICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50Pihz
dGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOwotICAg
ICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0
aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rv
cikgOiAwOwotICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/IGl0ZW0tPnNw
cmVhZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSwgem9vbUZhY3RvcikgOiAwOwotICAgICAgICAgICAgU2hhZG93U3R5bGUgc2hhZG93
U3R5bGUgPSBpdGVtLT5zdHlsZSAmJiBpdGVtLT5zdHlsZS0+Z2V0VmFsdWVJRCgpID09IENTU1Zh
bHVlSW5zZXQgPyBJbnNldCA6IE5vcm1hbDsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAg
ICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JG
cm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOwotICAgICAgICAgICAgZWxzZSBp
ZiAoc3RhdGUuc3R5bGUoKSkKLSAgICAgICAgICAgICAgICBjb2xvciA9IHN0YXRlLnN0eWxlKCkt
PmNvbG9yKCk7Ci0KLSAgICAgICAgICAgIE93blB0cjxTaGFkb3dEYXRhPiBzaGFkb3dEYXRhID0g
YWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoSW50UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwgc2hh
ZG93U3R5bGUsIGlkID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlk
KCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCkpOwotICAgICAgICAgICAgaWYgKGlkID09
IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRUZXh0U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8g
dGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm94U2hhZG93KHNoYWRvd0RhdGEu
cmVsZWFzZSgpLCBpLmluZGV4KCkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3Qg
dGhlIGZpcnN0IGVudHJ5Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdDogewotICAgICAgICBIQU5ETEVfSU5IRVJJ
VF9BTkRfSU5JVElBTChib3hSZWZsZWN0LCBCb3hSZWZsZWN0KQotICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJveFJlZmxlY3QoUmVu
ZGVyU3R5bGU6OmluaXRpYWxCb3hSZWZsZWN0KCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNSZWZsZWN0VmFsdWUoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBDU1NSZWZsZWN0VmFsdWUqIHJlZmxlY3RWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1JlZmxlY3RWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgUmVmUHRyPFN0eWxl
UmVmbGVjdGlvbj4gcmVmbGVjdGlvbiA9IFN0eWxlUmVmbGVjdGlvbjo6Y3JlYXRlKCk7Ci0gICAg
ICAgIHJlZmxlY3Rpb24tPnNldERpcmVjdGlvbigqcmVmbGVjdFZhbHVlLT5kaXJlY3Rpb24oKSk7
Ci0gICAgICAgIGlmIChyZWZsZWN0VmFsdWUtPm9mZnNldCgpKQotICAgICAgICAgICAgcmVmbGVj
dGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxG
aXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29u
dmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFj
dG9yKSk7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIG1hc2s7Ci0gICAgICAgIG1hc2suc2V0TWFz
a0RlZmF1bHRzKCk7Ci0gICAgICAgIG1fc3R5bGVNYXAubWFwTmluZVBpZWNlSW1hZ2UoaWQsIHJl
ZmxlY3RWYWx1ZS0+bWFzaygpLCBtYXNrKTsKLSAgICAgICAgcmVmbGVjdGlvbi0+c2V0TWFzayht
YXNrKTsKLQotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hSZWZsZWN0KHJlZmxlY3Rpb24u
cmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5
U3JjOiAvLyBPbmx5IHVzZWQgaW4gQGZvbnQtZmFjZSBydWxlcy4KLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgQ1NTUHJvcGVydHlVbmljb2RlUmFuZ2U6IC8vIE9ubHkgdXNlZCBpbiBAZm9udC1m
YWNlIHJ1bGVzLgotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExv
Y2FsZTogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsb2NhbGUsIExvY2Fs
ZSk7Ci0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykK
LSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExvY2FsZShudWxsQXRvbSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExvY2FsZShwcmltaXRpdmVWYWx1
ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFNjcmlwdChsb2NhbGVUb1NjcmlwdENvZGVGb3JGb250U2VsZWN0aW9uKHN0
YXRlLnN0eWxlKCktPmxvY2FsZSgpKSk7Ci0gICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2lmIEVOQUJMRShEQVNIQk9B
UkRfU1VQUE9SVCkKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RGFzaGJvYXJkUmVnaW9uOgot
ICAgIHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoZGFzaGJvYXJkUmVnaW9u
cywgRGFzaGJvYXJkUmVnaW9ucykKLSAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQo
KSA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERhc2hi
b2FyZFJlZ2lvbnMoUmVuZGVyU3R5bGU6Om5vbmVEYXNoYm9hcmRSZWdpb25zKCkpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgRGFzaGJvYXJkUmVnaW9uKiByZWdp
b24gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RGFzaGJvYXJkUmVnaW9uVmFsdWUoKTsKLSAgICAgICAg
aWYgKCFyZWdpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgRGFzaGJvYXJkUmVn
aW9uKiBmaXJzdCA9IHJlZ2lvbjsKLSAgICAgICAgd2hpbGUgKHJlZ2lvbikgewotICAgICAgICAg
ICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPnRvcCgpLCBzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOwotICAgICAgICAgICAgTGVuZ3RoIHJp
Z2h0ID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+cmlnaHQoKSwgc3RhdGUuc3R5bGUoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKLSAgICAgICAgICAgIExlbmd0aCBib3R0b20gPSBj
b252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT5ib3R0b20oKSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpKTsKLSAgICAgICAgICAgIExlbmd0aCBsZWZ0ID0gY29udmVydFRv
SW50TGVuZ3RoKHJlZ2lvbi0+bGVmdCgpLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCkpOwotCi0gICAgICAgICAgICBpZiAodG9wLmlzVW5kZWZpbmVkKCkpCi0gICAgICAg
ICAgICAgICAgdG9wID0gTGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAocmlnaHQuaXNVbmRlZmlu
ZWQoKSkKLSAgICAgICAgICAgICAgICByaWdodCA9IExlbmd0aCgpOwotICAgICAgICAgICAgaWYg
KGJvdHRvbS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIGJvdHRvbSA9IExlbmd0aCgp
OwotICAgICAgICAgICAgaWYgKGxlZnQuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBs
ZWZ0ID0gTGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIGlmIChyZWdpb24tPm1faXNDaXJjbGUpCi0g
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFz
aGJvYXJkUmVnaW9uOjpDaXJjbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9t
LCBsZWZ0LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwotICAgICAgICAgICAgZWxz
ZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xlKQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6UmVjdGFuZ2xlLCBy
ZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZpcnN0
ID8gZmFsc2UgOiB0cnVlKTsKLSAgICAgICAgICAgIHJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0Lmdl
dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGUuZG9jdW1lbnQoKS0+c2V0SGFzQW5ub3Rh
dGVkUmVnaW9ucyh0cnVlKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0jaWYg
RU5BQkxFKERSQUdHQUJMRV9SRUdJT04pCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFwcFJl
Z2lvbjogewotICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlIHx8ICFwcmltaXRpdmVWYWx1ZS0+
Z2V0VmFsdWVJRCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXREcmFnZ2FibGVSZWdpb25Nb2RlKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVEcmFnID8gRHJhZ2dhYmxlUmVnaW9uRHJhZyA6IERyYWdnYWJsZVJlZ2lvbk5vRHJh
Zyk7Ci0gICAgICAgIHN0YXRlLmRvY3VtZW50KCktPnNldEhhc0Fubm90YXRlZFJlZ2lvbnModHJ1
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dFN0cm9rZVdpZHRoOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklU
SUFMKHRleHRTdHJva2VXaWR0aCwgVGV4dFN0cm9rZVdpZHRoKQotICAgICAgICBmbG9hdCB3aWR0
aCA9IDA7Ci0gICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSkgewot
ICAgICAgICBjYXNlIENTU1ZhbHVlVGhpbjoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU1lZGl1bToK
LSAgICAgICAgY2FzZSBDU1NWYWx1ZVRoaWNrOiB7Ci0gICAgICAgICAgICBkb3VibGUgcmVzdWx0
ID0gMS4wIC8gNDg7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQo
KSA9PSBDU1NWYWx1ZU1lZGl1bSkKLSAgICAgICAgICAgICAgICByZXN1bHQgKj0gMzsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVU
aGljaykKLSAgICAgICAgICAgICAgICByZXN1bHQgKj0gNTsKLSAgICAgICAgICAgIHdpZHRoID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
RU1TKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCks
IHpvb21GYWN0b3IpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0VGV4dFN0cm9rZVdpZHRoKHdpZHRoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtOiB7Ci0gICAgICAgIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRyYW5zZm9ybSwgVHJhbnNmb3JtKTsKLSAgICAgICAg
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgICAgICB0cmFuc2Zvcm1zRm9yVmFs
dWUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB2YWx1ZSwgb3BlcmF0
aW9ucyk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRyYW5zZm9ybShvcGVyYXRpb25zKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGVyc3Bl
Y3RpdmU6IHsKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwocGVyc3BlY3RpdmUs
IFBlcnNwZWN0aXZlKQotCi0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRQZXJzcGVjdGl2
ZSgwKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IHBl
cnNwZWN0aXZlVmFsdWU7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkK
LSAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxl
bmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29t
RmFjdG9yKTsKLSAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsK
LSAgICAgICAgICAgIC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0cmVhdCB2YWx1ZWxl
c3MgbnVtYmVycyBhcyBweC4KLSAgICAgICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BYKS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUo
KSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHBlcnNwZWN0aXZlVmFsdWUgPj0g
MC4wZikKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBlcnNwZWN0aXZlKHBlcnNwZWN0
aXZlVmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiB7Ci0gICAg
ICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRhcEhpZ2hsaWdodENvbG9yLCBUYXBIaWdo
bGlnaHRDb2xvcik7Ci0gICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCi0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBDb2xvciBjb2wgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmlt
aXRpdmVWYWx1ZSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRhcEhpZ2hsaWdodENvbG9y
KGNvbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQUNDRUxF
UkFURURfT1ZFUkZMT1dfU0NST0xMSU5HKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRPdmVy
Zmxvd1Njcm9sbGluZzogewotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh1c2VU
b3VjaE92ZXJmbG93U2Nyb2xsaW5nLCBVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKTsKLSAgICAg
ICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRVc2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKHByaW1pdGl2ZVZhbHVlLT5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVUb3VjaCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5SW52YWxpZDoKLSAgICAgICAgcmV0dXJuOwotICAg
IC8vIERpcmVjdGlvbmFsIHByb3BlcnRpZXMgYXJlIHJlc29sdmVkIGJ5IHJlc29sdmVEaXJlY3Rp
b25Bd2FyZVByb3BlcnR5KCkgYmVmb3JlIHRoZSBzd2l0Y2guCi0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJvcmRlckVuZENvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJF
bmRTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRW5kV2lkdGg6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclN0YXJ0Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlclN0YXJ0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
cmRlclN0YXJ0V2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJlZm9yZUNv
bG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCZWZvcmVTdHlsZToKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQmVmb3JlV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlckFmdGVyQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
cmRlckFmdGVyU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckFmdGVyV2lk
dGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkVuZDoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFyZ2luU3RhcnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdp
bkJlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQWZ0ZXI6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9yZUNvbGxhcHNlOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXJnaW5Ub3BDb2xsYXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFyZ2luQWZ0ZXJDb2xsYXBzZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQm90
dG9tQ29sbGFwc2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdFbmQ6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFBhZGRpbmdTdGFydDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0UGFkZGluZ0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ0Fm
dGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMb2dpY2FsV2lkdGg6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdExvZ2ljYWxIZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1pbkxvZ2ljYWxXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWluTG9naWNhbEhl
aWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF4TG9naWNhbFdpZHRoOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXhMb2dpY2FsSGVpZ2h0OgotICAgIHsKLSAgICAgICAgQ1NT
UHJvcGVydHlJRCBuZXdJZCA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9w
ZXJ0eShpZCwgc3RhdGUuc3R5bGUoKS0+ZGlyZWN0aW9uKCksIHN0YXRlLnN0eWxlKCktPndyaXRp
bmdNb2RlKCkpOwotICAgICAgICBBU1NFUlQobmV3SWQgIT0gaWQpOwotICAgICAgICByZXR1cm4g
YXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWUpOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5
Rm9udFN0cmV0Y2g6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2U6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVRleHRMaW5lVGhyb3VnaDoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dExpbmVUaHJvdWdo
Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaE1vZGU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRleHRMaW5lVGhyb3VnaFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlU
ZXh0TGluZVRocm91Z2hXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmxpbmVDb2xvcjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dE92ZXJsaW5lTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dE92ZXJsaW5lU3R5
bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVybGluZVdpZHRoOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlUZXh0VW5kZXJsaW5lOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5l
Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVNb2RlOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRV
bmRlcmxpbmVXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNpemVEZWx0YToK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3Q6Ci0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIENTUyBUZXh0IExheW91dCBNb2R1bGUgTGV2ZWwgMzogVmVy
dGljYWwgd3JpdGluZyBzdXBwb3J0Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyaXRpbmdN
b2RlOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHdyaXRpbmdNb2RlLCBX
cml0aW5nTW9kZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUpCi0gICAg
ICAgICAgICBzZXRXcml0aW5nTW9kZSgqcHJpbWl0aXZlVmFsdWUpOwotCi0gICAgICAgIC8vIEZJ
WE1FOiBJdCBpcyBub3Qgb2sgdG8gbW9kaWZ5IGRvY3VtZW50IHN0YXRlIHdoaWxlIGFwcGx5aW5n
IHN0eWxlLgotICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpICYmIHN0YXRlLmVsZW1lbnQoKSA9
PSBzdGF0ZS5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIHN0YXRl
LmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQodHJ1ZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dE9y
aWVudGF0aW9uOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRleHRPcmll
bnRhdGlvbiwgVGV4dE9yaWVudGF0aW9uKTsKLQotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUp
Ci0gICAgICAgICAgICBzZXRUZXh0T3JpZW50YXRpb24oKnByaW1pdGl2ZVZhbHVlKTsKLQotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVCb3hD
b250YWluOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGxpbmVCb3hDb250
YWluLCBMaW5lQm94Q29udGFpbikKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1p
dGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRMaW5lQm94Q29udGFpbihMaW5lQm94Q29udGFpbk5vbmUpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNDU1NM
aW5lQm94Q29udGFpblZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ1NT
TGluZUJveENvbnRhaW5WYWx1ZSogbGluZUJveENvbnRhaW5WYWx1ZSA9IHN0YXRpY19jYXN0PENT
U0xpbmVCb3hDb250YWluVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dExpbmVCb3hDb250YWluKGxpbmVCb3hDb250YWluVmFsdWUtPnZhbHVlKCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ1NTIEZvbnRzIE1vZHVsZSBMZXZlbCAzCi0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3M6IHsKLSAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVO
b3JtYWwpIHsKLSAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihzdGF0ZS5zdHlsZSgpLT5m
b250RGVzY3JpcHRpb24oKS5tYWtlTm9ybWFsRmVhdHVyZVNldHRpbmdzKCkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3Qo
KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIENT
U1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAg
ICAgICAgUmVmUHRyPEZvbnRGZWF0dXJlU2V0dGluZ3M+IHNldHRpbmdzID0gRm9udEZlYXR1cmVT
ZXR0aW5nczo6Y3JlYXRlKCk7Ci0gICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgQ1NTVmFs
dWUqIGl0ZW0gPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAg
aWYgKCFpdGVtLT5pc0ZvbnRGZWF0dXJlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIEZvbnRGZWF0dXJlVmFsdWUqIGZlYXR1cmUgPSBzdGF0aWNfY2FzdDxG
b250RmVhdHVyZVZhbHVlKj4oaXRlbSk7Ci0gICAgICAgICAgICBzZXR0aW5ncy0+YXBwZW5kKEZv
bnRGZWF0dXJlKGZlYXR1cmUtPnRhZygpLCBmZWF0dXJlLT52YWx1ZSgpKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZlYXR1cmVTZXR0aW5ncyhzZXR0aW5ncy5yZWxl
YXNlKCkpOwotICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMKGZpbHRlciwgRmlsdGVyKTsKLSAgICAgICAgRmlsdGVyT3BlcmF0aW9ucyBvcGVyYXRp
b25zOwotICAgICAgICBpZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZSwgc3RhdGUuc3R5
bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKSkKLSAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldEZpbHRlcihvcGVyYXRpb25zKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkQXV0b0NvbHVtbnM6
IHsKLSAgICAgICAgR3JpZFRyYWNrU2l6ZSB0cmFja1NpemU7Ci0gICAgICAgIGlmICghY3JlYXRl
R3JpZFRyYWNrU2l6ZSh2YWx1ZSwgdHJhY2tTaXplLCBzdGF0ZSkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRBdXRvQ29sdW1ucyh0cmFja1NpemUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRHcmlk
QXV0b1Jvd3M6IHsKLSAgICAgICAgR3JpZFRyYWNrU2l6ZSB0cmFja1NpemU7Ci0gICAgICAgIGlm
ICghY3JlYXRlR3JpZFRyYWNrU2l6ZSh2YWx1ZSwgdHJhY2tTaXplLCBzdGF0ZSkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRBdXRvUm93cyh0cmFj
a1NpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRHcmlkRGVmaW5pdGlvbkNvbHVtbnM6IHsKLSAgICAgICAgVmVjdG9yPEdyaWRUcmFja1NpemU+
IHRyYWNrU2l6ZXM7Ci0gICAgICAgIE5hbWVkR3JpZExpbmVzTWFwIG5hbWVkR3JpZExpbmVzOwot
ICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrU2l6ZXMsIG5hbWVk
R3JpZExpbmVzLCBzdGF0ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldEdyaWRDb2x1bW5zKHRyYWNrU2l6ZXMpOwotICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXROYW1lZEdyaWRDb2x1bW5MaW5lcyhuYW1lZEdyaWRMaW5lcyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWREZWZpbml0aW9uUm93czog
ewotICAgICAgICBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4gdHJhY2tTaXplczsKLSAgICAgICAgTmFt
ZWRHcmlkTGluZXNNYXAgbmFtZWRHcmlkTGluZXM7Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFRy
YWNrTGlzdCh2YWx1ZSwgdHJhY2tTaXplcywgbmFtZWRHcmlkTGluZXMsIHN0YXRlKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZFJvd3ModHJhY2tT
aXplcyk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE5hbWVkR3JpZFJvd0xpbmVzKG5hbWVk
R3JpZExpbmVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRHcmlkQ29sdW1uU3RhcnQ6IHsKLSAgICAgICAgR3JpZFBvc2l0aW9uIGNvbHVtblN0
YXJ0UG9zaXRpb247Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBjb2x1
bW5TdGFydFBvc2l0aW9uKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0R3JpZEl0ZW1Db2x1bW5TdGFydChjb2x1bW5TdGFydFBvc2l0aW9uKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZENvbHVtbkVu
ZDogewotICAgICAgICBHcmlkUG9zaXRpb24gY29sdW1uRW5kUG9zaXRpb247Ci0gICAgICAgIGlm
ICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBjb2x1bW5FbmRQb3NpdGlvbikpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRJdGVtQ29sdW1uRW5k
KGNvbHVtbkVuZFBvc2l0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRHcmlkUm93U3RhcnQ6IHsKLSAgICAgICAgR3JpZFBvc2l0aW9uIHJv
d1N0YXJ0UG9zaXRpb247Ci0gICAgICAgIGlmICghY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBy
b3dTdGFydFBvc2l0aW9uKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0R3JpZEl0ZW1Sb3dTdGFydChyb3dTdGFydFBvc2l0aW9uKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZFJvd0VuZDogewotICAg
ICAgICBHcmlkUG9zaXRpb24gcm93RW5kUG9zaXRpb247Ci0gICAgICAgIGlmICghY3JlYXRlR3Jp
ZFBvc2l0aW9uKHZhbHVlLCByb3dFbmRQb3NpdGlvbikpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEdyaWRJdGVtUm93RW5kKHJvd0VuZFBvc2l0aW9uKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIGFs
aWFzZWQgYW5kIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIgYWxyZWFkeSBhcHBsaWVkIHRoZSBwcm9w
ZXJ0eSBvbiB0aGUgcHJlZml4ZWQgdmVyc2lvbi4KLSAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNp
dGlvbkRlbGF5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uRHVyYXRpb246Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb25Qcm9wZXJ0eToKLSAgICBjYXNlIENTU1Byb3BlcnR5
VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgotICAgICAgICByZXR1cm47Ci0gICAgLy8gVGhlc2Ug
cHJvcGVydGllcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIg
bG9va3VwIHRhYmxlLgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb25YOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9z
aXRpb25ZOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRTaXplOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcjoKLSAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1czoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyQ29sbGFwc2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
ckltYWdlT3V0c2V0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVJlcGVhdDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VTb3VyY2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlV2lkdGg6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcjoKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGg6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlclJpZ2h0U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lk
dGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BS
aWdodFJhZGl1czoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3R0b206
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJveFNpemluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5Q2Fw
dGlvblNpZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNsZWFyOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlDbGlwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
Q291bnRlckluY3JlbWVudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Q291bnRlclJlc2V0OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlDdXJzb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eURpcmVjdGlvbjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5RGlzcGxheToKLSAgICBjYXNlIENTU1Byb3BlcnR5RW1wdHlD
ZWxsczoKLSAgICBjYXNlIENTU1Byb3BlcnR5RmxvYXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZv
bnRTaXplOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUZvbnRWYXJpYW50OgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250V2VpZ2h0OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlIZWlnaHQ6Ci0jaWYgRU5BQkxFKENTU19JTUFHRV9PUklFTlRBVElPTikK
LSAgICBjYXNlIENTU1Byb3BlcnR5SW1hZ2VPcmllbnRhdGlvbjoKLSNlbmRpZgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlJbWFnZVJlbmRlcmluZzoKLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJ
T04pCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbjoKLSNlbmRpZgotICAgIGNh
c2UgQ1NTUHJvcGVydHlMZWZ0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0
U3R5bGVJbWFnZToKLSAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlUG9zaXRpb246Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5cGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdp
bkJvdHRvbToKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luTGVmdDoKLSAgICBjYXNlIENTU1By
b3BlcnR5TWFyZ2luUmlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpblRvcDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5TWF4SGVpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhXaWR0aDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5TWluSGVpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5X
aWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3BhY2l0eToKLSAgICBjYXNlIENTU1Byb3BlcnR5
T3JwaGFuczoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZUNvbG9yOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlPdXRsaW5lT2Zmc2V0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lU3R5bGU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
T3ZlcmZsb3dXcmFwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1g6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eU92ZXJmbG93WToKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0JvdHRvbToK
LSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0xlZnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBh
ZGRpbmdSaWdodDoKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1RvcDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5UGFnZUJyZWFrQWZ0ZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0Jl
Zm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJyZWFrSW5zaWRlOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlQb2ludGVyRXZlbnRzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlQb3NpdGlvbjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5UmVzaXplOgotICAgIGNhc2UgQ1NTUHJvcGVydHlSaWdodDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5U2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5U3BlYWs6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVRhYlNpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRhYmxlTGF5b3V0
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0QWxpZ246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRl
eHREZWNvcmF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0SW5kZW50OgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlUZXh0T3ZlcmZsb3c6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRSZW5kZXJp
bmc6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm06Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVRvcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5VW5pY29kZUJpZGk6Ci0jaWYgRU5BQkxFKENT
U19WQVJJQUJMRVMpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVZhcmlhYmxlOgotI2VuZGlmCi0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVZpc2li
aWxpdHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25GaWxsTW9kZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uSXRl
cmF0aW9uQ291bnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbk5hbWU6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZToKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEFwcGVhcmFuY2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJh
dGlvOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDbGlwOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCYWNrZ3JvdW5kQ29tcG9zaXRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
YWNrZ3JvdW5kT3JpZ2luOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6
ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyRml0OgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVySW1hZ2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRp
Y2FsU3BhY2luZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94QWxpZ246Ci0jaWYgRU5B
QkxFKENTU19CT1hfREVDT1JBVElPTl9CUkVBSykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm94RGVjb3JhdGlvbkJyZWFrOgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
eERpcmVjdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RmxleDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm94RmxleEdyb3VwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCb3hMaW5lczoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94T3JkaW5hbEdyb3VwOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hPcmllbnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJveFBhY2s6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbG9yQ29ycmVjdGlv
bjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQXhpczoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Q29sdW1uQnJlYWtBZnRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Q29sdW1uQnJlYWtCZWZvcmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFr
SW5zaWRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5Db3VudDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Q29sdW1uR2FwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRD
b2x1bW5Qcm9ncmVzc2lvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNv
bG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlU3R5bGU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVXaWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0Q29sdW1uU3BhbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uV2lkdGg6
Ci0jaWYgRU5BQkxFKENVUlNPUl9WSVNJQklMSVRZKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRDdXJzb3JWaXNpYmlsaXR5OgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFs
aWduQ29udGVudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QWxpZ25JdGVtczoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QWxpZ25TZWxmOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRGbGV4QmFzaXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhEaXJlY3Rpb246Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhHcm93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRGbGV4U2hyaW5rOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4V3JhcDoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SnVzdGlmeUNvbnRlbnQ6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE9yZGVyOgotI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0Rmxvd0Zyb206Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dJbnRv
OgotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRLZXJuaW5nOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRGb250U21vb3RoaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRGb250VmFyaWFudExpZ2F0dXJlczoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SGln
aGxpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVDaGFyYWN0ZXI6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0QWZ0ZXI6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0QmVmb3JlOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRI
eXBoZW5zOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lQWxpZ246Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdExpbmVCcmVhazoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGlu
ZUNsYW1wOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lR3JpZDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TGluZVNuYXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1
ZWVEaXJlY3Rpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVJbmNyZW1lbnQ6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVSZXBldGl0aW9uOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3BlZWQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hcnF1ZWVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VPdXRzZXQ6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVJlcGVhdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFza0JveEltYWdlU2xpY2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tC
b3hJbWFnZVNvdXJjZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlV2lk
dGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrQ29tcG9zaXRlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNr
SW1hZ2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW46Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tQb3NpdGlvblk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRYOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WToKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFza1NpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE5ic3BNb2RlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZU9yaWdpbjoKLSAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmVPcmlnaW5YOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRQZXJzcGVjdGl2ZU9yaWdpblk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFByaW50
Q29sb3JBZGp1c3Q6Ci0jaWYgRU5BQkxFKENTU19SRUdJT05TKQotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRSZWdpb25CcmVha0FmdGVyOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdp
b25CcmVha0JlZm9yZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtJbnNp
ZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkZyYWdtZW50OgotI2VuZGlmCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5nOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRSdWJ5UG9zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRDb21i
aW5lOgotI2lmIEVOQUJMRShDU1MzX1RFWFQpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHREZWNvcmF0aW9uTGluZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRp
b25TdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25Db2xvcjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEFsaWduTGFzdDoKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VGV4dEp1c3RpZnk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRV
bmRlcmxpbmVQb3NpdGlvbjoKLSNlbmRpZiAvLyBDU1MzX1RFWFQKLSAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRFbXBoYXNpc1Bvc2l0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFz
aXNTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNlY3VyaXR5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUZXh0U3Ryb2tlQ29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bU9yaWdpblg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblk6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblo6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybVN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2l0aW9uRGVsYXk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJh
dGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5OgotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFnOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRV
c2VyTW9kaWZ5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0OgotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRDbGlwUGF0aDoKLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJnaW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFNoYXBlUGFkZGluZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVJbnNp
ZGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlT3V0c2lkZToKLSNlbmRpZgotI2lm
IEVOQUJMRShDU1NfRVhDTFVTSU9OUykKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JhcEZs
b3c6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBUaHJvdWdoOgotI2VuZGlmCi0jaWYg
RU5BQkxFKENTU19TSEFERVJTKQotICAgIGNhc2UgQ1NTUHJvcGVydHlNaXg6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVBhcmFtZXRlcnM6Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5V2hpdGVT
cGFjZToKLSAgICBjYXNlIENTU1Byb3BlcnR5V2lkb3dzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlX
aWR0aDoKLSAgICBjYXNlIENTU1Byb3BlcnR5V29yZEJyZWFrOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlXb3JkU3BhY2luZzoKLSAgICBjYXNlIENTU1Byb3BlcnR5V29yZFdyYXA6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVpJbmRleDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Wm9vbToKLSNpZiBFTkFCTEUo
Q1NTX0RFVklDRV9BREFQVEFUSU9OKQotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhab29tOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlNaW5ab29tOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPcmllbnRhdGlv
bjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VXNlclpvb206Ci0jZW5kaWYKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotI2lmIEVOQUJM
RShTVkcpCi0gICAgICAgIC8vIFRyeSB0aGUgU1ZHIHByb3BlcnRpZXMKLSAgICAgICAgYXBwbHlT
VkdQcm9wZXJ0eShpZCwgdmFsdWUpOwotI2VuZGlmCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci19
Ci0KLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLT5p
c0ltYWdlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShw
cm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KHZhbHVlKSk7Ci0KLSAgICBpZiAo
dmFsdWUtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNH
cmFkaWVudFZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJv
bVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4odmFsdWUpLT5n
cmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBn
ZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdl
R2VuZXJhdG9yVmFsdWUqPih2YWx1ZSkpOwotICAgIH0KLQotI2lmIEVOQUJMRShDU1NfSU1BR0Vf
U0VUKQotICAgIGlmICh2YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkpCi0gICAgICAgIHJldHVybiBz
ZXRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFs
dWUqPih2YWx1ZSkpOwotI2VuZGlmCi0KLSAgICBpZiAodmFsdWUtPmlzQ3Vyc29ySW1hZ2VWYWx1
ZSgpKQotICAgICAgICByZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBz
dGF0aWNfY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlKj4odmFsdWUpKTsKLQotICAgIHJldHVybiAw
OwotfQotCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVu
ZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1
ZSkKLXsKLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5k
aW5nSW1hZ2UoKTsKLSAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0g
ICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFs
dWUpOwotICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8U3R5bGVJ
bWFnZT4gU3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZS0+aXNQZW5kaW5nKCkpIHsKLSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBTdHlsZVBlbmRp
bmdJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVk
SW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLVBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c2V0T3JQZW5kaW5nRnJvbVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlU2V0VmFsdWUqIHZhbHVlKQotewotICAg
IFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZVNl
dChkb2N1bWVudCgpKTsKLSAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkp
Ci0gICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwg
dmFsdWUpOwotICAgIHJldHVybiBpbWFnZS5yZWxlYXNlKCk7Ci19Ci0jZW5kaWYKLQotUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogdmFsdWUpCi17Ci0g
ICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdl
KGRvY3VtZW50KCkpOwotICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkK
LSAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2
YWx1ZSk7Ci0gICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKLX0KLQotdm9pZCBTdHlsZVJlc29s
dmVyOjpjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpCi17Ci0gICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29tKCkgPT0gcGFyZW50
U3R5bGUtPmVmZmVjdGl2ZVpvb20oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBjaGlsZEZvbnQgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAg
Rm9udERlc2NyaXB0aW9uIG5ld0ZvbnREZXNjcmlwdGlvbihjaGlsZEZvbnQpOwotICAgIHNldEZv
bnRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbiwgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSk7Ci0g
ICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwotfQotCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHls
ZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLXsKLSAgICBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLQotICAgIGlm
IChjaGlsZEZvbnQuaXNBYnNvbHV0ZVNpemUoKSB8fCAhcGFyZW50U3R5bGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udCA9IHBhcmVudFN0
eWxlLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICBpZiAoY2hpbGRGb250LnVzZUZpeGVkRGVmYXVs
dFNpemUoKSA9PSBwYXJlbnRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gRm9yIG5vdywgbHVtcCBhbGwgZmFtaWxpZXMgYnV0IG1vbm9zcGFjZSB0
b2dldGhlci4KLSAgICBpZiAoY2hpbGRGb250LmdlbmVyaWNGYW1pbHkoKSAhPSBGb250RGVzY3Jp
cHRpb246Ok1vbm9zcGFjZUZhbWlseQotICAgICAgICAmJiBwYXJlbnRGb250LmdlbmVyaWNGYW1p
bHkoKSAhPSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gV2Uga25vdyB0aGUgcGFyZW50IGlzIG1vbm9zcGFjZSBvciB0aGUgY2hpbGQg
aXMgbW9ub3NwYWNlLCBhbmQgdGhhdCBmb250Ci0gICAgLy8gc2l6ZSB3YXMgdW5zcGVjaWZpZWQu
IFdlIHdhbnQgdG8gc2NhbGUgb3VyIGZvbnQgc2l6ZSBhcyBhcHByb3ByaWF0ZS4KLSAgICAvLyBJ
ZiB0aGUgZm9udCB1c2VzIGEga2V5d29yZCBzaXplLCB0aGVuIHdlIHJlZmV0Y2ggZnJvbSB0aGUg
dGFibGUgcmF0aGVyIHRoYW4KLSAgICAvLyBtdWx0aXBseWluZyBieSBvdXIgc2NhbGUgZmFjdG9y
LgotICAgIGZsb2F0IHNpemU7Ci0gICAgaWYgKGNoaWxkRm9udC5rZXl3b3JkU2l6ZSgpKQotICAg
ICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlWHhTbWFs
bCArIGNoaWxkRm9udC5rZXl3b3JkU2l6ZSgpIC0gMSwgY2hpbGRGb250LnVzZUZpeGVkRGVmYXVs
dFNpemUoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3Vt
ZW50U2V0dGluZ3MoKTsKLSAgICAgICAgZmxvYXQgZml4ZWRTY2FsZUZhY3RvciA9IChzZXR0aW5n
cyAmJiBzZXR0aW5ncy0+ZGVmYXVsdEZpeGVkRm9udFNpemUoKSAmJiBzZXR0aW5ncy0+ZGVmYXVs
dEZvbnRTaXplKCkpCi0gICAgICAgICAgICA/IHN0YXRpY19jYXN0PGZsb2F0PihzZXR0aW5ncy0+
ZGVmYXVsdEZpeGVkRm9udFNpemUoKSkgLyBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCkKLSAg
ICAgICAgICAgIDogMTsKLSAgICAgICAgc2l6ZSA9IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0
U2l6ZSgpID8KLSAgICAgICAgICAgICAgICBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpIC8gZml4
ZWRTY2FsZUZhY3RvciA6Ci0gICAgICAgICAgICAgICAgY2hpbGRGb250LnNwZWNpZmllZFNpemUo
KSAqIGZpeGVkU2NhbGVGYWN0b3I7Ci0gICAgfQotCi0gICAgRm9udERlc2NyaXB0aW9uIG5ld0Zv
bnREZXNjcmlwdGlvbihjaGlsZEZvbnQpOwotICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlw
dGlvbiwgc2l6ZSk7Ci0gICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3Jp
cHRpb24pOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoU2V0
dGluZ3MqIHNldHRpbmdzKQotewotICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247
Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpT
dGFuZGFyZEZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0
dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQ
cmludGVyRm9udChkb2N1bWVudCgpLT5wcmludGluZygpIHx8ICFzZXR0aW5ncy0+c2NyZWVuRm9u
dFN1YnN0aXR1dGlvbkVuYWJsZWQoKSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFy
ZEZvbnRGYW1pbHkgPSBkb2N1bWVudFNldHRpbmdzKCktPnN0YW5kYXJkRm9udEZhbWlseSgpOwot
ICAgIGlmICghc3RhbmRhcmRGb250RmFtaWx5LmlzRW1wdHkoKSkKLSAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldE9uZUZhbWlseShzdGFuZGFyZEZvbnRGYW1pbHkpOwotICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEp
OwotICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRv
Y3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSkpOwotICAgIG1fc3RhdGUuc3R5bGUoKS0+
c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgbV9z
dGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7Ci0gICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCi17Ci0gICAgZm9udERlc2Ny
aXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENv
bXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBt
X3N0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1
c2VTVkdab29tUnVsZXMoKSkpOwotfQorbmFtZXNwYWNlIFdlYkNvcmUgewogCi1mbG9hdCBTdHls
ZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9j
dW1lbnQsIFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3Bl
Y2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpCi17Ci0gICAgZmxvYXQgem9vbUZhY3Rv
ciA9IDEuMGY7Ci0gICAgaWYgKCF1c2VTVkdab29tUnVsZXMpIHsKLSAgICAgICAgem9vbUZhY3Rv
ciA9IHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgICAgIHpvb21GYWN0b3IgKj0gZnJhbWUtPnRleHRa
b29tRmFjdG9yKCk7Ci0gICAgfQorbmFtZXNwYWNlIFN0eWxlIHsKIAotICAgIHJldHVybiBTdHls
ZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCwgem9v
bUZhY3RvciwgaXNBYnNvbHV0ZVNpemUsIHNwZWNpZmllZFNpemUpOwotfQorZW51bSBFU21hcnRN
aW5pbXVtRm9yRm9udFNpemUgeyBEb05vdFVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXplLCBVc2VT
bWFydE1pbmltdW1Gb3JGb250Rml6ZSB9OwogCi1mbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRDb21w
dXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIGZsb2F0IHpvb21G
YWN0b3IsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIEVTbWFydE1p
bmltdW1Gb3JGb250U2l6ZSB1c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSkKK3N0YXRpYyBmbG9h
dCBjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoZmxvYXQgc3BlY2lmaWVkU2l6ZSwg
Ym9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgem9vbUZhY3RvciwgRVNtYXJ0TWluaW11bUZvckZv
bnRTaXplIHVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXplLCBjb25zdCBTZXR0aW5ncyogc2V0dGlu
Z3MpCiB7CiAgICAgLy8gVGV4dCB3aXRoIGEgMHB4IGZvbnQgc2l6ZSBzaG91bGQgbm90IGJlIHZp
c2libGUgYW5kIHRoZXJlZm9yZSBuZWVkcyB0byBiZQogICAgIC8vIGV4ZW1wdCBmcm9tIG1pbmlt
dW0gZm9udCBzaXplIHJ1bGVzLiBBY2lkMyByZWxpZXMgb24gdGhpcyBmb3IgcGl4ZWwtcGVyZmVj
dApAQCAtMzMzNyw3ICs2MCw2IEBAIGZsb2F0IFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6
ZUZyb20KICAgICAvLyBIb3dldmVyIHdlIGFsd2F5cyBhbGxvdyB0aGUgcGFnZSB0byBzZXQgYW4g
ZXhwbGljaXQgcGl4ZWwgc2l6ZSB0aGF0IGlzIHNtYWxsZXIsCiAgICAgLy8gc2luY2Ugc2l0ZXMg
d2lsbCBtaXMtcmVuZGVyIG90aGVyd2lzZSAoZS5nLiwgaHR0cDovL3d3dy5nYW1lc3BvdC5jb20g
d2l0aCBhIDlweCBtaW5pbXVtKS4KIAotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50
LT5zZXR0aW5ncygpOwogICAgIGlmICghc2V0dGluZ3MpCiAgICAgICAgIHJldHVybiAxLjBmOwog
CkBAIC0zMzU4LDcgKzgwLDIzIEBAIGZsb2F0IFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6
ZUZyb20KIAogICAgIC8vIEFsc28gY2xhbXAgdG8gYSByZWFzb25hYmxlIG1heGltdW0gdG8gcHJl
dmVudCBpbnNhbmUgZm9udCBzaXplcyBmcm9tIGNhdXNpbmcgY3Jhc2hlcyBvbiB2YXJpb3VzCiAg
ICAgLy8gcGxhdGZvcm1zIChJJ20gbG9va2luZyBhdCB5b3UsIFdpbmRvd3MuKQotICAgIHJldHVy
biBtaW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwgem9vbWVkU2l6ZSk7CisgICAgcmV0dXJuIHN0
ZDo6bWluKG1heGltdW1BbGxvd2VkRm9udFNpemUsIHpvb21lZFNpemUpOworfQorCitmbG9hdCBj
b21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9v
bCBpc0Fic29sdXRlU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMsIGNvbnN0IFJlbmRlclN0eWxl
KiBzdHlsZSwgY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIGZsb2F0IHpvb21GYWN0
b3IgPSAxLjBmOworICAgIGlmICghdXNlU1ZHWm9vbVJ1bGVzKSB7CisgICAgICAgIHpvb21GYWN0
b3IgPSBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAgICAgICB6b29tRmFjdG9yICo9IGZyYW1lLT50ZXh0
Wm9vbUZhY3RvcigpOworICAgIH0KKyAgICByZXR1cm4gY29tcHV0ZWRGb250U2l6ZUZyb21TcGVj
aWZpZWRTaXplKHNwZWNpZmllZFNpemUsIGlzQWJzb2x1dGVTaXplLCB6b29tRmFjdG9yLCBVc2VT
bWFydE1pbmltdW1Gb3JGb250Rml6ZSwgZG9jdW1lbnQtPnNldHRpbmdzKCkpOworfQorCitmbG9h
dCBjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemVGb3JTVkdJbmxpbmVUZXh0KGZsb2F0
IHNwZWNpZmllZFNpemUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHpvb21GYWN0b3IsIGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gY29tcHV0ZWRGb250U2l6ZUZy
b21TcGVjaWZpZWRTaXplKHNwZWNpZmllZFNpemUsIGlzQWJzb2x1dGVTaXplLCB6b29tRmFjdG9y
LCBEb05vdFVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXplLCBkb2N1bWVudC0+c2V0dGluZ3MoKSk7
CiB9CiAKIGNvbnN0IGludCBmb250U2l6ZVRhYmxlTWF4ID0gMTY7CkBAIC0zNDAzLDcgKzE0MSw3
IEBAIHN0YXRpYyBjb25zdCBpbnQgc3RyaWN0Rm9udFNpemVUYWJsZVtmb24KIC8vIGZhY3RvcnMg
Zm9yIGVhY2gga2V5d29yZCB2YWx1ZS4KIHN0YXRpYyBjb25zdCBmbG9hdCBmb250U2l6ZUZhY3Rv
cnNbdG90YWxLZXl3b3Jkc10gPSB7IDAuNjBmLCAwLjc1ZiwgMC44OWYsIDEuMGYsIDEuMmYsIDEu
NWYsIDIuMGYsIDMuMGYgfTsKIAotZmxvYXQgU3R5bGVSZXNvbHZlcjo6Zm9udFNpemVGb3JLZXl3
b3JkKERvY3VtZW50KiBkb2N1bWVudCwgaW50IGtleXdvcmQsIGJvb2wgc2hvdWxkVXNlRml4ZWRE
ZWZhdWx0U2l6ZSkKK2Zsb2F0IGZvbnRTaXplRm9yS2V5d29yZCh1bnNpZ25lZCBrZXl3b3JkSUQs
IGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSwgY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
KQogewogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5zZXR0aW5ncygpOwogICAg
IGlmICghc2V0dGluZ3MpCkBAIC0zNDE0LDEzICsxNTIsMTMgQEAgZmxvYXQgU3R5bGVSZXNvbHZl
cjo6Zm9udFNpemVGb3JLZXl3b3JkKAogICAgIGlmIChtZWRpdW1TaXplID49IGZvbnRTaXplVGFi
bGVNaW4gJiYgbWVkaXVtU2l6ZSA8PSBmb250U2l6ZVRhYmxlTWF4KSB7CiAgICAgICAgIC8vIExv
b2sgdXAgdGhlIGVudHJ5IGluIHRoZSB0YWJsZS4KICAgICAgICAgaW50IHJvdyA9IG1lZGl1bVNp
emUgLSBmb250U2l6ZVRhYmxlTWluOwotICAgICAgICBpbnQgY29sID0gKGtleXdvcmQgLSBDU1NW
YWx1ZVh4U21hbGwpOworICAgICAgICBpbnQgY29sID0gKGtleXdvcmRJRCAtIENTU1ZhbHVlWHhT
bWFsbCk7CiAgICAgICAgIHJldHVybiBxdWlya3NNb2RlID8gcXVpcmtzRm9udFNpemVUYWJsZVty
b3ddW2NvbF0gOiBzdHJpY3RGb250U2l6ZVRhYmxlW3Jvd11bY29sXTsKICAgICB9CiAKICAgICAv
LyBWYWx1ZSBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgdGFibGUuIEFwcGx5IHRoZSBzY2Fs
ZSBmYWN0b3IgaW5zdGVhZC4KICAgICBmbG9hdCBtaW5Mb2dpY2FsU2l6ZSA9IG1heChzZXR0aW5n
cy0+bWluaW11bUxvZ2ljYWxGb250U2l6ZSgpLCAxKTsKLSAgICByZXR1cm4gbWF4KGZvbnRTaXpl
RmFjdG9yc1trZXl3b3JkIC0gQ1NTVmFsdWVYeFNtYWxsXSptZWRpdW1TaXplLCBtaW5Mb2dpY2Fs
U2l6ZSk7CisgICAgcmV0dXJuIG1heChmb250U2l6ZUZhY3RvcnNba2V5d29yZElEIC0gQ1NTVmFs
dWVYeFNtYWxsXSAqIG1lZGl1bVNpemUsIG1pbkxvZ2ljYWxTaXplKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KQEAgLTM0MzQsNyArMTcyLDcgQEAgc3RhdGljIGludCBmaW5kTmVhcmVzdExl
Z2FjeUZvbnRTaXplKGludAogICAgIHJldHVybiB0b3RhbEtleXdvcmRzIC0gMTsKIH0KIAotaW50
IFN0eWxlUmVzb2x2ZXI6OmxlZ2FjeUZvbnRTaXplKERvY3VtZW50KiBkb2N1bWVudCwgaW50IHBp
eGVsRm9udFNpemUsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSkKK2ludCBsZWdhY3lG
b250U2l6ZUZvclBpeGVsU2l6ZShpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRVc2VGaXhl
ZERlZmF1bHRTaXplLCBjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgU2V0dGluZ3Mq
IHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7CiAgICAgaWYgKCFzZXR0aW5ncykKQEAg
LTM0NTAsODM3ICsxODgsNSBAQCBpbnQgU3R5bGVSZXNvbHZlcjo6bGVnYWN5Rm9udFNpemUoRG9j
dW1lCiAgICAgcmV0dXJuIGZpbmROZWFyZXN0TGVnYWN5Rm9udFNpemU8ZmxvYXQ+KHBpeGVsRm9u
dFNpemUsIGZvbnRTaXplRmFjdG9ycywgbWVkaXVtU2l6ZSk7CiB9CiAKLXN0YXRpYyBDb2xvciBj
b2xvckZvckNTU1ZhbHVlKENTU1ZhbHVlSUQgY3NzVmFsdWVJZCkKLXsKLSAgICBzdHJ1Y3QgQ29s
b3JWYWx1ZSB7Ci0gICAgICAgIENTU1ZhbHVlSUQgY3NzVmFsdWVJZDsKLSAgICAgICAgUkdCQTMy
IGNvbG9yOwotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgQ29sb3JWYWx1ZSBjb2xvclZhbHVl
c1tdID0gewotICAgICAgICB7IENTU1ZhbHVlQXF1YSwgMHhGRjAwRkZGRiB9LAotICAgICAgICB7
IENTU1ZhbHVlQmxhY2ssIDB4RkYwMDAwMDAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZUJsdWUsIDB4
RkYwMDAwRkYgfSwKLSAgICAgICAgeyBDU1NWYWx1ZUZ1Y2hzaWEsIDB4RkZGRjAwRkYgfSwKLSAg
ICAgICAgeyBDU1NWYWx1ZUdyYXksIDB4RkY4MDgwODAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZUdy
ZWVuLCAweEZGMDA4MDAwICB9LAotICAgICAgICB7IENTU1ZhbHVlR3JleSwgMHhGRjgwODA4MCB9
LAotICAgICAgICB7IENTU1ZhbHVlTGltZSwgMHhGRjAwRkYwMCB9LAotICAgICAgICB7IENTU1Zh
bHVlTWFyb29uLCAweEZGODAwMDAwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVOYXZ5LCAweEZGMDAw
MDgwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVPbGl2ZSwgMHhGRjgwODAwMCAgfSwKLSAgICAgICAg
eyBDU1NWYWx1ZU9yYW5nZSwgMHhGRkZGQTUwMCB9LAotICAgICAgICB7IENTU1ZhbHVlUHVycGxl
LCAweEZGODAwMDgwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVSZWQsIDB4RkZGRjAwMDAgfSwKLSAg
ICAgICAgeyBDU1NWYWx1ZVNpbHZlciwgMHhGRkMwQzBDMCB9LAotICAgICAgICB7IENTU1ZhbHVl
VGVhbCwgMHhGRjAwODA4MCAgfSwKLSAgICAgICAgeyBDU1NWYWx1ZVRyYW5zcGFyZW50LCAweDAw
MDAwMDAwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVXaGl0ZSwgMHhGRkZGRkZGRiB9LAotICAgICAg
ICB7IENTU1ZhbHVlWWVsbG93LCAweEZGRkZGRjAwIH0sCi0gICAgICAgIHsgQ1NTVmFsdWVJbnZh
bGlkLCBDU1NWYWx1ZUludmFsaWQgfQotICAgIH07Ci0KLSAgICBmb3IgKGNvbnN0IENvbG9yVmFs
dWUqIGNvbCA9IGNvbG9yVmFsdWVzOyBjb2wtPmNzc1ZhbHVlSWQ7ICsrY29sKSB7Ci0gICAgICAg
IGlmIChjb2wtPmNzc1ZhbHVlSWQgPT0gY3NzVmFsdWVJZCkKLSAgICAgICAgICAgIHJldHVybiBj
b2wtPmNvbG9yOwotICAgIH0KLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgp
LT5zeXN0ZW1Db2xvcihjc3NWYWx1ZUlkKTsKLX0KLQotYm9vbCBTdHlsZVJlc29sdmVyOjpjb2xv
ckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21FbGVtZW50KENTU1ByaW1pdGl2ZVZhbHVl
KiB2YWx1ZSkKLXsKLSAgICBpbnQgaWRlbnQgPSB2YWx1ZS0+Z2V0VmFsdWVJRCgpOwotICAgIHN3
aXRjaCAoaWRlbnQpIHsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0VGV4dDoKLSAgICBjYXNlIENT
U1ZhbHVlV2Via2l0TGluazoKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0QWN0aXZlbGluazoKLSAg
ICBjYXNlIENTU1ZhbHVlQ3VycmVudGNvbG9yOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1Db2xvciBTdHlsZVJl
c29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUs
IGJvb2wgZm9yVmlzaXRlZExpbmspIGNvbnN0Ci17Ci0gICAgaWYgKHZhbHVlLT5pc1JHQkNvbG9y
KCkpCi0gICAgICAgIHJldHVybiBDb2xvcih2YWx1ZS0+Z2V0UkdCQTMyVmFsdWUoKSk7Ci0KLSAg
ICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIENTU1ZhbHVlSUQgaWRlbnQgPSB2
YWx1ZS0+Z2V0VmFsdWVJRCgpOwotICAgIHN3aXRjaCAoaWRlbnQpIHsKLSAgICBjYXNlIDA6Ci0g
ICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRUZXh0OgotICAg
ICAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnQoKS0+dGV4dENvbG9yKCk7Ci0gICAgY2FzZSBDU1NW
YWx1ZVdlYmtpdExpbms6Ci0gICAgICAgIHJldHVybiAoc3RhdGUuZWxlbWVudCgpLT5pc0xpbmso
KSAmJiBmb3JWaXNpdGVkTGluaykgPyBzdGF0ZS5kb2N1bWVudCgpLT52aXNpdGVkTGlua0NvbG9y
KCkgOiBzdGF0ZS5kb2N1bWVudCgpLT5saW5rQ29sb3IoKTsKLSAgICBjYXNlIENTU1ZhbHVlV2Vi
a2l0QWN0aXZlbGluazoKLSAgICAgICAgcmV0dXJuIHN0YXRlLmRvY3VtZW50KCktPmFjdGl2ZUxp
bmtDb2xvcigpOwotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvcjoKLSAgICAg
ICAgcmV0dXJuIFJlbmRlclRoZW1lOjpmb2N1c1JpbmdDb2xvcigpOwotICAgIGNhc2UgQ1NTVmFs
dWVDdXJyZW50Y29sb3I6Ci0gICAgICAgIHJldHVybiBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBjb2xvckZvckNTU1ZhbHVlKGlkZW50KTsKLSAg
ICB9Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1
ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAqIGV4cHIsIGJvb2wgcmVzdWx0KQotewotICAg
IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5hcHBlbmQoYWRvcHRQdHIobmV3
IE1lZGlhUXVlcnlSZXN1bHQoKmV4cHIsIHJlc3VsdCkpKTsKLX0KLQotYm9vbCBTdHlsZVJlc29s
dmVyOjphZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdAotewotICAgIHVuc2lnbmVkIHMg
PSBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzOyBpKyspIHsKLSAgICAgICAgaWYgKG1fbWVkaXVtLT5ldmFs
KCZtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHNbaV0tPm1fZXhwcmVzc2lvbikg
IT0gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLT5tX3Jlc3VsdCkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi1zdGF0aWMgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25U
eXBlIGZpbHRlck9wZXJhdGlvbkZvclR5cGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkZpbHRlck9w
ZXJhdGlvblR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFdlYktp
dENTU0ZpbHRlclZhbHVlOjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJldHVy
biBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRTsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZh
bHVlOjpHcmF5c2NhbGVGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVy
YXRpb246OkdSQVlTQ0FMRTsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTZXBpYUZp
bHRlck9wZXJhdGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE7Ci0g
ICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVyYXRpb246Ci0g
ICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOwotICAgIGNhc2UgV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6Okh1ZVJvdGF0ZUZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgcmV0dXJu
IEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZh
bHVlOjpJbnZlcnRGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRp
b246OklOVkVSVDsKLSAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpPcGFjaXR5RmlsdGVy
T3BlcmF0aW9uOgotICAgICAgICByZXR1cm4gRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOwotICAg
IGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246Ci0g
ICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M7Ci0gICAgY2FzZSBXZWJL
aXRDU1NGaWx0ZXJWYWx1ZTo6Q29udHJhc3RGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJldHVy
biBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOwotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFs
dWU6OkJsdXJGaWx0ZXJPcGVyYXRpb246Ci0gICAgICAgIHJldHVybiBGaWx0ZXJPcGVyYXRpb246
OkJMVVI7Ci0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6RHJvcFNoYWRvd0ZpbHRlck9w
ZXJhdGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c7Ci0j
aWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkN1
c3RvbUZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6Q1VT
VE9NOwotI2VuZGlmCi0gICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6VW5rbm93bkZpbHRl
ck9wZXJhdGlvbjoKLSAgICAgICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6Tk9ORTsKLSAgICB9
Ci0gICAgcmV0dXJuIEZpbHRlck9wZXJhdGlvbjo6Tk9ORTsKLX0KLQotI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykgJiYgRU5BQkxFKFNWRykKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdT
VkdEb2N1bWVudHMoKQotewotICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7Ci0KLSAgICAvLyBD
cmFzaCByZXBvcnRzIGluZGljYXRlIHRoYXQgd2UndmUgc2VlbiBjYWxscyB0byB0aGlzIGZ1bmN0
aW9uIHdoZW4gb3VyCi0gICAgLy8gc3R5bGUgaXMgTlVMTC4gV2UgZG9uJ3Qga25vdyBleGFjdGx5
IHdoeSB0aGlzIGhhcHBlbnMuIE91ciBndWVzcyBpcwotICAgIC8vIHJlZW50ZXJpbmcgc3R5bGVG
b3JFbGVtZW50KCkuCi0gICAgQVNTRVJUKHN0YXRlLnN0eWxlKCkpOwotICAgIGlmICghc3RhdGUu
c3R5bGUoKSB8fCAhc3RhdGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkgfHwgc3RhdGUucGVuZGluZ1NW
R0RvY3VtZW50cygpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gc3RhdGUuZG9jdW1lbnQoKS0+Y2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKTsKLSAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4g
PiYgZmlsdGVyT3BlcmF0aW9ucyA9IHN0YXRlLnN0eWxlKCktPm11dGFibGVGaWx0ZXIoKS5vcGVy
YXRpb25zKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbHRlck9wZXJhdGlvbnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZmlsdGVyT3Bl
cmF0aW9uID0gZmlsdGVyT3BlcmF0aW9ucy5hdChpKTsKLSAgICAgICAgaWYgKGZpbHRlck9wZXJh
dGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7
Ci0gICAgICAgICAgICBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24qIHJlZmVyZW5jZUZpbHRlciA9
IHN0YXRpY19jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbi5n
ZXQoKSk7Ci0KLSAgICAgICAgICAgIFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqIHZhbHVlID0g
c3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLmdldChyZWZlcmVuY2VGaWx0ZXIpOwotICAgICAg
ICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IENhY2hlZFNWR0RvY3VtZW50KiBjYWNoZWREb2N1bWVudCA9IHZhbHVlLT5sb2FkKGNhY2hlZFJl
c291cmNlTG9hZGVyKTsKLSAgICAgICAgICAgIGlmICghY2FjaGVkRG9jdW1lbnQpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIFN0YXNoIHRoZSBDYWNoZWRTVkdE
b2N1bWVudCBvbiB0aGUgcmVmZXJlbmNlIGZpbHRlci4KLSAgICAgICAgICAgIHJlZmVyZW5jZUZp
bHRlci0+c2V0Q2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UoYWRvcHRQdHIobmV3IENhY2hlZFNW
R0RvY3VtZW50UmVmZXJlbmNlKGNhY2hlZERvY3VtZW50KSkpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHN0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5jbGVhcigpOwotfQotI2VuZGlmCi0KLSNp
ZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi1TdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6c3R5bGVT
aGFkZXIoQ1NTVmFsdWUqIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS0+aXNXZWJLaXRDU1NTaGFk
ZXJWYWx1ZSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9t
VmFsdWUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU2hhZGVyVmFsdWUqPih2YWx1ZSkpOwotICAgIHJl
dHVybiAwOwotfQotCi1TdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5n
U3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFsdWUqIHZhbHVlKQotewotICAg
IFN0eWxlU2hhZGVyKiBzaGFkZXIgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nU2hhZGVyKCk7Ci0g
ICAgaWYgKHNoYWRlciAmJiBzaGFkZXItPmlzUGVuZGluZ1NoYWRlcigpKQotICAgICAgICBtX3N0
YXRlLnNldEhhc1BlbmRpbmdTaGFkZXJzKHRydWUpOwotICAgIHJldHVybiBzaGFkZXI7Ci19Ci0K
LVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUHJvZ3JhbT4gU3R5bGVSZXNvbHZlcjo6bG9va3VwQ3Vz
dG9tRmlsdGVyUHJvZ3JhbShXZWJLaXRDU1NTaGFkZXJWYWx1ZSogdmVydGV4U2hhZGVyLCBXZWJL
aXRDU1NTaGFkZXJWYWx1ZSogZnJhZ21lbnRTaGFkZXIsIAotICAgIEN1c3RvbUZpbHRlclByb2dy
YW1UeXBlIHByb2dyYW1UeXBlLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3Mm
IG1peFNldHRpbmdzLCBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSkKLXsKLSAgICBDYWNo
ZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX3N0YXRlLmRvY3VtZW50
KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7Ci0gICAgS1VSTCB2ZXJ0ZXhTaGFkZXJVUkwgPSB2
ZXJ0ZXhTaGFkZXIgPyB2ZXJ0ZXhTaGFkZXItPmNvbXBsZXRlVVJMKGNhY2hlZFJlc291cmNlTG9h
ZGVyKSA6IEtVUkwoKTsKLSAgICBLVVJMIGZyYWdtZW50U2hhZGVyVVJMID0gZnJhZ21lbnRTaGFk
ZXIgPyBmcmFnbWVudFNoYWRlci0+Y29tcGxldGVVUkwoY2FjaGVkUmVzb3VyY2VMb2FkZXIpIDog
S1VSTCgpOwotICAgIFJlZlB0cjxTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW07Ci0g
ICAgaWYgKG1fY3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hlKQotICAgICAgICBwcm9ncmFtID0gbV9j
dXN0b21GaWx0ZXJQcm9ncmFtQ2FjaGUtPmxvb2t1cChDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyh2
ZXJ0ZXhTaGFkZXJVUkwsIGZyYWdtZW50U2hhZGVyVVJMLCBwcm9ncmFtVHlwZSwgbWl4U2V0dGlu
Z3MsIG1lc2hUeXBlKSk7Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIC8vIENyZWF0ZSBh
IG5ldyBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0gdGhhdCB3aWxsIGJlIHJlc29sdmVkIGR1cmlu
ZyB0aGUgbG9hZFBlbmRpbmdTaGFkZXJzIGFuZCBhZGRlZCB0byB0aGUgY2FjaGUuCi0gICAgICAg
IHByb2dyYW0gPSBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZSh2ZXJ0ZXhTaGFkZXJV
UkwsIHZlcnRleFNoYWRlciA/IHN0eWxlU2hhZGVyKHZlcnRleFNoYWRlcikgOiAwLCAKLSAgICAg
ICAgICAgIGZyYWdtZW50U2hhZGVyVVJMLCBmcmFnbWVudFNoYWRlciA/IHN0eWxlU2hhZGVyKGZy
YWdtZW50U2hhZGVyKSA6IDAsIHByb2dyYW1UeXBlLCBtaXhTZXR0aW5ncywgbWVzaFR5cGUpOwot
ICAgIH0KLSAgICByZXR1cm4gcHJvZ3JhbS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNv
bHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKCkKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0
IGhhdmUgdG8gY2hlY2sgdGhhdCBzdHlsZSBpcyBub24tbnVsbC4gVGhpcyBpcyBhIHNwZWN1bGF0
aXZlIGZpeCBmb3I6Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExNzY2NQotICAgIGlmICghbV9zdGF0ZS5oYXNQZW5kaW5nU2hhZGVycygpIHx8ICFtX3N0
YXRlLnN0eWxlKCkgfHwgIW1fc3RhdGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9
IG1fc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLQotICAgIFZlY3Rv
cjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBmaWx0ZXJPcGVyYXRpb25zID0gbV9zdGF0ZS5z
dHlsZSgpLT5tdXRhYmxlRmlsdGVyKCkub3BlcmF0aW9ucygpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBmaWx0ZXJPcGVyYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFJlZlB0
cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlck9wZXJhdGlvbiA9IGZpbHRlck9wZXJhdGlvbnMuYXQo
aSk7Ci0gICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSA9PSBG
aWx0ZXJPcGVyYXRpb246OkNVU1RPTSkgewotICAgICAgICAgICAgQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uKiBjdXN0b21GaWx0ZXIgPSBzdGF0aWNfY2FzdDxDdXN0b21GaWx0ZXJPcGVyYXRpb24qPihm
aWx0ZXJPcGVyYXRpb24uZ2V0KCkpOwotICAgICAgICAgICAgQVNTRVJUKGN1c3RvbUZpbHRlci0+
cHJvZ3JhbSgpKTsKLSAgICAgICAgICAgIFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbSogcHJvZ3Jh
bSA9IHN0YXRpY19jYXN0PFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbSo+KGN1c3RvbUZpbHRlci0+
cHJvZ3JhbSgpKTsKLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgU3R5bGVQZW5kaW5nU2hh
ZGVycyBjb3VsZCBiZSBhbHJlYWR5IHJlc29sdmVkIHRvIFN0eWxlQ2FjaGVkU2hhZGVycy4gVGhh
dCdzIGJlY2F1c2UgdGhlIHJ1bGUgd2FzIG1hdGNoZWQgYmVmb3JlLgotICAgICAgICAgICAgLy8g
SG93ZXZlciwgdGhlIFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbSB0aGF0IHdhcyBpbml0aWFsbHkg
Y3JlYXRlZCBjb3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSBpbiB0aGUgbWVh
bndoaWxlLAotICAgICAgICAgICAgLy8gbWVhbmluZyB0aGF0IHdlIGdldCBhIG5ldyBTdHlsZUN1
c3RvbUZpbHRlclByb2dyYW0gaGVyZSB0aGF0IGlzIG5vdCB5ZXQgaW4gdGhlIGNhY2hlLCBidXQg
YWxyZWFkeSBoYXMgbG9hZGVkIFN0eWxlU2hhZGVycy4KLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bS0+aGFzUGVuZGluZ1NoYWRlcnMoKSAmJiBwcm9ncmFtLT5pbkNhY2hlKCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIW1fY3VzdG9tRmlsdGVyUHJvZ3JhbUNh
Y2hlKQotICAgICAgICAgICAgICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hlID0gYWRvcHRQ
dHIobmV3IFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hlKCkpOwotICAgICAgICAgICAgUmVm
UHRyPFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbT4gc3R5bGVQcm9ncmFtID0gbV9jdXN0b21GaWx0
ZXJQcm9ncmFtQ2FjaGUtPmxvb2t1cChwcm9ncmFtKTsKLSAgICAgICAgICAgIGlmIChzdHlsZVBy
b2dyYW0uZ2V0KCkpCi0gICAgICAgICAgICAgICAgY3VzdG9tRmlsdGVyLT5zZXRQcm9ncmFtKHN0
eWxlUHJvZ3JhbS5yZWxlYXNlKCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHByb2dyYW0tPnZlcnRleFNoYWRlcigpICYmIHByb2dyYW0tPnZlcnRleFNoYWRlcigp
LT5pc1BlbmRpbmdTaGFkZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBXZWJLaXRDU1NTaGFk
ZXJWYWx1ZSogc2hhZGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdTaGFkZXIqPihw
cm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKSktPmNzc1NoYWRlclZhbHVlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHByb2dyYW0tPnNldFZlcnRleFNoYWRlcihzaGFkZXJWYWx1ZS0+Y2FjaGVkU2hhZGVy
KGNhY2hlZFJlc291cmNlTG9hZGVyKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmIChwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpICYmIHByb2dyYW0tPmZyYWdtZW50U2hh
ZGVyKCktPmlzUGVuZGluZ1NoYWRlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdlYktpdENT
U1NoYWRlclZhbHVlKiBzaGFkZXJWYWx1ZSA9IHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ1NoYWRl
cio+KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkpLT5jc3NTaGFkZXJWYWx1ZSgpOwotICAgICAg
ICAgICAgICAgICAgICBwcm9ncmFtLT5zZXRGcmFnbWVudFNoYWRlcihzaGFkZXJWYWx1ZS0+Y2Fj
aGVkU2hhZGVyKGNhY2hlZFJlc291cmNlTG9hZGVyKSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbUNhY2hlLT5hZGQocHJvZ3JhbSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9zdGF0ZS5zZXRIYXNQZW5kaW5n
U2hhZGVycyhmYWxzZSk7Ci19Ci0KLXN0YXRpYyBib29sIHNvcnRQYXJhbWV0ZXJzQnlOYW1lQ29t
cGFyYXRvcihjb25zdCBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiYgYSwgY29uc3QgUmVm
UHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGIpCi17Ci0gICAgcmV0dXJuIGNvZGVQb2ludENv
bXBhcmVMZXNzVGhhbihhLT5uYW1lKCksIGItPm5hbWUoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8Q3Vz
dG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlckFycmF5
UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMsIGJvb2wg
aXNBcnJheSkKLXsKLSAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXI+IGFycmF5
UGFyYW1ldGVyID0gQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXI6OmNyZWF0ZShuYW1lLCBpc0Fy
cmF5ID8gQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXI6OkFSUkFZIDogQ3VzdG9tRmlsdGVyQXJy
YXlQYXJhbWV0ZXI6Ok1BVFJJWCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMCwgbGVuZ3RoID0g
dmFsdWVzLT5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIENTU1ZhbHVlKiB2
YWx1ZSA9IHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKLSAgICAgICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2
ZVR5cGUoKSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICBhcnJheVBhcmFtZXRlci0+YWRkVmFsdWUocHJpbWl0aXZlVmFsdWUt
PmdldERvdWJsZVZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gYXJyYXlQYXJhbWV0ZXIucmVs
ZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNv
bHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJDb2xvclBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUs
IENTU1ZhbHVlTGlzdCogdmFsdWVzKQotewotICAgIEFTU0VSVCh2YWx1ZXMtPmxlbmd0aCgpKTsK
LSAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RQcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsK
LSAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyQ29sb3JQYXJhbWV0ZXI+IGNvbG9yUGFyYW1ldGVyID0g
Q3VzdG9tRmlsdGVyQ29sb3JQYXJhbWV0ZXI6OmNyZWF0ZShuYW1lKTsKLSAgICBjb2xvclBhcmFt
ZXRlci0+c2V0Q29sb3IoQ29sb3IoZmlyc3RQcmltaXRpdmVWYWx1ZS0+Z2V0UkdCQTMyVmFsdWUo
KSkpOwotICAgIHJldHVybiBjb2xvclBhcmFtZXRlci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRl
ck51bWJlclBhcmFtZXRlcihjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCogdmFsdWVz
KQotewotICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXI+IG51bWJlclBhcmFt
ZXRlciA9IEN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAg
Q1NTVmFsdWUqIHZhbHVlID0gdmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAg
ICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+cHJpbWl0aXZlVHlwZSgpICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIG51bWJlclBhcmFtZXRlci0+YWRkVmFsdWUocHJp
bWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gbnVtYmVy
UGFyYW1ldGVyLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0
ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKGNv
bnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMpCi17Ci0gICAgUmVmUHRyPEN1
c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcj4gdHJhbnNmb3JtUGFyYW1ldGVyID0gQ3VzdG9t
RmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyOjpjcmVhdGUobmFtZSk7Ci0gICAgVHJhbnNmb3JtT3Bl
cmF0aW9ucyBvcGVyYXRpb25zOwotICAgIHRyYW5zZm9ybXNGb3JWYWx1ZShtX3N0YXRlLnN0eWxl
KCksIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB2YWx1ZXMsIG9wZXJhdGlvbnMpOwotICAg
IHRyYW5zZm9ybVBhcmFtZXRlci0+c2V0T3BlcmF0aW9ucyhvcGVyYXRpb25zKTsKLSAgICByZXR1
cm4gdHJhbnNmb3JtUGFyYW1ldGVyLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxDdXN0b21G
aWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVy
KGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWUqIHBhcmFtZXRlclZhbHVlKQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgb3RoZXIgcGFyYW1ldGVycyB0eXBlcyBwYXJzaW5nLgotICAgIC8v
IHRleHR1cmVzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE0NDIK
LSAgICAvLyBtYXQyLCBtYXQzLCBtYXQ0OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzE0NDQKLSAgICAvLyBOdW1iZXIgcGFyYW1ldGVycyBhcmUgd3JhcHBlZCBpbnNp
ZGUgYSBDU1NWYWx1ZUxpc3QgYW5kIGFsbAotICAgIC8vIHRoZSBvdGhlciBmdW5jdGlvbnMgdmFs
dWVzIGluaGVyaXQgZnJvbSBDU1NWYWx1ZUxpc3QuCi0gICAgaWYgKCFwYXJhbWV0ZXJWYWx1ZS0+
aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDU1NWYWx1ZUxpc3QqIHZh
bHVlcyA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHBhcmFtZXRlclZhbHVlKTsKLSAgICBp
ZiAoIXZhbHVlcy0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKHBhcmFt
ZXRlclZhbHVlLT5pc1dlYktpdENTU0FycmF5RnVuY3Rpb25WYWx1ZSgpKQotICAgICAgICByZXR1
cm4gcGFyc2VDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcihuYW1lLCB2YWx1ZXMsIHRydWUpOwot
Ci0gICAgaWYgKHBhcmFtZXRlclZhbHVlLT5pc1dlYktpdENTU01hdEZ1bmN0aW9uVmFsdWUoKSkK
LSAgICAgICAgcmV0dXJuIHBhcnNlQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIobmFtZSwgdmFs
dWVzLCBmYWxzZSk7Ci0KLSAgICAvLyBJZiB0aGUgZmlyc3QgdmFsdWUgb2YgdGhlIGxpc3QgaXMg
YSB0cmFuc2Zvcm0gZnVuY3Rpb24sCi0gICAgLy8gdGhlbiB3ZSBjb3VsZCBzYWZlbHkgYXNzdW1l
IHRoYXQgYWxsIHRoZSByZW1haW5pbmcgaXRlbXMKLSAgICAvLyBhcmUgdHJhbnNmb3Jtcy4gcGFy
c2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIgd2lsbAotICAgIC8vIHJldHVybiAwIGlm
IHRoYXQgYXNzdW1wdGlvbiBpcyBpbmNvcnJlY3QuCi0gICAgaWYgKHZhbHVlcy0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygwKS0+aXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKQotICAgICAgICBy
ZXR1cm4gcGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIobmFtZSwgdmFsdWVzKTsK
LQotICAgIC8vIFdlIGNhbiBvbmx5IGhhdmUgYXJyYXlzIG9mIGNvbG9ycyBvciBudW1iZXJzLCBz
byB1c2UgdGhlIGZpcnN0IHZhbHVlIHRvIGNob29zZSBiZXR3ZWVuIHRob3NlIHR3by4KLSAgICAv
LyBXZSBuZWVkIHVwIHRvIDQgdmFsdWVzIChhbGwgYm9vbGVhbnMgb3IgYWxsIG51bWJlcnMpLgot
ICAgIGlmICghdmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApLT5pc1ByaW1pdGl2ZVZh
bHVlKCkgfHwgdmFsdWVzLT5sZW5ndGgoKSA+IDQpCi0gICAgICAgIHJldHVybiAwOwotICAgIAot
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwot
ICAgIGlmIChmaXJzdFByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpCi0gICAgICAgIHJldHVybiBwYXJzZUN1c3RvbUZpbHRlck51
bWJlclBhcmFtZXRlcihuYW1lLCB2YWx1ZXMpOwotCi0gICAgaWYgKGZpcnN0UHJpbWl0aXZlVmFs
dWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JHQkNPTE9SKQot
ICAgICAgICByZXR1cm4gcGFyc2VDdXN0b21GaWx0ZXJDb2xvclBhcmFtZXRlcihuYW1lLCB2YWx1
ZXMpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0
b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUsIEN1c3RvbUZp
bHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRlckxpc3QpCi17Ci0gICAgSGFzaFNldDxTdHJpbmc+
IGtub3duUGFyYW1ldGVyTmFtZXM7Ci0gICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgcGFyYW1ldGVy
SXRlcmF0b3IocGFyYW1ldGVyc1ZhbHVlKTsKLSAgICBmb3IgKDsgcGFyYW1ldGVySXRlcmF0b3Iu
aGFzTW9yZSgpOyBwYXJhbWV0ZXJJdGVyYXRvci5hZHZhbmNlKCkpIHsKLSAgICAgICAgaWYgKCFw
YXJhbWV0ZXJJdGVyYXRvci52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvciBpdGVyYXRvcihwYXJhbWV0
ZXJJdGVyYXRvci52YWx1ZSgpKTsKLSAgICAgICAgaWYgKCFpdGVyYXRvci5pc1ByaW1pdGl2ZVZh
bHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRl
cmF0b3IudmFsdWUoKSk7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBwcmltaXRpdmVWYWx1ZS0+
Z2V0U3RyaW5nVmFsdWUoKTsKLSAgICAgICAgLy8gRG8gbm90IGFsbG93IGR1cGxpY2F0ZSBwYXJh
bWV0ZXIgbmFtZXMuCi0gICAgICAgIGlmIChrbm93blBhcmFtZXRlck5hbWVzLmNvbnRhaW5zKG5h
bWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBrbm93blBhcmFtZXRlck5h
bWVzLmFkZChuYW1lKTsKLSAgICAgICAgCi0gICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmICghaXRlcmF0b3IuaGFzTW9yZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRl
cj4gcGFyYW1ldGVyID0gcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIobmFtZSwgaXRlcmF0b3Iu
dmFsdWUoKSk7Ci0gICAgICAgIGlmICghcGFyYW1ldGVyKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBwYXJhbWV0ZXJMaXN0LmFwcGVuZChwYXJhbWV0ZXIucmVsZWFzZSgpKTsK
LSAgICB9Ci0gICAgCi0gICAgLy8gTWFrZSBzdXJlIHdlIHNvcnQgdGhlIHBhcmFtZXRlcnMgYmVm
b3JlIHBhc3NpbmcgdGhlbSBkb3duIHRvIHRoZSBDdXN0b21GaWx0ZXJPcGVyYXRpb24uCi0gICAg
c3RkOjpzb3J0KHBhcmFtZXRlckxpc3QuYmVnaW4oKSwgcGFyYW1ldGVyTGlzdC5lbmQoKSwgc29y
dFBhcmFtZXRlcnNCeU5hbWVDb21wYXJhdG9yKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0
ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGhBdFJ1bGVSZWZlcmVuY2VTeW50YXgoV2ViS2l0Q1NT
RmlsdGVyVmFsdWUqIGZpbHRlclZhbHVlKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc3R5
bGUgcmVzb2x1dGlvbiBmb3IgdGhlIGN1c3RvbSBmaWx0ZXIgYXQtcnVsZSByZWZlcmVuY2Ugc3lu
dGF4LgotICAgIFVOVVNFRF9QQVJBTShmaWx0ZXJWYWx1ZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVD
dXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4KFdlYktpdENTU0ZpbHRlclZhbHVl
KiBmaWx0ZXJWYWx1ZSkKLXsKLSAgICBDU1NWYWx1ZSogc2hhZGVyc1ZhbHVlID0gZmlsdGVyVmFs
dWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oc2hhZGVyc1ZhbHVlLT5pc1ZhbHVlTGlzdCgpKTsKLSAgICBDU1NWYWx1ZUxp
c3QqIHNoYWRlcnNMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oc2hhZGVyc1ZhbHVl
KTsKLQotICAgIHVuc2lnbmVkIHNoYWRlcnNMaXN0TGVuZ3RoID0gc2hhZGVyc0xpc3QtPmxlbmd0
aCgpOwotICAgIEFTU0VSVChzaGFkZXJzTGlzdExlbmd0aCk7Ci0KLSAgICBXZWJLaXRDU1NTaGFk
ZXJWYWx1ZSogdmVydGV4U2hhZGVyID0gdG9XZWJLaXRDU1NTaGFkZXJWYWx1ZShzaGFkZXJzTGlz
dC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7Ci0gICAgV2ViS2l0Q1NTU2hhZGVyVmFsdWUq
IGZyYWdtZW50U2hhZGVyID0gMDsKLSAgICBDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZSBwcm9ncmFt
VHlwZSA9IFBST0dSQU1fVFlQRV9CTEVORFNfRUxFTUVOVF9URVhUVVJFOwotICAgIEN1c3RvbUZp
bHRlclByb2dyYW1NaXhTZXR0aW5ncyBtaXhTZXR0aW5nczsKLQotICAgIGlmIChzaGFkZXJzTGlz
dExlbmd0aCA+IDEpIHsKLSAgICAgICAgQ1NTVmFsdWUqIGZyYWdtZW50U2hhZGVyT3JNaXhGdW5j
dGlvbiA9IHNoYWRlcnNMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpOwotICAgICAgICBp
ZiAoZnJhZ21lbnRTaGFkZXJPck1peEZ1bmN0aW9uLT5pc1dlYktpdENTU01peEZ1bmN0aW9uVmFs
dWUoKSkgewotICAgICAgICAgICAgV2ViS2l0Q1NTTWl4RnVuY3Rpb25WYWx1ZSogbWl4RnVuY3Rp
b24gPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NNaXhGdW5jdGlvblZhbHVlKj4oZnJhZ21lbnRTaGFk
ZXJPck1peEZ1bmN0aW9uKTsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGl0ZXJh
dG9yKG1peEZ1bmN0aW9uKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1peEZ1bmN0aW9uLT5sZW5n
dGgoKSk7Ci0gICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9IHRvV2ViS2l0Q1NTU2hhZGVyVmFs
dWUoaXRlcmF0b3IudmFsdWUoKSk7Ci0gICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNlKCk7Ci0K
LSAgICAgICAgICAgIEFTU0VSVChtaXhGdW5jdGlvbi0+bGVuZ3RoKCkgPD0gMyk7Ci0gICAgICAg
ICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTW9yZSgpKSB7Ci0gICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPihpdGVyYXRvci52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoQ1NTUGFyc2VyOjpp
c0JsZW5kTW9kZShwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSkKLSAgICAgICAgICAgICAg
ICAgICAgbWl4U2V0dGluZ3MuYmxlbmRNb2RlID0gKnByaW1pdGl2ZVZhbHVlOwotICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKENTU1BhcnNlcjo6aXNDb21wb3NpdGVPcGVyYXRvcihwcmltaXRpdmVW
YWx1ZS0+Z2V0VmFsdWVJRCgpKSkKLSAgICAgICAgICAgICAgICAgICAgbWl4U2V0dGluZ3MuY29t
cG9zaXRlT3BlcmF0b3IgPSAqcHJpbWl0aXZlVmFsdWU7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAg
ICBpdGVyYXRvci5hZHZhbmNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBwcm9ncmFtVHlwZSA9IFBST0dSQU1fVFlQRV9OT19FTEVNRU5UX1RFWFRVUkU7
Ci0gICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9IHRvV2ViS2l0Q1NTU2hhZGVyVmFsdWUoZnJh
Z21lbnRTaGFkZXJPck1peEZ1bmN0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgh
dmVydGV4U2hhZGVyICYmICFmcmFnbWVudFNoYWRlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
Ci0gICAgdW5zaWduZWQgbWVzaFJvd3MgPSAxOwotICAgIHVuc2lnbmVkIG1lc2hDb2x1bW5zID0g
MTsKLSAgICBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSA9IE1lc2hUeXBlQXR0YWNoZWQ7
Ci0gICAgCi0gICAgQ1NTVmFsdWUqIHBhcmFtZXRlcnNWYWx1ZSA9IDA7Ci0gICAgCi0gICAgaWYg
KGZpbHRlclZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgQ1NTVmFsdWVMaXN0SXRlcmF0
b3IgaXRlcmF0b3IoZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAg
ICAgICAKLSAgICAgICAgLy8gVGhlIHNlY29uZCB2YWx1ZSBtaWdodCBiZSB0aGUgbWVzaCBib3gg
b3IgdGhlIGxpc3Qgb2YgcGFyYW1ldGVyczoKLSAgICAgICAgLy8gSWYgaXQgc3RhcnRzIHdpdGgg
YSBudW1iZXIgb3IgYW55IG9mIHRoZSBtZXNoLWJveCBpZGVudGlmaWVycyBpdCBpcyAKLSAgICAg
ICAgLy8gdGhlIG1lc2gtYm94IGxpc3QsIGlmIG5vdCBpdCBtZWFucyBpdCBpcyB0aGUgcGFyYW1l
dGVycyBsaXN0LgotCi0gICAgICAgIGlmIChpdGVyYXRvci5oYXNNb3JlKCkgJiYgaXRlcmF0b3Iu
aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZXJhdG9yLnZh
bHVlKCkpOwotICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gSWYgb25seSBvbmUgaW50ZWdlciB2YWx1ZSBpcyBzcGVjaWZpZWQs
IGl0IHdpbGwgc2V0IGJvdGgKLSAgICAgICAgICAgICAgICAvLyB0aGUgcm93cyBhbmQgdGhlIGNv
bHVtbnMuCi0gICAgICAgICAgICAgICAgbWVzaENvbHVtbnMgPSBtZXNoUm93cyA9IHByaW1pdGl2
ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2Uo
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUcnkgdG8gbWF0Y2ggYW5v
dGhlciBudW1iZXIgZm9yIHRoZSByb3dzLgotICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvci5o
YXNNb3JlKCkgJiYgaXRlcmF0b3IuaXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgbWVzaFJvd3MgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKGl0ZXJhdG9yLmhhc01vcmUoKSAmJiBpdGVyYXRvci5pc1ByaW1pdGl2ZVZhbHVl
KCkpIHsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlcmF0b3IudmFsdWUoKSk7Ci0gICAgICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZURldGFjaGVk
KSB7Ci0gICAgICAgICAgICAgICAgbWVzaFR5cGUgPSBNZXNoVHlwZURldGFjaGVkOwotICAgICAg
ICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKCFpdGVyYXRvci5pbmRleCgpKSB7Ci0gICAgICAgICAgICAv
LyBJZiBubyB2YWx1ZSB3YXMgY29uc3VtZWQgZnJvbSB0aGUgbWVzaCB2YWx1ZSwgdGhlbiBpdCBp
cyBqdXN0IGEgcGFyYW1ldGVyIGxpc3QsIG1lYW5pbmcgdGhhdCB3ZSBlbmQgdXAKLSAgICAgICAg
ICAgIC8vIGhhdmluZyBqdXN0IHR3byBDU1NMaXN0VmFsdWVzOiBsaXN0IG9mIHNoYWRlcnMgYW5k
IGxpc3Qgb2YgcGFyYW1ldGVycy4KLSAgICAgICAgICAgIEFTU0VSVChmaWx0ZXJWYWx1ZS0+bGVu
Z3RoKCkgPT0gMik7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBp
ZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID4gMiAmJiAhcGFyYW1ldGVyc1ZhbHVlKQotICAgICAg
ICBwYXJhbWV0ZXJzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygy
KTsKLSAgICAKLSAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0IHBhcmFtZXRlckxpc3Q7Ci0g
ICAgaWYgKHBhcmFtZXRlcnNWYWx1ZSAmJiAhcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0
KHBhcmFtZXRlcnNWYWx1ZSwgcGFyYW1ldGVyTGlzdCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgUmVmUHRyPEN1c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBsb29rdXBDdXN0b21GaWx0
ZXJQcm9ncmFtKHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIHByb2dyYW1UeXBlLCBtaXhT
ZXR0aW5ncywgbWVzaFR5cGUpOwotICAgIHJldHVybiBDdXN0b21GaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZShwcm9ncmFtLnJlbGVhc2UoKSwgcGFyYW1ldGVyTGlzdCwgbWVzaFJvd3MsIG1lc2hDb2x1
bW5zKTsKLX0KLQotUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2
ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmls
dGVyVmFsdWUpCi17Ci0gICAgQVNTRVJUKGZpbHRlclZhbHVlLT5sZW5ndGgoKSk7Ci0gICAgYm9v
bCBpc0F0UnVsZVJlZmVyZW5jZVN5bnRheCA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDApLT5pc1ByaW1pdGl2ZVZhbHVlKCk7Ci0gICAgcmV0dXJuIGlzQXRSdWxlUmVmZXJl
bmNlU3ludGF4ID8gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aEF0UnVsZVJlZmVyZW5j
ZVN5bnRheChmaWx0ZXJWYWx1ZSkgOiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5s
aW5lU3ludGF4KGZpbHRlclZhbHVlKTsKIH0KLQotI2VuZGlmCi0KLWJvb2wgU3R5bGVSZXNvbHZl
cjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVy
YXRpb25zKQotewotICAgIEFTU0VSVChvdXRPcGVyYXRpb25zLmlzRW1wdHkoKSk7Ci0gICAgCi0g
ICAgaWYgKCFpblZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKGlu
VmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGluVmFsdWUp
OwotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5v
bmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFpblZh
bHVlLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmbG9hdCB6
b29tRmFjdG9yID0gc3R5bGUgPyBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpIDogMTsKLSAgICBGaWx0
ZXJPcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBp
ID0gaW5WYWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7Ci0gICAgICAgIENTU1ZhbHVl
KiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7Ci0gICAgICAgIGlmICghY3VyclZhbHVlLT5pc1dlYktp
dENTU0ZpbHRlclZhbHVlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBXZWJL
aXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NGaWx0
ZXJWYWx1ZSo+KGkudmFsdWUoKSk7Ci0gICAgICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSBvcGVyYXRpb25UeXBlID0gZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShmaWx0ZXJWYWx1ZS0+
b3BlcmF0aW9uVHlwZSgpKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAgICAgaWYg
KG9wZXJhdGlvblR5cGUgPT0gRmlsdGVyT3BlcmF0aW9uOjpWQUxJREFURURfQ1VTVE9NKSB7Ci0g
ICAgICAgICAgICAvLyBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24gaXMgbm90IHN1cHBv
c2VkIHRvIGVuZCB1cCBpbiB0aGUgUmVuZGVyU3R5bGUuCi0gICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChvcGVyYXRpb25UeXBlID09IEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NKSB7Ci0gICAgICAgICAg
ICBSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBjcmVhdGVDdXN0b21G
aWx0ZXJPcGVyYXRpb24oZmlsdGVyVmFsdWUpOwotICAgICAgICAgICAgaWYgKCFvcGVyYXRpb24p
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQob3BlcmF0aW9uKTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKG9wZXJhdGlvblR5cGUg
PT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKLSNpZiBFTkFCTEUoU1ZHKQotICAgICAg
ICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSAhPSAxKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgQ1NTVmFsdWUqIGFyZ3VtZW50ID0gZmlsdGVyVmFsdWUtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7Ci0KLSAgICAgICAgICAgIGlmICghYXJndW1lbnQtPmlz
V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICBXZWJLaXRDU1NTVkdEb2N1bWVudFZhbHVlKiBzdmdEb2N1bWVudFZhbHVl
ID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSo+KGFyZ3VtZW50KTsKLSAg
ICAgICAgICAgIEtVUkwgdXJsID0gbV9zdGF0ZS5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdmdE
b2N1bWVudFZhbHVlLT51cmwoKSk7Ci0KLSAgICAgICAgICAgIFJlZlB0cjxSZWZlcmVuY2VGaWx0
ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpLCB1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCksIG9wZXJh
dGlvblR5cGUpOwotICAgICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNFeHRlcm5hbFVS
SVJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT51cmwoKSwgbV9zdGF0ZS5kb2N1bWVudCgpKSkg
ewotICAgICAgICAgICAgICAgIGlmICghc3ZnRG9jdW1lbnRWYWx1ZS0+bG9hZFJlcXVlc3RlZCgp
KQotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5zZXQo
b3BlcmF0aW9uLmdldCgpLCBzdmdEb2N1bWVudFZhbHVlKTsKLSAgICAgICAgICAgICAgICBlbHNl
IGlmIChzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKQotICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb24tPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFkb3B0UHRy
KG5ldyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRT
VkdEb2N1bWVudCgpKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKG9wZXJhdGlvbik7Ci0jZW5kaWYKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgcGFyYW1ldGVycyBh
cmUgcHJpbWl0aXZlIHZhbHVlcywgd2l0aCB0aGUKLSAgICAgICAgLy8gZXhjZXB0aW9uIG9mIGRy
b3Agc2hhZG93IHdoaWNoIGhhcyBhIFNoYWRvd1ZhbHVlIHBhcmFtZXRlci4KLSAgICAgICAgaWYg
KG9wZXJhdGlvblR5cGUgIT0gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVykgewotICAgICAg
ICAgICAgYm9vbCBoYXZlTm9uUHJpbWl0aXZlVmFsdWUgPSBmYWxzZTsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IDA7IGogPCBmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCk7ICsraikgewotICAg
ICAgICAgICAgICAgIGlmICghZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaikt
PmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBoYXZlTm9uUHJpbWl0
aXZlVmFsdWUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGF2ZU5vblByaW1pdGl2ZVZh
bHVlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIGZpcnN0VmFsdWUgPSBmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPyBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDApKSA6IDA7Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyVmFsdWUtPm9wZXJhdGlvblR5
cGUoKSkgewotICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpHcmF5c2NhbGVGaWx0
ZXJPcGVyYXRpb246Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNlcGlhRmls
dGVyT3BlcmF0aW9uOgotICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTYXR1cmF0
ZUZpbHRlck9wZXJhdGlvbjogewotICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IDE7Ci0gICAg
ICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID09IDEpIHsKLSAgICAgICAgICAgICAg
ICBhbW91bnQgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAg
IGlmIChmaXJzdFZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgYW1v
dW50IC89IDEwMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVy
YXRpb25zKCkuYXBwZW5kKEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShh
bW91bnQsIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Okh1ZVJvdGF0ZUZpbHRlck9wZXJhdGlv
bjogewotICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gMDsKLSAgICAgICAgICAgIGlmIChmaWx0
ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMSkKLSAgICAgICAgICAgICAgICBhbmdsZSA9IGZpcnN0VmFs
dWUtPmNvbXB1dGVEZWdyZWVzKCk7Ci0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9u
cygpLmFwcGVuZChCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW5nbGUs
IG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkludmVydEZpbHRlck9wZXJhdGlvbjoKLSAgICAg
ICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjoK
LSAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Q29udHJhc3RGaWx0ZXJPcGVyYXRp
b246Ci0gICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Ok9wYWNpdHlGaWx0ZXJPcGVy
YXRpb246IHsKLSAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSAoZmlsdGVyVmFsdWUtPm9wZXJh
dGlvblR5cGUoKSA9PSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJh
dGlvbikgPyAwIDogMTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0g
MSkgewotICAgICAgICAgICAgICAgIGFtb3VudCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVl
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPmlzUGVyY2VudGFnZSgpKQotICAg
ICAgICAgICAgICAgICAgICBhbW91bnQgLz0gMTAwOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRUcmFuc2Zl
ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGFtb3VudCwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6Qmx1ckZpbHRlck9wZXJhdGlvbjogewotICAgICAgICAgICAgTGVuZ3RoIHN0ZERldmlhdGlv
biA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0
aCgpID49IDEpCi0gICAgICAgICAgICAgICAgc3RkRGV2aWF0aW9uID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAg
ICAgICBpZiAoc3RkRGV2aWF0aW9uLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
Qmx1ckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKHN0ZERldmlhdGlvbiwgb3BlcmF0aW9uVHlwZSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJLaXRDU1NG
aWx0ZXJWYWx1ZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjogewotICAgICAgICAgICAgaWYg
KGZpbHRlclZhbHVlLT5sZW5ndGgoKSAhPSAxKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICAgICAgQ1NTVmFsdWUqIGNzc1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMCk7Ci0gICAgICAgICAgICBpZiAoIWNzc1ZhbHVlLT5pc1NoYWRv
d1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFNoYWRv
d1ZhbHVlKiBpdGVtID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUqPihjc3NWYWx1ZSk7Ci0gICAg
ICAgICAgICBJbnRQb2ludCBsb2NhdGlvbihpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5
bGUsIHJvb3RTdHlsZSwgem9vbUZhY3RvciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rv
cikpOwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpIDogMDsKLSAgICAg
ICAgICAgIENvbG9yIGNvbG9yOwotICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAg
ICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0
KCkpOwotCi0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoRHJvcFNo
YWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGxvY2F0aW9uLCBibHVyLCBjb2xvci5pc1ZhbGlk
KCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6VW5rbm93bkZpbHRlck9wZXJhdGlvbjoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBvdXRPcGVyYXRpb25zID0gb3BlcmF0aW9uczsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotI2VuZGlmCi0KLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6bG9h
ZFBlbmRpbmdJbWFnZShTdHlsZVBlbmRpbmdJbWFnZSogcGVuZGluZ0ltYWdlKQotewotICAgIENh
Y2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fc3RhdGUuZG9jdW1l
bnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLQotICAgIGlmIChwZW5kaW5nSW1hZ2UtPmNz
c0ltYWdlVmFsdWUoKSkgewotICAgICAgICBDU1NJbWFnZVZhbHVlKiBpbWFnZVZhbHVlID0gcGVu
ZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBpbWFnZVZhbHVlLT5j
YWNoZWRJbWFnZShjYWNoZWRSZXNvdXJjZUxvYWRlcik7Ci0gICAgfQotCi0gICAgaWYgKHBlbmRp
bmdJbWFnZS0+Y3NzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7Ci0gICAgICAgIENTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUqIGltYWdlR2VuZXJhdG9yVmFsdWUgPSBwZW5kaW5nSW1hZ2UtPmNzc0ltYWdl
R2VuZXJhdG9yVmFsdWUoKTsKLSAgICAgICAgaW1hZ2VHZW5lcmF0b3JWYWx1ZS0+bG9hZFN1Ymlt
YWdlcyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7Ci0gICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRl
ZEltYWdlOjpjcmVhdGUoaW1hZ2VHZW5lcmF0b3JWYWx1ZSk7Ci0gICAgfQotCi0gICAgaWYgKHBl
bmRpbmdJbWFnZS0+Y3NzQ3Vyc29ySW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgIENTU0N1cnNvcklt
YWdlVmFsdWUqIGN1cnNvckltYWdlVmFsdWUgPSBwZW5kaW5nSW1hZ2UtPmNzc0N1cnNvckltYWdl
VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIGN1cnNvckltYWdlVmFsdWUtPmNhY2hlZEltYWdlKGNh
Y2hlZFJlc291cmNlTG9hZGVyKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkK
LSAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFnZVNldFZhbHVlKCkpIHsKLSAgICAgICAgQ1NT
SW1hZ2VTZXRWYWx1ZSogaW1hZ2VTZXRWYWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VTZXRW
YWx1ZSgpOwotICAgICAgICByZXR1cm4gaW1hZ2VTZXRWYWx1ZS0+Y2FjaGVkSW1hZ2VTZXQoY2Fj
aGVkUmVzb3VyY2VMb2FkZXIpOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGlu
Z1NoYXBlSW1hZ2UoU2hhcGVWYWx1ZSogc2hhcGVWYWx1ZSkKLXsKLSAgICBpZiAoIXNoYXBlVmFs
dWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0eWxlSW1hZ2UqIGltYWdlID0gc2hhcGVWYWx1
ZS0+aW1hZ2UoKTsKLSAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgU3R5bGVQZW5kaW5nSW1hZ2UqIHBlbmRpbmdJbWFnZSA9
IHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpOwotICAgIENTU0ltYWdlVmFs
dWUqIGNzc0ltYWdlVmFsdWUgPSAgcGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZhbHVlKCk7Ci0gICAg
Q2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9zdGF0ZS5kb2N1
bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwotCi0gICAgUmVzb3VyY2VMb2FkZXJPcHRp
b25zIG9wdGlvbnMgPSBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGVmYXVsdENhY2hlZFJlc291cmNl
T3B0aW9ucygpOwotICAgIG9wdGlvbnMucmVxdWVzdE9yaWdpblBvbGljeSA9IFJlc3RyaWN0VG9T
YW1lT3JpZ2luOwotCi0gICAgc2hhcGVWYWx1ZS0+c2V0SW1hZ2UoY3NzSW1hZ2VWYWx1ZS0+Y2Fj
aGVkSW1hZ2UoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIG9wdGlvbnMpKTsKLX0KLSNlbmRpZgotCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKLXsKLSAgICBpZiAobV9zdGF0
ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgZW5kID0g
bV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuZW5kKCkua2V5cygpOwotICAgIGZvciAo
UGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gbV9zdGF0
ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBDU1NQcm9wZXJ0eUlEIGN1cnJlbnRQcm9wZXJ0eSA9ICppdDsKLQotICAg
ICAgICBzd2l0Y2ggKGN1cnJlbnRQcm9wZXJ0eSkgewotICAgICAgICBjYXNlIENTU1Byb3BlcnR5
QmFja2dyb3VuZEltYWdlOiB7Ci0gICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3Vu
ZExheWVyID0gbV9zdGF0ZS5zdHlsZSgpLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tn
cm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZExheWVyLT5pbWFnZSgpICYmIGJhY2tncm91
bmRMYXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAg
YmFja2dyb3VuZExheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0
eWxlUGVuZGluZ0ltYWdlKj4oYmFja2dyb3VuZExheWVyLT5pbWFnZSgpKSkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUNvbnRlbnQ6IHsKLSAgICAgICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRh
ID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KG1fc3RhdGUuc3R5bGUoKS0+Y29udGVudERhdGEo
KSk7IGNvbnRlbnREYXRhOyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoY29udGVudERhdGEtPmlzSW1hZ2UoKSkgewotICAgICAgICAgICAg
ICAgICAgICBTdHlsZUltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0PEltYWdlQ29udGVudERhdGEq
Pihjb250ZW50RGF0YSktPmltYWdlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+
aXNQZW5kaW5nSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFN0eWxl
SW1hZ2U+IGxvYWRlZEltYWdlID0gbG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBl
bmRpbmdJbWFnZSo+KGltYWdlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGVk
SW1hZ2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW1hZ2VDb250
ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+c2V0SW1hZ2UobG9hZGVkSW1hZ2UucmVsZWFzZSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlD
dXJzb3I6IHsKLSAgICAgICAgICAgIGlmIChDdXJzb3JMaXN0KiBjdXJzb3JMaXN0ID0gbV9zdGF0
ZS5zdHlsZSgpLT5jdXJzb3JzKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGN1cnNvckxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEN1
cnNvckRhdGEmIGN1cnJlbnRDdXJzb3IgPSBjdXJzb3JMaXN0LT5hdChpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKFN0eWxlSW1hZ2UqIGltYWdlID0gY3VycmVudEN1cnNvci5pbWFnZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEN1cnNvci5zZXRJbWFnZShsb2FkUGVu
ZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0
eWxlSW1hZ2U6IHsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUlt
YWdlKCkgJiYgbV9zdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpLT5pc1BlbmRpbmdJbWFn
ZSgpKQotICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0TGlzdFN0eWxlSW1hZ2Uo
bG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUu
c3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZTogewotICAgICAg
ICAgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBtX3N0YXRl
LnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAg
ICAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRCb3JkZXJJbWFnZVNvdXJjZShsb2FkUGVuZGlu
Z0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5i
b3JkZXJJbWFnZVNvdXJjZSgpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKLSAgICAgICAgICAgIGlm
IChTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24gPSBtX3N0YXRlLnN0eWxlKCktPmJveFJlZmxl
Y3QoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBtYXNrSW1hZ2Ug
PSByZWZsZWN0aW9uLT5tYXNrKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hc2tJbWFnZS5pbWFn
ZSgpICYmIG1hc2tJbWFnZS5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1h
Z2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrSW1hZ2UuaW1hZ2UoKSkpOwot
ICAgICAgICAgICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRNYXNrKE5pbmVQaWVjZUltYWdlKGxv
YWRlZEltYWdlLnJlbGVhc2UoKSwgbWFza0ltYWdlLmltYWdlU2xpY2VzKCksIG1hc2tJbWFnZS5m
aWxsKCksIG1hc2tJbWFnZS5ib3JkZXJTbGljZXMoKSwgbWFza0ltYWdlLm91dHNldCgpLCBtYXNr
SW1hZ2UuaG9yaXpvbnRhbFJ1bGUoKSwgbWFza0ltYWdlLnZlcnRpY2FsUnVsZSgpKSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZTogewot
ICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+bWFza0JveEltYWdlU291cmNlKCkgJiYg
bV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkK
LSAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNldE1hc2tCb3hJbWFnZVNvdXJjZShs
b2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5z
dHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2U6IHsKLSAgICAg
ICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIgPSBtX3N0YXRlLnN0eWxlKCktPmFjY2Vz
c01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkg
ewotICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVyLT5p
bWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgICAgICBtYXNrTGF5ZXIt
PnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2Uq
PihtYXNrTGF5ZXItPmltYWdlKCkpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0U2hhcGVJbnNpZGU6Ci0gICAgICAgICAgICBsb2FkUGVuZGluZ1NoYXBlSW1h
Z2UobV9zdGF0ZS5zdHlsZSgpLT5zaGFwZUluc2lkZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRzaWRlOgotICAgICAgICAgICAg
bG9hZFBlbmRpbmdTaGFwZUltYWdlKG1fc3RhdGUuc3R5bGUoKS0+c2hhcGVPdXRzaWRlKCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9zdGF0ZS5w
ZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuY2xlYXIoKTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLXN0
YXRpYyBib29sIGluTG9hZFBlbmRpbmdSZXNvdXJjZXMgPSBmYWxzZTsKLSNlbmRpZgotCi12b2lk
IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nUmVzb3VyY2VzKCkKLXsKLSAgICAvLyBXZSd2ZSBz
ZWVuIGNyYXNoZXMgaW4gYWxsIHRocmVlIG9mIHRoZSBmdW5jdGlvbnMgYmVsb3cuIFNvbWUgb2Yg
dGhlbQotICAgIC8vIGluZGljYXRlIHRoYXQgc3R5bGUoKSBpcyBOVUxMLiBUaGlzIE5VTEwgY2hl
Y2sgd2lsbCBjdXQgZG93biBvbiB0b3RhbAotICAgIC8vIGNyYXNoZXMsIHdoaWxlIHRoZSBBU1NF
UlQgd2lsbCBoZWxwIHVzIGZpbmQgdGhlIGNhdXNlIGluIGRlYnVnIGJ1aWxkcy4KLSAgICBBU1NF
UlQoc3R5bGUoKSk7Ci0gICAgaWYgKCFzdHlsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZm5k
ZWYgTkRFQlVHCi0gICAgLy8gUmUtZW50ZXJpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIHByb2JhYmx5
IG1lYW4gdHJvdWJsZS4gQ2F0Y2ggaXQgaW4gZGVidWcgYnVpbGRzLgotICAgIEFTU0VSVCghaW5M
b2FkUGVuZGluZ1Jlc291cmNlcyk7Ci0gICAgaW5Mb2FkUGVuZGluZ1Jlc291cmNlcyA9IHRydWU7
Ci0jZW5kaWYKLQotICAgIC8vIFN0YXJ0IGxvYWRpbmcgaW1hZ2VzIHJlZmVyZW5jZWQgYnkgdGhp
cyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ0ltYWdlcygpOwotCi0jaWYgRU5BQkxFKENTU19TSEFE
RVJTKQotICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIHNoYWRlcnMgcmVmZXJlbmNlZCBieSB0aGlz
IHN0eWxlLgotICAgIGxvYWRQZW5kaW5nU2hhZGVycygpOwotI2VuZGlmCi0gICAgCi0jaWYgRU5B
QkxFKENTU19GSUxURVJTKSAmJiBFTkFCTEUoU1ZHKQotICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhl
IFNWRyBEb2N1bWVudHMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5n
U1ZHRG9jdW1lbnRzKCk7Ci0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSAgICBpbkxvYWRQZW5k
aW5nUmVzb3VyY2VzID0gZmFsc2U7Ci0jZW5kaWYKLX0KLQotaW5saW5lIFN0eWxlUmVzb2x2ZXI6
Ok1hdGNoZWRQcm9wZXJ0aWVzOjpNYXRjaGVkUHJvcGVydGllcygpCi0gICAgOiBwb3NzaWJseVBh
ZGRlZE1lbWJlcigwKQotewogfQotCi1pbmxpbmUgU3R5bGVSZXNvbHZlcjo6TWF0Y2hlZFByb3Bl
cnRpZXM6On5NYXRjaGVkUHJvcGVydGllcygpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlRm9udFNpemVGdW5jdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUZvbnRTaXplRnVuY3Rpb25z
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUZvbnRTaXplRnVu
Y3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorICAgIC8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0eWxlRm9udFNpemVG
dW5jdGlvbnNfaAorI2RlZmluZSBTdHlsZUZvbnRTaXplRnVuY3Rpb25zX2gKKworI2luY2x1ZGUg
IkZvbnRPcmllbnRhdGlvbi5oIgorI2luY2x1ZGUgIk5vbkNKS0dseXBoT3JpZW50YXRpb24uaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIERvY3VtZW50OworY2xhc3MgUmVuZGVyU3R5bGU7CitjbGFzcyBTZXR0aW5nczsKKworbmFt
ZXNwYWNlIFN0eWxlIHsKKworZmxvYXQgY29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXpl
KGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGJvb2wgdXNlU1ZHWm9v
bVJ1bGVzLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IERvY3VtZW50Kik7CitmbG9hdCBjb21w
dXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemVGb3JTVkdJbmxpbmVUZXh0KGZsb2F0IHNwZWNp
ZmllZFNpemUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHpvb21GYWN0b3IsIGNvbnN0IERv
Y3VtZW50Kik7CisKKy8vIEdpdmVuIGEgQ1NTIGtleXdvcmQgaWQgaW4gdGhlIHJhbmdlIChDU1NW
YWx1ZVh4U21hbGwgdG8gQ1NTVmFsdWVXZWJraXRYeHhMYXJnZSksIHRoaXMgZnVuY3Rpb24gd2ls
bCByZXR1cm4KKy8vIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBzY2FsZWQgcmVsYXRpdmUgdG8gdGhl
IHVzZXIncyBkZWZhdWx0IChtZWRpdW0pLgorZmxvYXQgZm9udFNpemVGb3JLZXl3b3JkKHVuc2ln
bmVkIGtleXdvcmRJRCwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplLCBjb25zdCBEb2N1
bWVudCopOworCisvLyBHaXZlbiBhIGZvbnQgc2l6ZSBpbiBwaXhlbCwgdGhpcyBmdW5jdGlvbiB3
aWxsIHJldHVybiBsZWdhY3kgZm9udCBzaXplIGJldHdlZW4gMSBhbmQgNy4KK2ludCBsZWdhY3lG
b250U2l6ZUZvclBpeGVsU2l6ZShpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRVc2VGaXhl
ZERlZmF1bHRTaXplLCBjb25zdCBEb2N1bWVudCopOworCit9Cit9CisKKyNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAy
MDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0QG5pY2tzaGFua3Mu
Y29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
LCAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoYykg
MjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZUZvckRvY3VtZW50
LmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAi
SFRNTElGcmFtZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJMb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCIK
KyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0
eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFN0eWxlIHsKKworUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gcmVzb2x2ZUZvckRvY3VtZW50KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sK
KyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKworICAgIC8vIEhUTUw1IHN0
YXRlcyB0aGF0IHNlYW1sZXNzIGlmcmFtZXMgc2hvdWxkIHJlcGxhY2UgZGVmYXVsdCBDU1MgdmFs
dWVzCisgICAgLy8gd2l0aCB2YWx1ZXMgaW5oZXJpdGVkIGZyb20gdGhlIGNvbnRhaW5pbmcgaWZy
YW1lIGVsZW1lbnQuIEhvd2V2ZXIsCisgICAgLy8gc29tZSB2YWx1ZXMgKHN1Y2ggYXMgdGhlIGNh
c2Ugb2YgZGVzaWduTW9kZSA9ICJvbiIpIHN0aWxsIG5lZWQgdG8KKyAgICAvLyBiZSBzZXQgYnkg
dGhpcyAiZG9jdW1lbnQgc3R5bGUiLgorICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gZG9jdW1lbnRT
dHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICBib29sIHNlYW1sZXNzV2l0aFBhcmVu
dCA9IGRvY3VtZW50LT5zaG91bGREaXNwbGF5U2VhbWxlc3NseVdpdGhQYXJlbnQoKTsKKyAgICBp
ZiAoc2VhbWxlc3NXaXRoUGFyZW50KSB7CisgICAgICAgIFJlbmRlclN0eWxlKiBpZnJhbWVTdHls
ZSA9IGRvY3VtZW50LT5zZWFtbGVzc1BhcmVudElGcmFtZSgpLT5yZW5kZXJTdHlsZSgpOworICAg
ICAgICBpZiAoaWZyYW1lU3R5bGUpCisgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5pbmhlcml0
RnJvbShpZnJhbWVTdHlsZSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFy
IHdoaWNoIHZhbHVlcyBiZWxvdyB3ZSB3YW50IHRvIG92ZXJyaWRlIGluIHRoZSBzZWFtbGVzcyBj
YXNlIQorICAgIGRvY3VtZW50U3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOworICAgIGlmICghc2Vh
bWxlc3NXaXRoUGFyZW50KSB7CisgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFJUTE9yZGVyaW5n
KGRvY3VtZW50LT52aXN1YWxseU9yZGVyZWQoKSA/IFZpc3VhbE9yZGVyIDogTG9naWNhbE9yZGVy
KTsKKyAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0Wm9vbShmcmFtZSAmJiAhZG9jdW1lbnQtPnBy
aW50aW5nKCkgPyBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKSA6IDEpOworICAgICAgICBkb2N1bWVu
dFN0eWxlLT5zZXRQYWdlU2NhbGVUcmFuc2Zvcm0oZnJhbWUgPyBmcmFtZS0+ZnJhbWVTY2FsZUZh
Y3RvcigpIDogMSk7CisgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldExvY2FsZShkb2N1bWVudC0+
Y29udGVudExhbmd1YWdlKCkpOworICAgIH0KKyAgICAvLyBUaGlzIG92ZXJyaWRlcyBhbnkgLXdl
YmtpdC11c2VyLW1vZGlmeSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IGlmcmFtZS4KKyAgICBk
b2N1bWVudFN0eWxlLT5zZXRVc2VyTW9kaWZ5KGRvY3VtZW50LT5pbkRlc2lnbk1vZGUoKSA/IFJF
QURfV1JJVEUgOiBSRUFEX09OTFkpOworCisgICAgRWxlbWVudCogZG9jRWxlbWVudCA9IGRvY3Vt
ZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBSZW5kZXJPYmplY3QqIGRvY0VsZW1lbnRSZW5k
ZXJlciA9IGRvY0VsZW1lbnQgPyBkb2NFbGVtZW50LT5yZW5kZXJlcigpIDogMDsKKyAgICBpZiAo
ZG9jRWxlbWVudFJlbmRlcmVyKSB7CisgICAgICAgIC8vIFVzZSB0aGUgZGlyZWN0aW9uIGFuZCB3
cml0aW5nLW1vZGUgb2YgdGhlIGJvZHkgdG8gc2V0IHRoZQorICAgICAgICAvLyB2aWV3cG9ydCdz
IGRpcmVjdGlvbiBhbmQgd3JpdGluZy1tb2RlIHVubGVzcyB0aGUgcHJvcGVydHkgaXMgc2V0IG9u
IHRoZSBkb2N1bWVudCBlbGVtZW50LgorICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBib2R5LCB0
aGVuIHVzZSB0aGUgZG9jdW1lbnQgZWxlbWVudC4KKyAgICAgICAgUmVuZGVyT2JqZWN0KiBib2R5
UmVuZGVyZXIgPSBkb2N1bWVudC0+Ym9keSgpID8gZG9jdW1lbnQtPmJvZHkoKS0+cmVuZGVyZXIo
KSA6IDA7CisgICAgICAgIGlmIChib2R5UmVuZGVyZXIgJiYgIWRvY3VtZW50LT53cml0aW5nTW9k
ZVNldE9uRG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRX
cml0aW5nTW9kZShib2R5UmVuZGVyZXItPnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRXcml0aW5nTW9kZShkb2NFbGVt
ZW50UmVuZGVyZXItPnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOworICAgICAgICBpZiAoYm9keVJl
bmRlcmVyICYmICFkb2N1bWVudC0+ZGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQoKSkKKyAg
ICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldERpcmVjdGlvbihib2R5UmVuZGVyZXItPnN0eWxl
KCktPmRpcmVjdGlvbigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZG9jdW1lbnRTdHls
ZS0+c2V0RGlyZWN0aW9uKGRvY0VsZW1lbnRSZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkp
OworICAgIH0KKworICAgIGlmIChmcmFtZSkgeworICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSBmcmFtZS0+dmlldygpKSB7CisgICAgICAgICAgICBjb25zdCBQYWdpbmF0aW9uJiBw
YWdpbmF0aW9uID0gZnJhbWVWaWV3LT5wYWdpbmF0aW9uKCk7CisgICAgICAgICAgICBpZiAocGFn
aW5hdGlvbi5tb2RlICE9IFBhZ2luYXRpb246OlVucGFnaW5hdGVkKSB7CisgICAgICAgICAgICAg
ICAgZG9jdW1lbnRTdHlsZS0+c2V0Q29sdW1uU3R5bGVzRnJvbVBhZ2luYXRpb25Nb2RlKHBhZ2lu
YXRpb24ubW9kZSk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0Q29sdW1uR2Fw
KHBhZ2luYXRpb24uZ2FwKTsKKyAgICAgICAgICAgICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9
IGRvY3VtZW50LT5yZW5kZXJWaWV3KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXct
Pmhhc0NvbHVtbnMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpZXctPnVwZGF0ZUNvbHVt
bkluZm9Gcm9tU3R5bGUoZG9jdW1lbnRTdHlsZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gU2VhbWxlc3MgaWZyYW1l
cyB3YW50IHRvIGluaGVyaXQgdGhlaXIgZm9udCBmcm9tIHRoZWlyIHBhcmVudCBpZnJhbWUsIHNv
IGVhcmx5IHJldHVybiBiZWZvcmUgc2V0dGluZyB0aGUgZm9udC4KKyAgICBpZiAoc2VhbWxlc3NX
aXRoUGFyZW50KQorICAgICAgICByZXR1cm4gZG9jdW1lbnRTdHlsZS5yZWxlYXNlKCk7CisKKyAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihkb2N1bWVudFN0eWxl
LT5sb2NhbGUoKSkpOworICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0
dGluZ3MoKSkgeworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9j
dW1lbnQtPnByaW50aW5nKCkgfHwgIXNldHRpbmdzLT5zY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5h
YmxlZCgpKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGlu
Z3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0
YW5kYXJkRm9udCA9IHNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoZm9udERlc2NyaXB0aW9u
LnNjcmlwdCgpKTsKKyAgICAgICAgaWYgKCFzdGFuZGFyZEZvbnQuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246
OlN0YW5kYXJkRmFtaWx5KTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1p
bHkoc3RhbmRhcmRGb250KTsKKyAgICAgICAgfQorICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
S2V5d29yZFNpemUoQ1NTVmFsdWVNZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKKyAgICAg
ICAgaW50IHNpemUgPSBmb250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVNZWRpdW0sIGZhbHNlLCBk
b2N1bWVudCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUp
OworICAgICAgICBib29sIHVzZVNWR1pvb21SdWxlcyA9IGRvY3VtZW50LT5pc1NWR0RvY3VtZW50
KCk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoY29tcHV0ZWRGb250
U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNpemUsIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6
ZSgpLCB1c2VTVkdab29tUnVsZXMsIGRvY3VtZW50U3R5bGUuZ2V0KCksIGRvY3VtZW50KSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChkb2N1
bWVudC0+cHJpbnRpbmcoKSk7CisKKyAgICBGb250T3JpZW50YXRpb24gZm9udE9yaWVudGF0aW9u
OworICAgIE5vbkNKS0dseXBoT3JpZW50YXRpb24gZ2x5cGhPcmllbnRhdGlvbjsKKyAgICBkb2N1
bWVudFN0eWxlLT5nZXRGb250QW5kR2x5cGhPcmllbnRhdGlvbihmb250T3JpZW50YXRpb24sIGds
eXBoT3JpZW50YXRpb24pOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPcmllbnRhdGlvbihmb250
T3JpZW50YXRpb24pOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXROb25DSktHbHlwaE9yaWVudGF0
aW9uKGdseXBoT3JpZW50YXRpb24pOworCisgICAgZG9jdW1lbnRTdHlsZS0+c2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisKKyAgICBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxl
Y3RvciA9IGRvY3VtZW50LT5zdHlsZVJlc29sdmVySWZFeGlzdHMoKSA/IGRvY3VtZW50LT5zdHls
ZVJlc29sdmVySWZFeGlzdHMoKS0+Zm9udFNlbGVjdG9yKCkgOiAwOworICAgIGRvY3VtZW50U3R5
bGUtPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKKworICAgIHJldHVybiBkb2N1bWVudFN0
eWxlLnJlbGVhc2UoKTsKK30KKworfQorfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVSZXNvbHZlRm9yRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudF9oCisjZGVmaW5lIFN0eWxlUmVzb2x2ZUZv
ckRvY3VtZW50X2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQ1NTRm9udFNlbGVjdG9yOworY2xhc3MgRG9jdW1lbnQ7CitjbGFz
cyBSZW5kZXJTdHlsZTsKKworbmFtZXNwYWNlIFN0eWxlIHsKKworUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gcmVzb2x2ZUZvckRvY3VtZW50KGNvbnN0IERvY3VtZW50Kik7CisKK30KK30KKworI2Vu
ZGlmCg==
</data>
<flag name="review"
          id="230356"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208442</attachid>
            <date>2013-08-09 10:51:32 -0700</date>
            <delta_ts>2013-08-09 11:41:45 -0700</delta_ts>
            <desc>lets try without move</desc>
            <filename>move-styleresolver-statics-3.patch</filename>
            <type>text/plain</type>
            <size>60911</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Mzg5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDEzLTA4LTA5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHN0YXRpYyBTdHlsZVJl
c29sdmVyIGZ1bmN0aW9ucyB0byBTdHlsZSBuYW1lc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTYyOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gTW92ZSBzdGF0aWMgZm9udCBzaXplIGNvbXB1
dGF0aW9uIGZ1bmN0aW9ucyB0byBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgvLmNwcAorICAgICAg
ICAtIE1vdmUgU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JEb2N1bWVudCB0byBTdHlsZTo6cmVzb2x2
ZUZvckRvY3VtZW50CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRGYW1pbHk6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250RmFtaWx5OjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbml0aWFsVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseVZhbHVlKToK
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0Zv
ck9yaWVudGF0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JH
ZW5lcmljRmFtaWx5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Omlu
aXRpYWxpemVGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0
Rm9udFNpemUpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6
CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
bGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUpOgorICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6cHJvY2Vzcyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN0eWxlOjpnZXRGb250QW5kR2x5cGhPcmllbnRhdGlvbik6CisgICAgICAgIAor
ICAgICAgICAgICAgTW92ZWQgZnJvbSBTdHlsZVJlc29sdmVyLmNwcCBzbyBpdCBjYW4gYmUgdXNl
ZCBieSBTdHlsZTo6cmVzb2x2ZUZvckRvY3VtZW50KCkuCisgICAgICAgICAgICBUaGlzIGRlcGVu
ZHMgb24gUmVuZGVyU3R5bGUgb25seSBzbyBpdCBpcyBhIG5hdHVyYWwgbWVtYmVyIGZ1bmN0aW9u
LgorCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR0lubGluZVRleHQ6OmNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUpOgorICAg
ICAgICAqIHN0eWxlL1N0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemVGb3JTVkdJbmxpbmVUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OmxlZ2FjeUZvbnRTaXplRm9yUGl4ZWxTaXplKToKKyAgICAgICAg
KiBzdHlsZS9TdHlsZUZvbnRTaXplRnVuY3Rpb25zLmg6IEFkZGVkLgorICAgICAgICAqIHN0eWxl
L1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6cmVzb2x2ZUZvckRvY3VtZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVG
b3JEb2N1bWVudC5oOiBBZGRlZC4KKwogMjAxMy0wOC0wOCAgQWxsYW4gU2FuZGZlbGQgSmVuc2Vu
ICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dLMl0gQ29tcG9zaXRl
ZCBhbmQgdHJhbnNmb3JtZWQgbGlua3MgYXNzZXJ0cyBpbiB0YXAgaGlnaGxpZ2h0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNTM4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU1NDQsNiArNTU0NCwxMCBAQAogCQlFNEMx
Nzg5QjBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMxNzg5NjBFRTY5MDM4MDA4MjRENjkg
LyogQ1NTU2VsZWN0b3JMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTRDMjc5NTgwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzI3OTU2
MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAgKi87IH07CiAJCUU0QzI3OTU5MENG
OTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1l
ZGlhLmggKi87IH07CisJCUU0RDU4RUI0MTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVG
b3JEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNEQ1OEVCMjE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQu
Y3BwICovOyB9OworCQlFNEQ1OEVCNTE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9y
RG9jdW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0RDU4RUIzMTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oICov
OyB9OworCQlFNEQ1OEVCODE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9u
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ1
OEVCNjE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAgKi87IH07
CisJCUU0RDU4RUI5MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ1OEVCNzE3
QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oICovOyB9OwogCQlFNEQ2
ODc3NzBFRDdBRTNEMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDY4Nzc2MEVEN0FFM0QwMDZF
QTk3OCAvKiBQdXJnZWFibGVCdWZmZXJNYWMuY3BwICovOyB9OwogCQlFNEQ2ODc3OTBFRDdBRTRG
MDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ2ODc3ODBFRDdBRTRGMDA2RUE5NzggLyogUHVyZ2VhYmxl
QnVmZmVyLmggKi87IH07CiAJCUU0REVBQTE3MTdBOTNEQzMwMDBFMDQzMCAvKiBTdHlsZVJlc29s
dmVUcmVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0REVBQTE1MTdBOTNEQzMwMDBFMDQzMCAvKiBTdHlsZVJlc29sdmVUcmVlLmNwcCAqLzsgfTsK
QEAgLTEyMzYyLDYgKzEyMzY2LDEwIEBACiAJCUU0QzE3ODk2MEVFNjkwMzgwMDgyNEQ2OSAvKiBD
U1NTZWxlY3Rvckxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTU2Vs
ZWN0b3JMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QzI3OTU2MENGOTc0
MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJNZWRpYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0QzI3OTU3MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJNZWRpYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFNEQ1OEVCMjE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZXNvbHZl
Rm9yRG9jdW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEQ1OEVCMzE3
QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRENThFQjYxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9u
dFNpemVGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUU0RDU4RUI3MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlRm9udFNpemVGdW5jdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRENjg3NzYwRUQ3QUUzRDAwNkVBOTc4IC8q
IFB1cmdlYWJsZUJ1ZmZlck1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQdXJnZWFibGVCdWZmZXJNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNEQ2ODc3ODBFRDdBRTRGMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1cmdlYWJsZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNERFQUExNTE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVSZXNvbHZl
VHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVJlc29s
dmVUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NjA5LDYgKzE5NjE3
LDEwIEBACiAJCUU0NzYzRDRBMTdCMjcwNDkwMEQzNTIwNiAvKiBzdHlsZSAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRTRENThFQjYxN0I0RUQ4OTAwQ0JE
Q0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwICovLAorCQkJCUU0RDU4RUI3MTdCNEVE
ODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmggKi8sCisJCQkJRTRENThFQjIx
N0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcCAqLywKKwkJCQlF
NEQ1OEVCMzE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCAqLywK
IAkJCQlFNERFQUExNTE3QTkzREMzMDAwRTA0MzAgLyogU3R5bGVSZXNvbHZlVHJlZS5jcHAgKi8s
CiAJCQkJRTRERUFBMTYxN0E5M0RDMzAwMEUwNDMwIC8qIFN0eWxlUmVzb2x2ZVRyZWUuaCAqLywK
IAkJCSk7CkBAIC0yMjI0Miw2ICsyMjI1NCw3IEBACiAJCQkJNjVERjMyM0EwOUQxREU2NTAwMEJF
MzI1IC8qIEpTQ2FudmFzR3JhZGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1REYzMjNDMDlE
MURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc1BhdHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
REYzMjNDMDlEMURFNjUwMDFCRTMyNSAvKiBKU0NhbnZhc1Byb3h5LmggaW4gSGVhZGVycyAqLywK
KwkJCQlFNEQ1OEVCNTE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUVEMTQzMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RUVEMTQ1MTA1MTk2OTQw
MDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNGOUI3QTEwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKQEAgLTIzODM3LDYgKzIzODUwLDcgQEAKIAkJCQlCQzhCRjE1MTEwNTgxM0JGMDBBNDBB
MDcgLyogVXNlclN0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEJGMTVBMTA1ODE0
MTgwMEE0MEEwNyAvKiBVc2VyU3R5bGVTaGVldFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0RGMzE3QzExRjhENjgzMDAzQzVCRjggLyogVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3IuaCBp
biBIZWFkZXJzICovLAorCQkJCUU0RDU4RUI5MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRT
aXplRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkxRkFGQkYxOTE1QTVGQTc0MDAwODNB
MjAgLyogVVRJVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTNCQkYwODExNjJEQTEx
MDBCOTQwOUEgLyogVVVJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTBEMzI4NTgxNjNCMzEzRjAw
MTYxMTFFIC8qIFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNTA0Myw2ICsyNTA1Nyw3IEBACiAJCQkJNDlFQ0VCNkYxNDk5NzkwRDAwQ0REM0E0IC8q
IEZpbHRlck9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkYwNEQwQTE1NEYw
OTAwMEE0MjM0IC8qIEZpeGVkVGFibGVMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3
NTM1NjgwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJRTRENThFQjgxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjJFMjdDOUYwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9p
bnQzRC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjc1MzU1OTBCMDUzODE0MDAyQ0U2NEYgLyog
RmxvYXRQb2ludENHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTc4MEIwNTM4MTQwMDJD
RTY0RiAvKiBGbG9hdFBvaW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yNjk3Nyw2ICsyNjk5
Miw3IEBACiAJCQkJQTdENkIzNEEwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRTQzNDY1NDBGNTQ2QTgyMDBCMEYxQkEgLyogV29y
a2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBCOTA1NkY4MEYyNjg1RjMwMDk1RkY2
QSAvKiBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0RDU4
RUI0MTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5N0FBQkQyQzE0RkEwOUQ1MDA3NDU3QUUgLyogV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMjMwOTlFNjQ5
MjAwNTZFNTgxIC8qIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBODMzQzdDQzBBMkNGMDc0MDBENTc2NjQgLyogWExpbmtOYW1lcy5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWls
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxl
QnVpbGRlci5jcHAJKHJldmlzaW9uIDE1Mzg5MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXBy
ZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAog
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgogI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAK
QEAgLTY3OCw3ICs2NzksNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICAvLyBXZSBuZWVk
IHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkgY2hh
bmdlIGZyb20gbW9ub3NwYWNlIHRvIG5vbi1tb25vc3BhY2UuCiAgICAgICAgIGlmIChmb250RGVz
Y3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0
U2l6ZSgpKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2Ny
aXB0aW9uLCBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+
ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXpl
KCkgLSAxLCBmYWxzZSkpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUo
Zm9udERlc2NyaXB0aW9uLCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlWHhTbWFs
bCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpIC0gMSwgZmFsc2UsIHN0eWxlUmVzb2x2
ZXItPmRvY3VtZW50KCkpKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1p
bHkoaW5pdGlhbERlc2MuZ2VuZXJpY0ZhbWlseSgpKTsKICAgICAgICAgaWYgKCFpbml0aWFsRGVz
Yy5maXJzdEZhbWlseSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRGYW1pbGllcyhpbml0aWFsRGVzYy5mYW1pbGllcygpKTsKQEAgLTc1Miw3ICs3NTMsNyBAQCBw
dWJsaWM6CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5hZG9wdEZhbWlsaWVzKGZhbWlsaWVzKTsK
IAogICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2Ny
aXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0
U2l6ZSkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlw
dGlvbiwgc3R5bGVSZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2ZXItPmRv
Y3VtZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgp
IC0gMSwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSk7CisgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIFN0eWxlOjpmb250U2l6ZUZv
cktleXdvcmQoQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkg
LSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUsIHN0eWxlUmVzb2x2ZXItPmRvY3Vt
ZW50KCkpKTsKIAogICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKICAgICB9CkBAIC03OTYsNyArNzk3LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpCiAgICAgewogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2Ny
aXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAg
ICAgIGZsb2F0IHNpemUgPSBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVS
ZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VG
aXhlZERlZmF1bHRTaXplKCkpOworICAgICAgICBmbG9hdCBzaXplID0gU3R5bGU6OmZvbnRTaXpl
Rm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVs
dFNpemUoKSwgc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSk7CiAKICAgICAgICAgaWYgKHNpemUg
PCAwKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtODM2LDcgKzgzNyw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYTGFyZ2U6CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
WHhMYXJnZToKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJnZToKLSAgICAg
ICAgICAgICAgICBzaXplID0gc3R5bGVSZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxl
UmVzb2x2ZXItPmRvY3VtZW50KCksIGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZh
dWx0U2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5
d29yZChpZGVudCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgc3R5bGVS
ZXNvbHZlci0+ZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dEtleXdvcmRTaXplKGlkZW50IC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2VyOgpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTUzODkzKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1
LDcgQEAKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU2hhZG93VmFsdWUuaCIK
ICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1
bmN0aW9ucy5oIgogI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIKICNpbmNsdWRlICJT
dHlsZVBlbmRpbmdJbWFnZS5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKQEAgLTc4
MiwxMzcgKzc4Myw2IEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWQK
ICAgICByZXR1cm4gc2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogfQogCi1zdGF0aWMgdm9p
ZCBnZXRGb250QW5kR2x5cGhPcmllbnRhdGlvbihjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIEZv
bnRPcmllbnRhdGlvbiYgZm9udE9yaWVudGF0aW9uLCBOb25DSktHbHlwaE9yaWVudGF0aW9uJiBn
bHlwaE9yaWVudGF0aW9uKQotewotICAgIGlmIChzdHlsZS0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkgewotICAgICAgICBmb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsOwotICAgICAgICBn
bHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHN0eWxlLT50ZXh0T3JpZW50YXRp
b24oKSkgewotICAgIGNhc2UgVGV4dE9yaWVudGF0aW9uVmVydGljYWxSaWdodDoKLSAgICAgICAg
Zm9udE9yaWVudGF0aW9uID0gVmVydGljYWw7Ci0gICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBO
b25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdodDsKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgVGV4dE9yaWVudGF0aW9uVXByaWdodDoKLSAgICAgICAgZm9udE9yaWVudGF0aW9uID0g
VmVydGljYWw7Ci0gICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0
aW9uVXByaWdodDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVGV4dE9yaWVudGF0aW9uU2lk
ZXdheXM6Ci0gICAgICAgIGlmIChzdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBMZWZ0VG9SaWdodFdy
aXRpbmdNb2RlKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbWFwIHRvIHNp
ZGV3YXlzLWxlZnQsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgotICAgICAgICAgICAgZm9u
dE9yaWVudGF0aW9uID0gVmVydGljYWw7Ci0gICAgICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0g
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgZm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbDsKLSAgICAg
ICAgZ2x5cGhPcmllbnRhdGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUZXh0T3JpZW50YXRpb25TaWRld2F5c1JpZ2h0
OgotICAgICAgICBmb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsOwotICAgICAgICBnbHlwaE9y
aWVudGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7Ci0gICAgICAg
IHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgZm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbDsKLSAgICAgICAgZ2x5cGhPcmllbnRh
dGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OwotICAgICAgICByZXR1
cm47Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpz
dHlsZUZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCwgQ1NTRm9udFNlbGVjdG9yKiBmb250
U2VsZWN0b3IpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0KLSAg
ICAvLyBIVE1MNSBzdGF0ZXMgdGhhdCBzZWFtbGVzcyBpZnJhbWVzIHNob3VsZCByZXBsYWNlIGRl
ZmF1bHQgQ1NTIHZhbHVlcwotICAgIC8vIHdpdGggdmFsdWVzIGluaGVyaXRlZCBmcm9tIHRoZSBj
b250YWluaW5nIGlmcmFtZSBlbGVtZW50LiBIb3dldmVyLAotICAgIC8vIHNvbWUgdmFsdWVzIChz
dWNoIGFzIHRoZSBjYXNlIG9mIGRlc2lnbk1vZGUgPSAib24iKSBzdGlsbCBuZWVkIHRvCi0gICAg
Ly8gYmUgc2V0IGJ5IHRoaXMgImRvY3VtZW50IHN0eWxlIi4KLSAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IGRvY3VtZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgYm9vbCBzZWFt
bGVzc1dpdGhQYXJlbnQgPSBkb2N1bWVudC0+c2hvdWxkRGlzcGxheVNlYW1sZXNzbHlXaXRoUGFy
ZW50KCk7Ci0gICAgaWYgKHNlYW1sZXNzV2l0aFBhcmVudCkgewotICAgICAgICBSZW5kZXJTdHls
ZSogaWZyYW1lU3R5bGUgPSBkb2N1bWVudC0+c2VhbWxlc3NQYXJlbnRJRnJhbWUoKS0+cmVuZGVy
U3R5bGUoKTsKLSAgICAgICAgaWYgKGlmcmFtZVN0eWxlKQotICAgICAgICAgICAgZG9jdW1lbnRT
dHlsZS0+aW5oZXJpdEZyb20oaWZyYW1lU3R5bGUpOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBJ
dCdzIG5vdCBjbGVhciB3aGljaCB2YWx1ZXMgYmVsb3cgd2Ugd2FudCB0byBvdmVycmlkZSBpbiB0
aGUgc2VhbWxlc3MgY2FzZSEKLSAgICBkb2N1bWVudFN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsK
LSAgICBpZiAoIXNlYW1sZXNzV2l0aFBhcmVudCkgewotICAgICAgICBkb2N1bWVudFN0eWxlLT5z
ZXRSVExPcmRlcmluZyhkb2N1bWVudC0+dmlzdWFsbHlPcmRlcmVkKCkgPyBWaXN1YWxPcmRlciA6
IExvZ2ljYWxPcmRlcik7Ci0gICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFpvb20oZnJhbWUgJiYg
IWRvY3VtZW50LT5wcmludGluZygpID8gZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCkgOiAxKTsKLSAg
ICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0UGFnZVNjYWxlVHJhbnNmb3JtKGZyYW1lID8gZnJhbWUt
PmZyYW1lU2NhbGVGYWN0b3IoKSA6IDEpOwotICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRMb2Nh
bGUoZG9jdW1lbnQtPmNvbnRlbnRMYW5ndWFnZSgpKTsKLSAgICB9Ci0gICAgLy8gVGhpcyBvdmVy
cmlkZXMgYW55IC13ZWJraXQtdXNlci1tb2RpZnkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBp
ZnJhbWUuCi0gICAgZG9jdW1lbnRTdHlsZS0+c2V0VXNlck1vZGlmeShkb2N1bWVudC0+aW5EZXNp
Z25Nb2RlKCkgPyBSRUFEX1dSSVRFIDogUkVBRF9PTkxZKTsKLQotICAgIEVsZW1lbnQqIGRvY0Vs
ZW1lbnQgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBk
b2NFbGVtZW50UmVuZGVyZXIgPSBkb2NFbGVtZW50ID8gZG9jRWxlbWVudC0+cmVuZGVyZXIoKSA6
IDA7Ci0gICAgaWYgKGRvY0VsZW1lbnRSZW5kZXJlcikgewotICAgICAgICAvLyBVc2UgdGhlIGRp
cmVjdGlvbiBhbmQgd3JpdGluZy1tb2RlIG9mIHRoZSBib2R5IHRvIHNldCB0aGUKLSAgICAgICAg
Ly8gdmlld3BvcnQncyBkaXJlY3Rpb24gYW5kIHdyaXRpbmctbW9kZSB1bmxlc3MgdGhlIHByb3Bl
cnR5IGlzIHNldCBvbiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLSAgICAgICAgLy8gSWYgdGhlcmUg
aXMgbm8gYm9keSwgdGhlbiB1c2UgdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0gICAgICAgIFJlbmRl
ck9iamVjdCogYm9keVJlbmRlcmVyID0gZG9jdW1lbnQtPmJvZHkoKSA/IGRvY3VtZW50LT5ib2R5
KCktPnJlbmRlcmVyKCkgOiAwOwotICAgICAgICBpZiAoYm9keVJlbmRlcmVyICYmICFkb2N1bWVu
dC0+d3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAgICAgZG9jdW1l
bnRTdHlsZS0+c2V0V3JpdGluZ01vZGUoYm9keVJlbmRlcmVyLT5zdHlsZSgpLT53cml0aW5nTW9k
ZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0V3JpdGlu
Z01vZGUoZG9jRWxlbWVudFJlbmRlcmVyLT5zdHlsZSgpLT53cml0aW5nTW9kZSgpKTsKLSAgICAg
ICAgaWYgKGJvZHlSZW5kZXJlciAmJiAhZG9jdW1lbnQtPmRpcmVjdGlvblNldE9uRG9jdW1lbnRF
bGVtZW50KCkpCi0gICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXREaXJlY3Rpb24oYm9keVJl
bmRlcmVyLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGRvY3VtZW50U3R5bGUtPnNldERpcmVjdGlvbihkb2NFbGVtZW50UmVuZGVyZXItPnN0eWxlKCkt
PmRpcmVjdGlvbigpKTsKLSAgICB9Ci0KLSAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgaWYgKEZy
YW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKSkgewotICAgICAgICAgICAgY29uc3Qg
UGFnaW5hdGlvbiYgcGFnaW5hdGlvbiA9IGZyYW1lVmlldy0+cGFnaW5hdGlvbigpOwotICAgICAg
ICAgICAgaWYgKHBhZ2luYXRpb24ubW9kZSAhPSBQYWdpbmF0aW9uOjpVbnBhZ2luYXRlZCkgewot
ICAgICAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldENvbHVtblN0eWxlc0Zyb21QYWdpbmF0
aW9uTW9kZShwYWdpbmF0aW9uLm1vZGUpOwotICAgICAgICAgICAgICAgIGRvY3VtZW50U3R5bGUt
PnNldENvbHVtbkdhcChwYWdpbmF0aW9uLmdhcCk7Ci0gICAgICAgICAgICAgICAgaWYgKFJlbmRl
clZpZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh2aWV3LT5oYXNDb2x1bW5zKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB2aWV3
LT51cGRhdGVDb2x1bW5JbmZvRnJvbVN0eWxlKGRvY3VtZW50U3R5bGUuZ2V0KCkpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFNl
YW1sZXNzIGlmcmFtZXMgd2FudCB0byBpbmhlcml0IHRoZWlyIGZvbnQgZnJvbSB0aGVpciBwYXJl
bnQgaWZyYW1lLCBzbyBlYXJseSByZXR1cm4gYmVmb3JlIHNldHRpbmcgdGhlIGZvbnQuCi0gICAg
aWYgKHNlYW1sZXNzV2l0aFBhcmVudCkKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50U3R5bGUucmVs
ZWFzZSgpOwotCi0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKLSAgICBmb250
RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZvckZvbnRTZWxlY3Rpb24o
ZG9jdW1lbnRTdHlsZS0+bG9jYWxlKCkpKTsKLSAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0g
ZG9jdW1lbnQtPnNldHRpbmdzKCkpIHsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVBy
aW50ZXJGb250KGRvY3VtZW50LT5wcmludGluZygpIHx8ICFzZXR0aW5ncy0+c2NyZWVuRm9udFN1
YnN0aXR1dGlvbkVuYWJsZWQoKSk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJp
bmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKLSAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBzdGFuZGFyZEZvbnQgPSBzZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KGZv
bnREZXNjcmlwdGlvbi5zY3JpcHQoKSk7Ci0gICAgICAgIGlmICghc3RhbmRhcmRGb250LmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9u
dERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0T25lRmFtaWx5KHN0YW5kYXJkRm9udCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxs
ICsgMSk7Ci0gICAgICAgIGludCBzaXplID0gU3R5bGVSZXNvbHZlcjo6Zm9udFNpemVGb3JLZXl3
b3JkKGRvY3VtZW50LCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpOwotICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICAgICAgYm9vbCB1c2VTVkdab29tUnVs
ZXMgPSBkb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpOwotICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZp
ZWRTaXplKGRvY3VtZW50LCBkb2N1bWVudFN0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNB
YnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChkb2N1bWVudC0+cHJpbnRpbmco
KSk7Ci0KLSAgICBGb250T3JpZW50YXRpb24gZm9udE9yaWVudGF0aW9uOwotICAgIE5vbkNKS0ds
eXBoT3JpZW50YXRpb24gZ2x5cGhPcmllbnRhdGlvbjsKLSAgICBnZXRGb250QW5kR2x5cGhPcmll
bnRhdGlvbihkb2N1bWVudFN0eWxlLmdldCgpLCBmb250T3JpZW50YXRpb24sIGdseXBoT3JpZW50
YXRpb24pOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPcmllbnRhdGlvbihmb250T3JpZW50YXRp
b24pOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXROb25DSktHbHlwaE9yaWVudGF0aW9uKGdseXBo
T3JpZW50YXRpb24pOwotCi0gICAgZG9jdW1lbnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7Ci0gICAgZG9jdW1lbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZShmb250U2Vs
ZWN0b3IpOwotCi0gICAgcmV0dXJuIGRvY3VtZW50U3R5bGUucmVsZWFzZSgpOwotfQotCiBzdGF0
aWMgaW5saW5lIGJvb2wgaXNBdFNoYWRvd0JvdW5kYXJ5KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
CiB7CiAgICAgaWYgKCFlbGVtZW50KQpAQCAtMTQ1NSw3ICsxMzI1LDcgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZShSZQogCiAgICAgLy8gQ2FsbCBzZXRTdHlsZXNGb3JQ
YWdpbmF0aW9uTW9kZSgpIGlmIGEgcGFnaW5hdGlvbiBtb2RlIGlzIHNldCBmb3IgYW55IG5vbi1y
b290IGVsZW1lbnRzLiBJZiB0aGVzZQogICAgIC8vIHN0eWxlcyBhcmUgc3BlY2lmaWVkIG9uIGEg
cm9vdCBlbGVtZW50LCB0aGVuIHRoZXkgd2lsbCBiZSBpbmNvcnBvcmF0ZWQgaW4KLSAgICAvLyBT
dHlsZVJlc29sdmVyOjpzdHlsZUZvckRvY3VtZW50KCkuCisgICAgLy8gU3R5bGU6OmNyZWF0ZUZv
ckRvY3VtZW50KCkuCiAgICAgaWYgKChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1BBR0VEWCB8fCBz
dHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1BBR0VEWSkgJiYgIShlICYmIChlLT5oYXNUYWdOYW1lKGh0
bWxUYWcpIHx8IGUtPmhhc1RhZ05hbWUoYm9keVRhZykpKSkKICAgICAgICAgc3R5bGUtPnNldENv
bHVtblN0eWxlc0Zyb21QYWdpbmF0aW9uTW9kZShXZWJDb3JlOjpwYWdpbmF0aW9uTW9kZUZvclJl
bmRlclN0eWxlKHN0eWxlKSk7CiAKQEAgLTE1ODUsNyArMTQ1NSw3IEBAIHN0YXRpYyB2b2lkIGNo
ZWNrRm9yT3JpZW50YXRpb25DaGFuZ2UoUmUKIHsKICAgICBGb250T3JpZW50YXRpb24gZm9udE9y
aWVudGF0aW9uOwogICAgIE5vbkNKS0dseXBoT3JpZW50YXRpb24gZ2x5cGhPcmllbnRhdGlvbjsK
LSAgICBnZXRGb250QW5kR2x5cGhPcmllbnRhdGlvbihzdHlsZSwgZm9udE9yaWVudGF0aW9uLCBn
bHlwaE9yaWVudGF0aW9uKTsKKyAgICBzdHlsZS0+Z2V0Rm9udEFuZEdseXBoT3JpZW50YXRpb24o
Zm9udE9yaWVudGF0aW9uLCBnbHlwaE9yaWVudGF0aW9uKTsKIAogICAgIGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwogICAg
IGlmIChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBmb250T3JpZW50YXRpb24gJiYg
Zm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBnbHlwaE9yaWVudGF0
aW9uKQpAQCAtMjQxNyw3ICsyMjg3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1BybwogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVy
Rm9udChkb2N1bWVudCgpLT5wcmludGluZygpIHx8ICFzZXR0aW5ncy0+c2NyZWVuRm9udFN1YnN0
aXR1dGlvbkVuYWJsZWQoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20g
ZmFjdG9yLgotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUo
KSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZvbnREZXNjcmlwdGlvbi5zcGVj
aWZpZWRTaXplKCksIHVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVj
aWZpZWRTaXplKGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIGZvbnREZXNjcmlwdGlv
bi5pc0Fic29sdXRlU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSwgc3RhdGUuc3R5bGUoKSwgZG9j
dW1lbnQoKSkpOwogICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRW
YWx1ZSgpKSB7CkBAIC0zMjYzLDcgKzMxMzMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNr
Rm9yR2VuZXJpY0ZhbWlsCiAgICAgLy8gbXVsdGlwbHlpbmcgYnkgb3VyIHNjYWxlIGZhY3Rvci4K
ICAgICBmbG9hdCBzaXplOwogICAgIGlmIChjaGlsZEZvbnQua2V5d29yZFNpemUoKSkKLSAgICAg
ICAgc2l6ZSA9IGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwg
KyBjaGlsZEZvbnQua2V5d29yZFNpemUoKSAtIDEsIGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRT
aXplKCkpOworICAgICAgICBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1
ZVh4U21hbGwgKyBjaGlsZEZvbnQua2V5d29yZFNpemUoKSAtIDEsIGNoaWxkRm9udC51c2VGaXhl
ZERlZmF1bHRTaXplKCksIGRvY3VtZW50KCkpOwogICAgIGVsc2UgewogICAgICAgICBTZXR0aW5n
cyogc2V0dGluZ3MgPSBkb2N1bWVudFNldHRpbmdzKCk7CiAgICAgICAgIGZsb2F0IGZpeGVkU2Nh
bGVGYWN0b3IgPSAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkg
JiYgc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpKQpAQCAtMzI4OSw3ICszMTU5LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKAogICAgIGlmICghc3RhbmRhcmRG
b250RmFtaWx5LmlzRW1wdHkoKSkKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWls
eShzdGFuZGFyZEZvbnRGYW1pbHkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6
ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwotICAgIHNldEZvbnRTaXpl
KGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVl
TWVkaXVtLCBmYWxzZSkpOworICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6
OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3VtZW50KCkpKTsK
ICAgICBtX3N0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxM
aW5lSGVpZ2h0KCkpOwogICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogICAgIHNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwpAQCAtMzI5OCwxNTEgKzMxNjgsNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUoCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6OnNldEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9h
dCBzaXplKQogewogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwot
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNw
ZWNpZmllZFNpemUoZG9jdW1lbnQoKSwgbV9zdGF0ZS5zdHlsZSgpLCBmb250RGVzY3JpcHRpb24u
aXNBYnNvbHV0ZVNpemUoKSwgc2l6ZSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKLX0KLQotZmxvYXQg
U3R5bGVSZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQq
IGRvY3VtZW50LCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0
IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKQotewotICAgIGZsb2F0IHpvb21G
YWN0b3IgPSAxLjBmOwotICAgIGlmICghdXNlU1ZHWm9vbVJ1bGVzKSB7Ci0gICAgICAgIHpvb21G
YWN0b3IgPSBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgICAgICB6b29tRmFjdG9yICo9IGZyYW1lLT50
ZXh0Wm9vbUZhY3RvcigpOwotICAgIH0KLQotICAgIHJldHVybiBTdHlsZVJlc29sdmVyOjpnZXRD
b21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCwgem9vbUZhY3RvciwgaXNBYnNv
bHV0ZVNpemUsIHNwZWNpZmllZFNpemUpOwotfQotCi1mbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRD
b21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIGZsb2F0IHpv
b21GYWN0b3IsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIEVTbWFy
dE1pbmltdW1Gb3JGb250U2l6ZSB1c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSkKLXsKLSAgICAv
LyBUZXh0IHdpdGggYSAwcHggZm9udCBzaXplIHNob3VsZCBub3QgYmUgdmlzaWJsZSBhbmQgdGhl
cmVmb3JlIG5lZWRzIHRvIGJlCi0gICAgLy8gZXhlbXB0IGZyb20gbWluaW11bSBmb250IHNpemUg
cnVsZXMuIEFjaWQzIHJlbGllcyBvbiB0aGlzIGZvciBwaXhlbC1wZXJmZWN0Ci0gICAgLy8gcmVu
ZGVyaW5nLiBUaGlzIGlzIGFsc28gY29tcGF0aWJsZSB3aXRoIG90aGVyIGJyb3dzZXJzIHRoYXQg
aGF2ZSBtaW5pbXVtCi0gICAgLy8gZm9udCBzaXplIHNldHRpbmdzIChlLmcuIEZpcmVmb3gpLgot
ICAgIGlmIChmYWJzZihzcGVjaWZpZWRTaXplKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjplcHNpbG9uKCkpCi0gICAgICAgIHJldHVybiAwLjBmOwotCi0gICAgLy8gV2Ugc3VwcG9ydCB0
d28gdHlwZXMgb2YgbWluaW11bSBmb250IHNpemUuIFRoZSBmaXJzdCBpcyBhIGhhcmQgb3ZlcnJp
ZGUgdGhhdCBhcHBsaWVzIHRvCi0gICAgLy8gYWxsIGZvbnRzLiBUaGlzIGlzICJtaW5TaXplLiIg
VGhlIHNlY29uZCB0eXBlIG9mIG1pbmltdW0gZm9udCBzaXplIGlzIGEgInNtYXJ0IG1pbmltdW0i
Ci0gICAgLy8gdGhhdCBpcyBhcHBsaWVkIG9ubHkgd2hlbiB0aGUgV2ViIHBhZ2UgY2FuJ3Qga25v
dyB3aGF0IHNpemUgaXQgcmVhbGx5IGFza2VkIGZvciwgZS5nLiwKLSAgICAvLyB3aGVuIGl0IHVz
ZXMgbG9naWNhbCBzaXplcyBsaWtlICJzbWFsbCIgb3IgZXhwcmVzc2VzIHRoZSBmb250LXNpemUg
YXMgYSBwZXJjZW50YWdlIG9mCi0gICAgLy8gdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgc2V0dGlu
Zy4KLQotICAgIC8vIFdpdGggdGhlIHNtYXJ0IG1pbmltdW0sIHdlIG5ldmVyIHdhbnQgdG8gZ2V0
IHNtYWxsZXIgdGhhbiB0aGUgbWluaW11bSBmb250IHNpemUgdG8ga2VlcCBmb250cyByZWFkYWJs
ZS4KLSAgICAvLyBIb3dldmVyIHdlIGFsd2F5cyBhbGxvdyB0aGUgcGFnZSB0byBzZXQgYW4gZXhw
bGljaXQgcGl4ZWwgc2l6ZSB0aGF0IGlzIHNtYWxsZXIsCi0gICAgLy8gc2luY2Ugc2l0ZXMgd2ls
bCBtaXMtcmVuZGVyIG90aGVyd2lzZSAoZS5nLiwgaHR0cDovL3d3dy5nYW1lc3BvdC5jb20gd2l0
aCBhIDlweCBtaW5pbXVtKS4KLQotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5z
ZXR0aW5ncygpOwotICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybiAxLjBmOwotCi0g
ICAgaW50IG1pblNpemUgPSBzZXR0aW5ncy0+bWluaW11bUZvbnRTaXplKCk7Ci0gICAgaW50IG1p
bkxvZ2ljYWxTaXplID0gc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKTsKLSAgICBm
bG9hdCB6b29tZWRTaXplID0gc3BlY2lmaWVkU2l6ZSAqIHpvb21GYWN0b3I7Ci0KLSAgICAvLyBB
cHBseSB0aGUgaGFyZCBtaW5pbXVtIGZpcnN0LiBXZSBvbmx5IGFwcGx5IHRoZSBoYXJkIG1pbmlt
dW0gaWYgYWZ0ZXIgem9vbWluZyB3ZSdyZSBzdGlsbCB0b28gc21hbGwuCi0gICAgaWYgKHpvb21l
ZFNpemUgPCBtaW5TaXplKQotICAgICAgICB6b29tZWRTaXplID0gbWluU2l6ZTsKLQotICAgIC8v
IE5vdyBhcHBseSB0aGUgInNtYXJ0IG1pbmltdW0uIiBUaGlzIG1pbmltdW0gaXMgYWxzbyBvbmx5
IGFwcGxpZWQgaWYgd2UncmUgc3RpbGwgdG9vIHNtYWxsCi0gICAgLy8gYWZ0ZXIgem9vbWluZy4g
VGhlIGZvbnQgc2l6ZSBtdXN0IGVpdGhlciBiZSByZWxhdGl2ZSB0byB0aGUgdXNlciBkZWZhdWx0
IG9yIHRoZSBvcmlnaW5hbCBzaXplCi0gICAgLy8gbXVzdCBoYXZlIGJlZW4gYWNjZXB0YWJsZS4g
SW4gb3RoZXIgd29yZHMsIHdlIG9ubHkgYXBwbHkgdGhlIHNtYXJ0IG1pbmltdW0gd2hlbmV2ZXIg
d2UncmUgcG9zaXRpdmUKLSAgICAvLyBkb2luZyBzbyB3b24ndCBkaXNydXB0IHRoZSBsYXlvdXQu
Ci0gICAgaWYgKHVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXplICYmIHpvb21lZFNpemUgPCBtaW5M
b2dpY2FsU2l6ZSAmJiAoc3BlY2lmaWVkU2l6ZSA+PSBtaW5Mb2dpY2FsU2l6ZSB8fCAhaXNBYnNv
bHV0ZVNpemUpKQotICAgICAgICB6b29tZWRTaXplID0gbWluTG9naWNhbFNpemU7Ci0KLSAgICAv
LyBBbHNvIGNsYW1wIHRvIGEgcmVhc29uYWJsZSBtYXhpbXVtIHRvIHByZXZlbnQgaW5zYW5lIGZv
bnQgc2l6ZXMgZnJvbSBjYXVzaW5nIGNyYXNoZXMgb24gdmFyaW91cwotICAgIC8vIHBsYXRmb3Jt
cyAoSSdtIGxvb2tpbmcgYXQgeW91LCBXaW5kb3dzLikKLSAgICByZXR1cm4gbWluKG1heGltdW1B
bGxvd2VkRm9udFNpemUsIHpvb21lZFNpemUpOwotfQotCi1jb25zdCBpbnQgZm9udFNpemVUYWJs
ZU1heCA9IDE2OwotY29uc3QgaW50IGZvbnRTaXplVGFibGVNaW4gPSA5OwotY29uc3QgaW50IHRv
dGFsS2V5d29yZHMgPSA4OwotCi0vLyBXaW5JRS9OYXY0IHRhYmxlIGZvciBmb250IHNpemVzLiBE
ZXNpZ25lZCB0byBtYXRjaCB0aGUgbGVnYWN5IGZvbnQgbWFwcGluZyBzeXN0ZW0gb2YgSFRNTC4K
LXN0YXRpYyBjb25zdCBpbnQgcXVpcmtzRm9udFNpemVUYWJsZVtmb250U2l6ZVRhYmxlTWF4IC0g
Zm9udFNpemVUYWJsZU1pbiArIDFdW3RvdGFsS2V5d29yZHNdID0KLXsKLSAgICAgIHsgOSwgICAg
OSwgICAgIDksICAgICA5LCAgICAxMSwgICAgMTQsICAgIDE4LCAgICAyOCB9LAotICAgICAgeyA5
LCAgICA5LCAgICAgOSwgICAgMTAsICAgIDEyLCAgICAxNSwgICAgMjAsICAgIDMxIH0sCi0gICAg
ICB7IDksICAgIDksICAgICA5LCAgICAxMSwgICAgMTMsICAgIDE3LCAgICAyMiwgICAgMzQgfSwK
LSAgICAgIHsgOSwgICAgOSwgICAgMTAsICAgIDEyLCAgICAxNCwgICAgMTgsICAgIDI0LCAgICAz
NyB9LAotICAgICAgeyA5LCAgICA5LCAgICAxMCwgICAgMTMsICAgIDE2LCAgICAyMCwgICAgMjYs
ICAgIDQwIH0sIC8vIGZpeGVkIGZvbnQgZGVmYXVsdCAoMTMpCi0gICAgICB7IDksICAgIDksICAg
IDExLCAgICAxNCwgICAgMTcsICAgIDIxLCAgICAyOCwgICAgNDIgfSwKLSAgICAgIHsgOSwgICAx
MCwgICAgMTIsICAgIDE1LCAgICAxNywgICAgMjMsICAgIDMwLCAgICA0NSB9LAotICAgICAgeyA5
LCAgIDEwLCAgICAxMywgICAgMTYsICAgIDE4LCAgICAyNCwgICAgMzIsICAgIDQ4IH0gLy8gcHJv
cG9ydGlvbmFsIGZvbnQgZGVmYXVsdCAoMTYpCi19OwotLy8gSFRNTCAgICAgICAxICAgICAgMiAg
ICAgIDMgICAgICA0ICAgICAgNSAgICAgIDYgICAgICA3Ci0vLyBDU1MgIHh4cyAgIHhzICAgICBz
ICAgICAgbSAgICAgIGwgICAgIHhsICAgICB4eGwKLS8vICAgICAgICAgICAgICAgICAgICAgICAg
ICB8Ci0vLyAgICAgICAgICAgICAgICAgICAgICB1c2VyIHByZWYKLQotLy8gU3RyaWN0IG1vZGUg
dGFibGUgbWF0Y2hlcyBNYWNJRSBhbmQgTW96aWxsYSdzIHNldHRpbmdzIGV4YWN0bHkuCi1zdGF0
aWMgY29uc3QgaW50IHN0cmljdEZvbnRTaXplVGFibGVbZm9udFNpemVUYWJsZU1heCAtIGZvbnRT
aXplVGFibGVNaW4gKyAxXVt0b3RhbEtleXdvcmRzXSA9Ci17Ci0gICAgICB7IDksICAgIDksICAg
ICA5LCAgICAgOSwgICAgMTEsICAgIDE0LCAgICAxOCwgICAgMjcgfSwKLSAgICAgIHsgOSwgICAg
OSwgICAgIDksICAgIDEwLCAgICAxMiwgICAgMTUsICAgIDIwLCAgICAzMCB9LAotICAgICAgeyA5
LCAgICA5LCAgICAxMCwgICAgMTEsICAgIDEzLCAgICAxNywgICAgMjIsICAgIDMzIH0sCi0gICAg
ICB7IDksICAgIDksICAgIDEwLCAgICAxMiwgICAgMTQsICAgIDE4LCAgICAyNCwgICAgMzYgfSwK
LSAgICAgIHsgOSwgICAxMCwgICAgMTIsICAgIDEzLCAgICAxNiwgICAgMjAsICAgIDI2LCAgICAz
OSB9LCAvLyBmaXhlZCBmb250IGRlZmF1bHQgKDEzKQotICAgICAgeyA5LCAgIDEwLCAgICAxMiwg
ICAgMTQsICAgIDE3LCAgICAyMSwgICAgMjgsICAgIDQyIH0sCi0gICAgICB7IDksICAgMTAsICAg
IDEzLCAgICAxNSwgICAgMTgsICAgIDIzLCAgICAzMCwgICAgNDUgfSwKLSAgICAgIHsgOSwgICAx
MCwgICAgMTMsICAgIDE2LCAgICAxOCwgICAgMjQsICAgIDMyLCAgICA0OCB9IC8vIHByb3BvcnRp
b25hbCBmb250IGRlZmF1bHQgKDE2KQotfTsKLS8vIEhUTUwgICAgICAgMSAgICAgIDIgICAgICAz
ICAgICAgNCAgICAgIDUgICAgICA2ICAgICAgNwotLy8gQ1NTICB4eHMgICB4cyAgICAgcyAgICAg
IG0gICAgICBsICAgICB4bCAgICAgeHhsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgfAot
Ly8gICAgICAgICAgICAgICAgICAgICAgdXNlciBwcmVmCi0KLS8vIEZvciB2YWx1ZXMgb3V0c2lk
ZSB0aGUgcmFuZ2Ugb2YgdGhlIHRhYmxlLCB3ZSB1c2UgVG9kZCBGYWhybmVyJ3Mgc3VnZ2VzdGVk
IHNjYWxlCi0vLyBmYWN0b3JzIGZvciBlYWNoIGtleXdvcmQgdmFsdWUuCi1zdGF0aWMgY29uc3Qg
ZmxvYXQgZm9udFNpemVGYWN0b3JzW3RvdGFsS2V5d29yZHNdID0geyAwLjYwZiwgMC43NWYsIDAu
ODlmLCAxLjBmLCAxLjJmLCAxLjVmLCAyLjBmLCAzLjBmIH07Ci0KLWZsb2F0IFN0eWxlUmVzb2x2
ZXI6OmZvbnRTaXplRm9yS2V5d29yZChEb2N1bWVudCogZG9jdW1lbnQsIGludCBrZXl3b3JkLCBi
b29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpCi17Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdz
ID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFzZXR0aW5ncykKLSAgICAgICAgcmV0
dXJuIDEuMGY7Ci0KLSAgICBib29sIHF1aXJrc01vZGUgPSBkb2N1bWVudC0+aW5RdWlya3NNb2Rl
KCk7Ci0gICAgaW50IG1lZGl1bVNpemUgPSBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplID8gc2V0
dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkgOiBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXpl
KCk7Ci0gICAgaWYgKG1lZGl1bVNpemUgPj0gZm9udFNpemVUYWJsZU1pbiAmJiBtZWRpdW1TaXpl
IDw9IGZvbnRTaXplVGFibGVNYXgpIHsKLSAgICAgICAgLy8gTG9vayB1cCB0aGUgZW50cnkgaW4g
dGhlIHRhYmxlLgotICAgICAgICBpbnQgcm93ID0gbWVkaXVtU2l6ZSAtIGZvbnRTaXplVGFibGVN
aW47Ci0gICAgICAgIGludCBjb2wgPSAoa2V5d29yZCAtIENTU1ZhbHVlWHhTbWFsbCk7Ci0gICAg
ICAgIHJldHVybiBxdWlya3NNb2RlID8gcXVpcmtzRm9udFNpemVUYWJsZVtyb3ddW2NvbF0gOiBz
dHJpY3RGb250U2l6ZVRhYmxlW3Jvd11bY29sXTsKLSAgICB9Ci0KLSAgICAvLyBWYWx1ZSBpcyBv
dXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgdGFibGUuIEFwcGx5IHRoZSBzY2FsZSBmYWN0b3IgaW5z
dGVhZC4KLSAgICBmbG9hdCBtaW5Mb2dpY2FsU2l6ZSA9IG1heChzZXR0aW5ncy0+bWluaW11bUxv
Z2ljYWxGb250U2l6ZSgpLCAxKTsKLSAgICByZXR1cm4gbWF4KGZvbnRTaXplRmFjdG9yc1trZXl3
b3JkIC0gQ1NTVmFsdWVYeFNtYWxsXSptZWRpdW1TaXplLCBtaW5Mb2dpY2FsU2l6ZSk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW50IGZpbmROZWFyZXN0TGVnYWN5Rm9udFNp
emUoaW50IHBpeGVsRm9udFNpemUsIGNvbnN0IFQqIHRhYmxlLCBpbnQgbXVsdGlwbGllcikKLXsK
LSAgICAvLyBJZ25vcmUgdGFibGVbMF0gYmVjYXVzZSB4eC1zbWFsbCBkb2VzIG5vdCBjb3JyZXNw
b25kIHRvIGFueSBsZWdhY3kgZm9udCBzaXplLgotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgdG90
YWxLZXl3b3JkcyAtIDE7IGkrKykgewotICAgICAgICBpZiAocGl4ZWxGb250U2l6ZSAqIDIgPCAo
dGFibGVbaV0gKyB0YWJsZVtpICsgMV0pICogbXVsdGlwbGllcikKLSAgICAgICAgICAgIHJldHVy
biBpOwotICAgIH0KLSAgICByZXR1cm4gdG90YWxLZXl3b3JkcyAtIDE7Ci19Ci0KLWludCBTdHls
ZVJlc29sdmVyOjpsZWdhY3lGb250U2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIGludCBwaXhlbEZv
bnRTaXplLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpCi17Ci0gICAgU2V0dGluZ3Mq
IHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFzZXR0aW5ncykKLSAg
ICAgICAgcmV0dXJuIDE7Ci0KLSAgICBib29sIHF1aXJrc01vZGUgPSBkb2N1bWVudC0+aW5RdWly
a3NNb2RlKCk7Ci0gICAgaW50IG1lZGl1bVNpemUgPSBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXpl
ID8gc2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkgOiBzZXR0aW5ncy0+ZGVmYXVsdEZv
bnRTaXplKCk7Ci0gICAgaWYgKG1lZGl1bVNpemUgPj0gZm9udFNpemVUYWJsZU1pbiAmJiBtZWRp
dW1TaXplIDw9IGZvbnRTaXplVGFibGVNYXgpIHsKLSAgICAgICAgaW50IHJvdyA9IG1lZGl1bVNp
emUgLSBmb250U2l6ZVRhYmxlTWluOwotICAgICAgICByZXR1cm4gZmluZE5lYXJlc3RMZWdhY3lG
b250U2l6ZTxpbnQ+KHBpeGVsRm9udFNpemUsIHF1aXJrc01vZGUgPyBxdWlya3NGb250U2l6ZVRh
YmxlW3Jvd10gOiBzdHJpY3RGb250U2l6ZVRhYmxlW3Jvd10sIDEpOwotICAgIH0KLQotICAgIHJl
dHVybiBmaW5kTmVhcmVzdExlZ2FjeUZvbnRTaXplPGZsb2F0PihwaXhlbEZvbnRTaXplLCBmb250
U2l6ZUZhY3RvcnMsIG1lZGl1bVNpemUpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShzaXplLCBmb250
RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCksIG1fc3RhdGUu
c3R5bGUoKSwgZG9jdW1lbnQoKSkpOwogfQogCiBzdGF0aWMgQ29sb3IgY29sb3JGb3JDU1NWYWx1
ZShDU1NWYWx1ZUlEIGNzc1ZhbHVlSWQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmgJKHJldmlzaW9uIDE1Mzg5MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1lbnVtIEVTbWFydE1pbmltdW1Gb3JGb250U2l6ZSB7IERvTm90VXNlU21hcnRNaW5pbXVt
Rm9yRm9udFNpemUsIFVzZVNtYXJ0TWluaW11bUZvckZvbnRGaXplIH07Ci0KIGNsYXNzIENTU0N1
cnNvckltYWdlVmFsdWU7CiBjbGFzcyBDU1NGb250U2VsZWN0b3I7CiBjbGFzcyBDU1NGb250RmFj
ZTsKQEAgLTE5MCw4ICsxODgsNiBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gc3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpOwogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IGRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBzdHlsZUZvckRvY3VtZW50KERvY3VtZW50KiwgQ1NTRm9udFNlbGVjdG9yKiA9
IDApOwotCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
dHlsZSgpOyB9CiAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5wYXJlbnRTdHlsZSgpOyB9CiAgICAgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKTsgfQpAQCAtMjUw
LDEzICsyNDYsNiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+
IHN0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9
IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4g
PiBwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgUHNldWRvSWQsIHVuc2lnbmVk
IHJ1bGVzVG9JbmNsdWRlID0gQWxsQnV0RW1wdHlDU1NSdWxlcyk7CiAKLSAgICAvLyBHaXZlbiBh
IENTUyBrZXl3b3JkIGluIHRoZSByYW5nZSAoeHgtc21hbGwgdG8gLXdlYmtpdC14eHgtbGFyZ2Up
LCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCi0gICAgLy8gdGhlIGNvcnJlY3QgZm9udCBzaXpl
IHNjYWxlZCByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGRlZmF1bHQgKG1lZGl1bSkuCi0gICAgc3Rh
dGljIGZsb2F0IGZvbnRTaXplRm9yS2V5d29yZChEb2N1bWVudCosIGludCBrZXl3b3JkLCBib29s
IHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOwotCi0gICAgLy8gR2l2ZW4gYSBmb250IHNpemUg
aW4gcGl4ZWwsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gbGVnYWN5IGZvbnQgc2l6ZSBiZXR3
ZWVuIDEgYW5kIDcuCi0gICAgc3RhdGljIGludCBsZWdhY3lGb250U2l6ZShEb2N1bWVudCosIGlu
dCBwaXhlbEZvbnRTaXplLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOwotCiBwdWJs
aWM6CiAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1
ZSosIFJlbmRlclN0eWxlKik7CiAKQEAgLTI2NSwxMyArMjU0LDggQEAgcHVibGljOgogICAgIHZv
aWQgdXBkYXRlRm9udCgpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRTdHlsZShTZXR0aW5ncyop
OwogCi0gICAgc3RhdGljIGZsb2F0IGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERv
Y3VtZW50KiwgZmxvYXQgem9vbUZhY3RvciwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3Bl
Y2lmaWVkU2l6ZSwgRVNtYXJ0TWluaW11bUZvckZvbnRTaXplID0gVXNlU21hcnRNaW5pbXVtRm9y
Rm9udEZpemUpOwotCiAgICAgdm9pZCBzZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mLCBmbG9h
dCBzaXplKTsKIAotcHJpdmF0ZToKLSAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJv
bVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBSZW5kZXJTdHlsZSosIGJvb2wgaXNBYnNvbHV0ZVNp
emUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKTsKLQogcHVibGlj
OgogICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAkocmV2aXNpb24gMTUzODkzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0Niw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5o
IgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmgiCiAjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1ZGUgIlN0
eWxlU2hlZXRMaXN0LmgiCkBAIC0xNzgwLDggKzE3ODEsOSBAQCB2b2lkIERvY3VtZW50OjpyZWNh
bGNTdHlsZShTdHlsZTo6Q2hhbmdlCiAgICAgICAgIGlmICgoY2hhbmdlID09IFN0eWxlOjpGb3Jj
ZSkgfHwgKHNob3VsZERpc3BsYXlTZWFtbGVzc2x5V2l0aFBhcmVudCgpICYmIChjaGFuZ2UgPj0g
U3R5bGU6OkluaGVyaXQpKSkgewogICAgICAgICAgICAgLy8gc3R5bGUgc2VsZWN0b3IgbWF5IHNl
dCB0aGlzIGFnYWluIGR1cmluZyByZWNhbGMKICAgICAgICAgICAgIG1faGFzTm9kZXNXaXRoUGxh
Y2Vob2xkZXJTdHlsZSA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IGRvY3VtZW50U3R5bGUgPSBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckRvY3Vt
ZW50KHRoaXMsIG1fc3R5bGVSZXNvbHZlciA/IG1fc3R5bGVSZXNvbHZlci0+Zm9udFNlbGVjdG9y
KCkgOiAwKTsKKworICAgICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBkb2N1bWVudFN0eWxl
ID0gU3R5bGU6OnJlc29sdmVGb3JEb2N1bWVudCh0aGlzKTsKKwogICAgICAgICAgICAgU3R5bGU6
OkNoYW5nZSBkb2N1bWVudENoYW5nZSA9IFN0eWxlOjpkZXRlcm1pbmVDaGFuZ2UoZG9jdW1lbnRT
dHlsZS5nZXQoKSwgcmVuZGVyZXIoKS0+c3R5bGUoKSwgc2V0dGluZ3MoKSk7CiAgICAgICAgICAg
ICBpZiAoZG9jdW1lbnRDaGFuZ2UgIT0gU3R5bGU6Ok5vQ2hhbmdlKQogICAgICAgICAgICAgICAg
IHJlbmRlcmVyKCktPnNldFN0eWxlKGRvY3VtZW50U3R5bGUucmVsZWFzZSgpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDE1Mzg5MykKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUXVhbGlm
aWVkTmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU3R5bGVGb250
U2l6ZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCkBAIC0xNTY3LDEwICsx
NTY4LDEwIEBAIGludCBsZWdhY3lGb250U2l6ZUZyb21DU1NWYWx1ZShEb2N1bWVudCoKIHsKICAg
ICBpZiAoaXNDU1NWYWx1ZUxlbmd0aCh2YWx1ZSkpIHsKICAgICAgICAgaW50IHBpeGVsRm9udFNp
emUgPSB2YWx1ZS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0gICAg
ICAgIGludCBsZWdhY3lGb250U2l6ZSA9IFN0eWxlUmVzb2x2ZXI6OmxlZ2FjeUZvbnRTaXplKGRv
Y3VtZW50LCBwaXhlbEZvbnRTaXplLCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSk7Cisg
ICAgICAgIGludCBsZWdhY3lGb250U2l6ZSA9IFN0eWxlOjpsZWdhY3lGb250U2l6ZUZvclBpeGVs
U2l6ZShwaXhlbEZvbnRTaXplLCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSwgZG9jdW1l
bnQpOwogICAgICAgICAvLyBVc2UgbGVnYWN5IGZvbnQgc2l6ZSBvbmx5IGlmIHBpeGVsIHZhbHVl
IG1hdGNoZXMgZXhhY3RseSB0byB0aGF0IG9mIGxlZ2FjeSBmb250IHNpemUuCiAgICAgICAgIGlu
dCBjc3NQcmltaXRpdmVFcXVpdmFsZW50ID0gbGVnYWN5Rm9udFNpemUgLSAxICsgQ1NTVmFsdWVY
U21hbGw7Ci0gICAgICAgIGlmIChtb2RlID09IEFsd2F5c1VzZUxlZ2FjeUZvbnRTaXplIHx8IFN0
eWxlUmVzb2x2ZXI6OmZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCwgY3NzUHJpbWl0aXZlRXF1
aXZhbGVudCwgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUpID09IHBpeGVsRm9udFNpemUp
CisgICAgICAgIGlmIChtb2RlID09IEFsd2F5c1VzZUxlZ2FjeUZvbnRTaXplIHx8IFN0eWxlOjpm
b250U2l6ZUZvcktleXdvcmQoY3NzUHJpbWl0aXZlRXF1aXZhbGVudCwgc2hvdWxkVXNlRml4ZWRG
b250RGVmYXVsdFNpemUsIGRvY3VtZW50KSA9PSBwaXhlbEZvbnRTaXplKQogICAgICAgICAgICAg
cmV0dXJuIGxlZ2FjeUZvbnRTaXplOwogCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24gMTUzODkzKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxMSArNDMsMTMgQEAKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAi
TWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgotI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJQYWdlLmgidQorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisj
aW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlRm9y
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTIwNCw3ICsyMDYsNyBAQCB2b2lkIEhUTUxMaW5rRWxl
bWVudDo6cHJvY2VzcygpCiAKICAgICAgICAgYm9vbCBtZWRpYVF1ZXJ5TWF0Y2hlcyA9IHRydWU7
CiAgICAgICAgIGlmICghbV9tZWRpYS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHlsZSA9IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRG9jdW1l
bnQoZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGRvY3VtZW50
U3R5bGUgPSBTdHlsZTo6cmVzb2x2ZUZvckRvY3VtZW50KGRvY3VtZW50KCkpOwogICAgICAgICAg
ICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRlQWxs
b3dpbmdEZXNjcmlwdGlvblN5bnRheChtX21lZGlhKTsKICAgICAgICAgICAgIE1lZGlhUXVlcnlF
dmFsdWF0b3IgZXZhbHVhdG9yKGRvY3VtZW50KCktPmZyYW1lKCktPnZpZXcoKS0+bWVkaWFUeXBl
KCksIGRvY3VtZW50KCktPmZyYW1lKCksIGRvY3VtZW50U3R5bGUuZ2V0KCkpOwogICAgICAgICAg
ICAgbWVkaWFRdWVyeU1hdGNoZXMgPSBldmFsdWF0b3IuZXZhbChtZWRpYS5nZXQoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJl
dmlzaW9uIDE1Mzg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MTYsNiArMTcxNiw0NSBAQCBMYXlvdXRCb3hF
eHRlbnQgUmVuZGVyU3R5bGU6OmltYWdlT3V0c2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOaW5lUGllY2VJbWFnZTo6Y29tcHV0ZU91dHNldChpbWFnZS5vdXRzZXQoKS5sZWZ0KCksIGJv
cmRlckxlZnRXaWR0aCgpKSk7CiB9CiAKK3ZvaWQgUmVuZGVyU3R5bGU6OmdldEZvbnRBbmRHbHlw
aE9yaWVudGF0aW9uKEZvbnRPcmllbnRhdGlvbiYgZm9udE9yaWVudGF0aW9uLCBOb25DSktHbHlw
aE9yaWVudGF0aW9uJiBnbHlwaE9yaWVudGF0aW9uKQoreworICAgIGlmIChpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKSB7CisgICAgICAgIGZvbnRPcmllbnRhdGlvbiA9IEhvcml6b250YWw7Cisg
ICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxS
aWdodDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaCAodGV4dE9yaWVudGF0
aW9uKCkpIHsKKyAgICBjYXNlIFRleHRPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ6CisgICAgICAg
IGZvbnRPcmllbnRhdGlvbiA9IFZlcnRpY2FsOworICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0g
Tm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFRleHRPcmllbnRhdGlvblVwcmlnaHQ6CisgICAgICAgIGZvbnRPcmllbnRhdGlvbiA9
IFZlcnRpY2FsOworICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRh
dGlvblVwcmlnaHQ7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFRleHRPcmllbnRhdGlvblNp
ZGV3YXlzOgorICAgICAgICBpZiAod3JpdGluZ01vZGUoKSA9PSBMZWZ0VG9SaWdodFdyaXRpbmdN
b2RlKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbWFwIHRvIHNpZGV3YXlz
LWxlZnQsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgorICAgICAgICAgICAgZm9udE9yaWVu
dGF0aW9uID0gVmVydGljYWw7CisgICAgICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0gTm9uQ0pL
R2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgZm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbDsKKyAgICAgICAgZ2x5
cGhPcmllbnRhdGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBUZXh0T3JpZW50YXRpb25TaWRld2F5c1JpZ2h0OgorICAg
ICAgICBmb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFsOworICAgICAgICBnbHlwaE9yaWVudGF0
aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7CisgICAgICAgIHJldHVy
bjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
Zm9udE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbDsKKyAgICAgICAgZ2x5cGhPcmllbnRhdGlvbiA9
IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OworICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCiB2b2lkIFJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZVNvdXJjZShQYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IGltYWdlKQogewogICAgIGlmIChzdXJyb3VuZC0+Ym9yZGVyLm1faW1h
Z2UuaW1hZ2UoKSA9PSBpbWFnZS5nZXQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAxNTM4OTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTU3
LDYgKzU1Nyw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCBzcGVjaWZpZWRGb250U2l6ZSgpIGNvbnN0
OwogICAgIGZsb2F0IGNvbXB1dGVkRm9udFNpemUoKSBjb25zdDsKICAgICBpbnQgZm9udFNpemUo
KSBjb25zdDsKKyAgICB2b2lkIGdldEZvbnRBbmRHbHlwaE9yaWVudGF0aW9uKEZvbnRPcmllbnRh
dGlvbiYsIE5vbkNKS0dseXBoT3JpZW50YXRpb24mKTsKIAogI2lmIEVOQUJMRShURVhUX0FVVE9T
SVpJTkcpCiAgICAgZmxvYXQgdGV4dEF1dG9zaXppbmdNdWx0aXBsaWVyKCkgY29uc3QgeyByZXR1
cm4gdmlzdWFsLT5tX3RleHRBdXRvc2l6aW5nTXVsdGlwbGllcjsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShy
ZXZpc2lvbiAxNTM4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0lubGluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiU1ZHSW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlcmluZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJTVkdSb290SW5saW5lQm94LmgiCisjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1
bmN0aW9ucy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJWaXNpYmxl
UG9zaXRpb24uaCIKIApAQCAtMjQxLDcgKzI0Miw3IEBAIHZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4
dDo6Y29tcHV0ZU5ld1NjYWwKICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKHN0
eWxlLT5mb250RGVzY3JpcHRpb24oKSk7CiAKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBiZXR0
ZXIgaGFuZGxlIHRoZSBjYXNlIHdoZW4gd2UgY29tcHV0ZSB2ZXJ5IHNtYWxsIGZvbnRzIGJlbG93
IChiZWxvdyAxcHQpLgotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGVS
ZXNvbHZlcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQsIHNjYWxp
bmdGYWN0b3IsIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRp
b24uY29tcHV0ZWRTaXplKCksIERvTm90VXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUpKTsKKyAg
ICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpjb21wdXRlZEZvbnRTaXpl
RnJvbVNwZWNpZmllZFNpemVGb3JTVkdJbmxpbmVUZXh0KGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZFNpemUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNjYWxpbmdGYWN0b3Is
IGRvY3VtZW50KSk7CiAKICAgICBzY2FsZWRGb250ID0gRm9udChmb250RGVzY3JpcHRpb24sIDAs
IDApOwogICAgIHNjYWxlZEZvbnQudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3Rvcigp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlRm9udFNpemVGdW5jdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlRm9udFNpemVGdW5jdGlv
bnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVGb250U2l6
ZUZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAg
ICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNr
c2hhbmtzLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmln
aHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVu
Y3Rpb25zLmgiCisKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
U3R5bGUgeworCitlbnVtIEVTbWFydE1pbmltdW1Gb3JGb250U2l6ZSB7IERvTm90VXNlU21hcnRN
aW5pbXVtRm9yRm9udFNpemUsIFVzZVNtYXJ0TWluaW11bUZvckZvbnRGaXplIH07CisKK3N0YXRp
YyBmbG9hdCBjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoZmxvYXQgc3BlY2lmaWVk
U2l6ZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgem9vbUZhY3RvciwgRVNtYXJ0TWluaW11
bUZvckZvbnRTaXplIHVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXplLCBjb25zdCBTZXR0aW5ncyog
c2V0dGluZ3MpCit7CisgICAgLy8gVGV4dCB3aXRoIGEgMHB4IGZvbnQgc2l6ZSBzaG91bGQgbm90
IGJlIHZpc2libGUgYW5kIHRoZXJlZm9yZSBuZWVkcyB0byBiZQorICAgIC8vIGV4ZW1wdCBmcm9t
IG1pbmltdW0gZm9udCBzaXplIHJ1bGVzLiBBY2lkMyByZWxpZXMgb24gdGhpcyBmb3IgcGl4ZWwt
cGVyZmVjdAorICAgIC8vIHJlbmRlcmluZy4gVGhpcyBpcyBhbHNvIGNvbXBhdGlibGUgd2l0aCBv
dGhlciBicm93c2VycyB0aGF0IGhhdmUgbWluaW11bQorICAgIC8vIGZvbnQgc2l6ZSBzZXR0aW5n
cyAoZS5nLiBGaXJlZm94KS4KKyAgICBpZiAoZmFic2Yoc3BlY2lmaWVkU2l6ZSkgPCBzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpKQorICAgICAgICByZXR1cm4gMC4wZjsKKwor
ICAgIC8vIFdlIHN1cHBvcnQgdHdvIHR5cGVzIG9mIG1pbmltdW0gZm9udCBzaXplLiBUaGUgZmly
c3QgaXMgYSBoYXJkIG92ZXJyaWRlIHRoYXQgYXBwbGllcyB0bworICAgIC8vIGFsbCBmb250cy4g
VGhpcyBpcyAibWluU2l6ZS4iIFRoZSBzZWNvbmQgdHlwZSBvZiBtaW5pbXVtIGZvbnQgc2l6ZSBp
cyBhICJzbWFydCBtaW5pbXVtIgorICAgIC8vIHRoYXQgaXMgYXBwbGllZCBvbmx5IHdoZW4gdGhl
IFdlYiBwYWdlIGNhbid0IGtub3cgd2hhdCBzaXplIGl0IHJlYWxseSBhc2tlZCBmb3IsIGUuZy4s
CisgICAgLy8gd2hlbiBpdCB1c2VzIGxvZ2ljYWwgc2l6ZXMgbGlrZSAic21hbGwiIG9yIGV4cHJl
c3NlcyB0aGUgZm9udC1zaXplIGFzIGEgcGVyY2VudGFnZSBvZgorICAgIC8vIHRoZSB1c2VyJ3Mg
ZGVmYXVsdCBmb250IHNldHRpbmcuCisKKyAgICAvLyBXaXRoIHRoZSBzbWFydCBtaW5pbXVtLCB3
ZSBuZXZlciB3YW50IHRvIGdldCBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gZm9udCBzaXplIHRv
IGtlZXAgZm9udHMgcmVhZGFibGUuCisgICAgLy8gSG93ZXZlciB3ZSBhbHdheXMgYWxsb3cgdGhl
IHBhZ2UgdG8gc2V0IGFuIGV4cGxpY2l0IHBpeGVsIHNpemUgdGhhdCBpcyBzbWFsbGVyLAorICAg
IC8vIHNpbmNlIHNpdGVzIHdpbGwgbWlzLXJlbmRlciBvdGhlcndpc2UgKGUuZy4sIGh0dHA6Ly93
d3cuZ2FtZXNwb3QuY29tIHdpdGggYSA5cHggbWluaW11bSkuCisKKyAgICBpZiAoIXNldHRpbmdz
KQorICAgICAgICByZXR1cm4gMS4wZjsKKworICAgIGludCBtaW5TaXplID0gc2V0dGluZ3MtPm1p
bmltdW1Gb250U2l6ZSgpOworICAgIGludCBtaW5Mb2dpY2FsU2l6ZSA9IHNldHRpbmdzLT5taW5p
bXVtTG9naWNhbEZvbnRTaXplKCk7CisgICAgZmxvYXQgem9vbWVkU2l6ZSA9IHNwZWNpZmllZFNp
emUgKiB6b29tRmFjdG9yOworCisgICAgLy8gQXBwbHkgdGhlIGhhcmQgbWluaW11bSBmaXJzdC4g
V2Ugb25seSBhcHBseSB0aGUgaGFyZCBtaW5pbXVtIGlmIGFmdGVyIHpvb21pbmcgd2UncmUgc3Rp
bGwgdG9vIHNtYWxsLgorICAgIGlmICh6b29tZWRTaXplIDwgbWluU2l6ZSkKKyAgICAgICAgem9v
bWVkU2l6ZSA9IG1pblNpemU7CisKKyAgICAvLyBOb3cgYXBwbHkgdGhlICJzbWFydCBtaW5pbXVt
LiIgVGhpcyBtaW5pbXVtIGlzIGFsc28gb25seSBhcHBsaWVkIGlmIHdlJ3JlIHN0aWxsIHRvbyBz
bWFsbAorICAgIC8vIGFmdGVyIHpvb21pbmcuIFRoZSBmb250IHNpemUgbXVzdCBlaXRoZXIgYmUg
cmVsYXRpdmUgdG8gdGhlIHVzZXIgZGVmYXVsdCBvciB0aGUgb3JpZ2luYWwgc2l6ZQorICAgIC8v
IG11c3QgaGF2ZSBiZWVuIGFjY2VwdGFibGUuIEluIG90aGVyIHdvcmRzLCB3ZSBvbmx5IGFwcGx5
IHRoZSBzbWFydCBtaW5pbXVtIHdoZW5ldmVyIHdlJ3JlIHBvc2l0aXZlCisgICAgLy8gZG9pbmcg
c28gd29uJ3QgZGlzcnVwdCB0aGUgbGF5b3V0LgorICAgIGlmICh1c2VTbWFydE1pbmltdW1Gb3JG
b250U2l6ZSAmJiB6b29tZWRTaXplIDwgbWluTG9naWNhbFNpemUgJiYgKHNwZWNpZmllZFNpemUg
Pj0gbWluTG9naWNhbFNpemUgfHwgIWlzQWJzb2x1dGVTaXplKSkKKyAgICAgICAgem9vbWVkU2l6
ZSA9IG1pbkxvZ2ljYWxTaXplOworCisgICAgLy8gQWxzbyBjbGFtcCB0byBhIHJlYXNvbmFibGUg
bWF4aW11bSB0byBwcmV2ZW50IGluc2FuZSBmb250IHNpemVzIGZyb20gY2F1c2luZyBjcmFzaGVz
IG9uIHZhcmlvdXMKKyAgICAvLyBwbGF0Zm9ybXMgKEknbSBsb29raW5nIGF0IHlvdSwgV2luZG93
cy4pCisgICAgcmV0dXJuIHN0ZDo6bWluKG1heGltdW1BbGxvd2VkRm9udFNpemUsIHpvb21lZFNp
emUpOworfQorCitmbG9hdCBjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoZmxvYXQg
c3BlY2lmaWVkU2l6ZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMs
IGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQorewor
ICAgIGZsb2F0IHpvb21GYWN0b3IgPSAxLjBmOworICAgIGlmICghdXNlU1ZHWm9vbVJ1bGVzKSB7
CisgICAgICAgIHpvb21GYWN0b3IgPSBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAgICAgICB6b29tRmFj
dG9yICo9IGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOworICAgIH0KKyAgICByZXR1cm4gY29tcHV0
ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNwZWNpZmllZFNpemUsIGlzQWJzb2x1dGVTaXpl
LCB6b29tRmFjdG9yLCBVc2VTbWFydE1pbmltdW1Gb3JGb250Rml6ZSwgZG9jdW1lbnQtPnNldHRp
bmdzKCkpOworfQorCitmbG9hdCBjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemVGb3JT
VkdJbmxpbmVUZXh0KGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZs
b2F0IHpvb21GYWN0b3IsIGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4g
Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNwZWNpZmllZFNpemUsIGlzQWJzb2x1
dGVTaXplLCB6b29tRmFjdG9yLCBEb05vdFVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXplLCBkb2N1
bWVudC0+c2V0dGluZ3MoKSk7Cit9CisKK2NvbnN0IGludCBmb250U2l6ZVRhYmxlTWF4ID0gMTY7
Citjb25zdCBpbnQgZm9udFNpemVUYWJsZU1pbiA9IDk7Citjb25zdCBpbnQgdG90YWxLZXl3b3Jk
cyA9IDg7CisKKy8vIFdpbklFL05hdjQgdGFibGUgZm9yIGZvbnQgc2l6ZXMuIERlc2lnbmVkIHRv
IG1hdGNoIHRoZSBsZWdhY3kgZm9udCBtYXBwaW5nIHN5c3RlbSBvZiBIVE1MLgorc3RhdGljIGNv
bnN0IGludCBxdWlya3NGb250U2l6ZVRhYmxlW2ZvbnRTaXplVGFibGVNYXggLSBmb250U2l6ZVRh
YmxlTWluICsgMV1bdG90YWxLZXl3b3Jkc10gPQoreworICAgICAgeyA5LCAgICA5LCAgICAgOSwg
ICAgIDksICAgIDExLCAgICAxNCwgICAgMTgsICAgIDI4IH0sCisgICAgICB7IDksICAgIDksICAg
ICA5LCAgICAxMCwgICAgMTIsICAgIDE1LCAgICAyMCwgICAgMzEgfSwKKyAgICAgIHsgOSwgICAg
OSwgICAgIDksICAgIDExLCAgICAxMywgICAgMTcsICAgIDIyLCAgICAzNCB9LAorICAgICAgeyA5
LCAgICA5LCAgICAxMCwgICAgMTIsICAgIDE0LCAgICAxOCwgICAgMjQsICAgIDM3IH0sCisgICAg
ICB7IDksICAgIDksICAgIDEwLCAgICAxMywgICAgMTYsICAgIDIwLCAgICAyNiwgICAgNDAgfSwg
Ly8gZml4ZWQgZm9udCBkZWZhdWx0ICgxMykKKyAgICAgIHsgOSwgICAgOSwgICAgMTEsICAgIDE0
LCAgICAxNywgICAgMjEsICAgIDI4LCAgICA0MiB9LAorICAgICAgeyA5LCAgIDEwLCAgICAxMiwg
ICAgMTUsICAgIDE3LCAgICAyMywgICAgMzAsICAgIDQ1IH0sCisgICAgICB7IDksICAgMTAsICAg
IDEzLCAgICAxNiwgICAgMTgsICAgIDI0LCAgICAzMiwgICAgNDggfSAvLyBwcm9wb3J0aW9uYWwg
Zm9udCBkZWZhdWx0ICgxNikKK307CisvLyBIVE1MICAgICAgIDEgICAgICAyICAgICAgMyAgICAg
IDQgICAgICA1ICAgICAgNiAgICAgIDcKKy8vIENTUyAgeHhzICAgeHMgICAgIHMgICAgICBtICAg
ICAgbCAgICAgeGwgICAgIHh4bAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy8vICAg
ICAgICAgICAgICAgICAgICAgIHVzZXIgcHJlZgorCisvLyBTdHJpY3QgbW9kZSB0YWJsZSBtYXRj
aGVzIE1hY0lFIGFuZCBNb3ppbGxhJ3Mgc2V0dGluZ3MgZXhhY3RseS4KK3N0YXRpYyBjb25zdCBp
bnQgc3RyaWN0Rm9udFNpemVUYWJsZVtmb250U2l6ZVRhYmxlTWF4IC0gZm9udFNpemVUYWJsZU1p
biArIDFdW3RvdGFsS2V5d29yZHNdID0KK3sKKyAgICAgIHsgOSwgICAgOSwgICAgIDksICAgICA5
LCAgICAxMSwgICAgMTQsICAgIDE4LCAgICAyNyB9LAorICAgICAgeyA5LCAgICA5LCAgICAgOSwg
ICAgMTAsICAgIDEyLCAgICAxNSwgICAgMjAsICAgIDMwIH0sCisgICAgICB7IDksICAgIDksICAg
IDEwLCAgICAxMSwgICAgMTMsICAgIDE3LCAgICAyMiwgICAgMzMgfSwKKyAgICAgIHsgOSwgICAg
OSwgICAgMTAsICAgIDEyLCAgICAxNCwgICAgMTgsICAgIDI0LCAgICAzNiB9LAorICAgICAgeyA5
LCAgIDEwLCAgICAxMiwgICAgMTMsICAgIDE2LCAgICAyMCwgICAgMjYsICAgIDM5IH0sIC8vIGZp
eGVkIGZvbnQgZGVmYXVsdCAoMTMpCisgICAgICB7IDksICAgMTAsICAgIDEyLCAgICAxNCwgICAg
MTcsICAgIDIxLCAgICAyOCwgICAgNDIgfSwKKyAgICAgIHsgOSwgICAxMCwgICAgMTMsICAgIDE1
LCAgICAxOCwgICAgMjMsICAgIDMwLCAgICA0NSB9LAorICAgICAgeyA5LCAgIDEwLCAgICAxMywg
ICAgMTYsICAgIDE4LCAgICAyNCwgICAgMzIsICAgIDQ4IH0gLy8gcHJvcG9ydGlvbmFsIGZvbnQg
ZGVmYXVsdCAoMTYpCit9OworLy8gSFRNTCAgICAgICAxICAgICAgMiAgICAgIDMgICAgICA0ICAg
ICAgNSAgICAgIDYgICAgICA3CisvLyBDU1MgIHh4cyAgIHhzICAgICBzICAgICAgbSAgICAgIGwg
ICAgIHhsICAgICB4eGwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB8CisvLyAgICAgICAg
ICAgICAgICAgICAgICB1c2VyIHByZWYKKworLy8gRm9yIHZhbHVlcyBvdXRzaWRlIHRoZSByYW5n
ZSBvZiB0aGUgdGFibGUsIHdlIHVzZSBUb2RkIEZhaHJuZXIncyBzdWdnZXN0ZWQgc2NhbGUKKy8v
IGZhY3RvcnMgZm9yIGVhY2gga2V5d29yZCB2YWx1ZS4KK3N0YXRpYyBjb25zdCBmbG9hdCBmb250
U2l6ZUZhY3RvcnNbdG90YWxLZXl3b3Jkc10gPSB7IDAuNjBmLCAwLjc1ZiwgMC44OWYsIDEuMGYs
IDEuMmYsIDEuNWYsIDIuMGYsIDMuMGYgfTsKKworZmxvYXQgZm9udFNpemVGb3JLZXl3b3JkKHVu
c2lnbmVkIGtleXdvcmRJRCwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplLCBjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQt
PnNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgcmV0dXJuIDEuMGY7CisK
KyAgICBib29sIHF1aXJrc01vZGUgPSBkb2N1bWVudC0+aW5RdWlya3NNb2RlKCk7CisgICAgaW50
IG1lZGl1bVNpemUgPSBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplID8gc2V0dGluZ3MtPmRlZmF1
bHRGaXhlZEZvbnRTaXplKCkgOiBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCk7CisgICAgaWYg
KG1lZGl1bVNpemUgPj0gZm9udFNpemVUYWJsZU1pbiAmJiBtZWRpdW1TaXplIDw9IGZvbnRTaXpl
VGFibGVNYXgpIHsKKyAgICAgICAgLy8gTG9vayB1cCB0aGUgZW50cnkgaW4gdGhlIHRhYmxlLgor
ICAgICAgICBpbnQgcm93ID0gbWVkaXVtU2l6ZSAtIGZvbnRTaXplVGFibGVNaW47CisgICAgICAg
IGludCBjb2wgPSAoa2V5d29yZElEIC0gQ1NTVmFsdWVYeFNtYWxsKTsKKyAgICAgICAgcmV0dXJu
IHF1aXJrc01vZGUgPyBxdWlya3NGb250U2l6ZVRhYmxlW3Jvd11bY29sXSA6IHN0cmljdEZvbnRT
aXplVGFibGVbcm93XVtjb2xdOworICAgIH0KKworICAgIC8vIFZhbHVlIGlzIG91dHNpZGUgdGhl
IHJhbmdlIG9mIHRoZSB0YWJsZS4gQXBwbHkgdGhlIHNjYWxlIGZhY3RvciBpbnN0ZWFkLgorICAg
IGZsb2F0IG1pbkxvZ2ljYWxTaXplID0gbWF4KHNldHRpbmdzLT5taW5pbXVtTG9naWNhbEZvbnRT
aXplKCksIDEpOworICAgIHJldHVybiBtYXgoZm9udFNpemVGYWN0b3JzW2tleXdvcmRJRCAtIENT
U1ZhbHVlWHhTbWFsbF0gKiBtZWRpdW1TaXplLCBtaW5Mb2dpY2FsU2l6ZSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW50IGZpbmROZWFyZXN0TGVnYWN5Rm9udFNpemUoaW50
IHBpeGVsRm9udFNpemUsIGNvbnN0IFQqIHRhYmxlLCBpbnQgbXVsdGlwbGllcikKK3sKKyAgICAv
LyBJZ25vcmUgdGFibGVbMF0gYmVjYXVzZSB4eC1zbWFsbCBkb2VzIG5vdCBjb3JyZXNwb25kIHRv
IGFueSBsZWdhY3kgZm9udCBzaXplLgorICAgIGZvciAoaW50IGkgPSAxOyBpIDwgdG90YWxLZXl3
b3JkcyAtIDE7IGkrKykgeworICAgICAgICBpZiAocGl4ZWxGb250U2l6ZSAqIDIgPCAodGFibGVb
aV0gKyB0YWJsZVtpICsgMV0pICogbXVsdGlwbGllcikKKyAgICAgICAgICAgIHJldHVybiBpOwor
ICAgIH0KKyAgICByZXR1cm4gdG90YWxLZXl3b3JkcyAtIDE7Cit9CisKK2ludCBsZWdhY3lGb250
U2l6ZUZvclBpeGVsU2l6ZShpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRVc2VGaXhlZERl
ZmF1bHRTaXplLCBjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgU2V0dGluZ3MqIHNl
dHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5ncykKKyAgICAg
ICAgcmV0dXJuIDE7CisKKyAgICBib29sIHF1aXJrc01vZGUgPSBkb2N1bWVudC0+aW5RdWlya3NN
b2RlKCk7CisgICAgaW50IG1lZGl1bVNpemUgPSBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplID8g
c2V0dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkgOiBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRT
aXplKCk7CisgICAgaWYgKG1lZGl1bVNpemUgPj0gZm9udFNpemVUYWJsZU1pbiAmJiBtZWRpdW1T
aXplIDw9IGZvbnRTaXplVGFibGVNYXgpIHsKKyAgICAgICAgaW50IHJvdyA9IG1lZGl1bVNpemUg
LSBmb250U2l6ZVRhYmxlTWluOworICAgICAgICByZXR1cm4gZmluZE5lYXJlc3RMZWdhY3lGb250
U2l6ZTxpbnQ+KHBpeGVsRm9udFNpemUsIHF1aXJrc01vZGUgPyBxdWlya3NGb250U2l6ZVRhYmxl
W3Jvd10gOiBzdHJpY3RGb250U2l6ZVRhYmxlW3Jvd10sIDEpOworICAgIH0KKworICAgIHJldHVy
biBmaW5kTmVhcmVzdExlZ2FjeUZvbnRTaXplPGZsb2F0PihwaXhlbEZvbnRTaXplLCBmb250U2l6
ZUZhY3RvcnMsIG1lZGl1bVNpemUpOworfQorCit9Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTQgQEAKKyAgICAvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zX2gKKyNkZWZpbmUgU3R5bGVG
b250U2l6ZUZ1bmN0aW9uc19oCisKKyNpbmNsdWRlICJGb250T3JpZW50YXRpb24uaCIKKyNpbmNs
dWRlICJOb25DSktHbHlwaE9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFJlbmRl
clN0eWxlOworY2xhc3MgU2V0dGluZ3M7CisKK25hbWVzcGFjZSBTdHlsZSB7CisKK2Zsb2F0IGNv
bXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShmbG9hdCBzcGVjaWZpZWRTaXplLCBib29s
IGlzQWJzb2x1dGVTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcywgY29uc3QgUmVuZGVyU3R5bGUq
LCBjb25zdCBEb2N1bWVudCopOworZmxvYXQgY29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRT
aXplRm9yU1ZHSW5saW5lVGV4dChmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIGlzQWJzb2x1dGVT
aXplLCBmbG9hdCB6b29tRmFjdG9yLCBjb25zdCBEb2N1bWVudCopOworCisvLyBHaXZlbiBhIENT
UyBrZXl3b3JkIGlkIGluIHRoZSByYW5nZSAoQ1NTVmFsdWVYeFNtYWxsIHRvIENTU1ZhbHVlV2Vi
a2l0WHh4TGFyZ2UpLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisvLyB0aGUgY29ycmVjdCBm
b250IHNpemUgc2NhbGVkIHJlbGF0aXZlIHRvIHRoZSB1c2VyJ3MgZGVmYXVsdCAobWVkaXVtKS4K
K2Zsb2F0IGZvbnRTaXplRm9yS2V5d29yZCh1bnNpZ25lZCBrZXl3b3JkSUQsIGJvb2wgc2hvdWxk
VXNlRml4ZWREZWZhdWx0U2l6ZSwgY29uc3QgRG9jdW1lbnQqKTsKKworLy8gR2l2ZW4gYSBmb250
IHNpemUgaW4gcGl4ZWwsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gbGVnYWN5IGZvbnQgc2l6
ZSBiZXR3ZWVuIDEgYW5kIDcuCitpbnQgbGVnYWN5Rm9udFNpemVGb3JQaXhlbFNpemUoaW50IHBp
eGVsRm9udFNpemUsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSwgY29uc3QgRG9jdW1l
bnQqKTsKKworfQorfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
UmVzb2x2ZUZvckRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEpl
bnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNo
b2xhcyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFBy
b3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBF
cmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNo
bW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oIgorCisjaW5jbHVkZSAiQ1NTRm9udFNl
bGVjdG9yLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCisjaW5j
bHVkZSAiTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCisj
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBTdHlsZSB7CisKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc29sdmVGb3JEb2N1bWVu
dChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQtPmZyYW1lKCk7CisKKyAgICAvLyBIVE1MNSBzdGF0ZXMgdGhhdCBzZWFtbGVzcyBpZnJhbWVz
IHNob3VsZCByZXBsYWNlIGRlZmF1bHQgQ1NTIHZhbHVlcworICAgIC8vIHdpdGggdmFsdWVzIGlu
aGVyaXRlZCBmcm9tIHRoZSBjb250YWluaW5nIGlmcmFtZSBlbGVtZW50LiBIb3dldmVyLAorICAg
IC8vIHNvbWUgdmFsdWVzIChzdWNoIGFzIHRoZSBjYXNlIG9mIGRlc2lnbk1vZGUgPSAib24iKSBz
dGlsbCBuZWVkIHRvCisgICAgLy8gYmUgc2V0IGJ5IHRoaXMgImRvY3VtZW50IHN0eWxlIi4KKyAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IGRvY3VtZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRl
KCk7CisgICAgYm9vbCBzZWFtbGVzc1dpdGhQYXJlbnQgPSBkb2N1bWVudC0+c2hvdWxkRGlzcGxh
eVNlYW1sZXNzbHlXaXRoUGFyZW50KCk7CisgICAgaWYgKHNlYW1sZXNzV2l0aFBhcmVudCkgewor
ICAgICAgICBSZW5kZXJTdHlsZSogaWZyYW1lU3R5bGUgPSBkb2N1bWVudC0+c2VhbWxlc3NQYXJl
bnRJRnJhbWUoKS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgaWYgKGlmcmFtZVN0eWxlKQorICAg
ICAgICAgICAgZG9jdW1lbnRTdHlsZS0+aW5oZXJpdEZyb20oaWZyYW1lU3R5bGUpOworICAgIH0K
KworICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGljaCB2YWx1ZXMgYmVsb3cgd2Ugd2Fu
dCB0byBvdmVycmlkZSBpbiB0aGUgc2VhbWxlc3MgY2FzZSEKKyAgICBkb2N1bWVudFN0eWxlLT5z
ZXREaXNwbGF5KEJMT0NLKTsKKyAgICBpZiAoIXNlYW1sZXNzV2l0aFBhcmVudCkgeworICAgICAg
ICBkb2N1bWVudFN0eWxlLT5zZXRSVExPcmRlcmluZyhkb2N1bWVudC0+dmlzdWFsbHlPcmRlcmVk
KCkgPyBWaXN1YWxPcmRlciA6IExvZ2ljYWxPcmRlcik7CisgICAgICAgIGRvY3VtZW50U3R5bGUt
PnNldFpvb20oZnJhbWUgJiYgIWRvY3VtZW50LT5wcmludGluZygpID8gZnJhbWUtPnBhZ2Vab29t
RmFjdG9yKCkgOiAxKTsKKyAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0UGFnZVNjYWxlVHJhbnNm
b3JtKGZyYW1lID8gZnJhbWUtPmZyYW1lU2NhbGVGYWN0b3IoKSA6IDEpOworICAgICAgICBkb2N1
bWVudFN0eWxlLT5zZXRMb2NhbGUoZG9jdW1lbnQtPmNvbnRlbnRMYW5ndWFnZSgpKTsKKyAgICB9
CisgICAgLy8gVGhpcyBvdmVycmlkZXMgYW55IC13ZWJraXQtdXNlci1tb2RpZnkgaW5oZXJpdGVk
IGZyb20gdGhlIHBhcmVudCBpZnJhbWUuCisgICAgZG9jdW1lbnRTdHlsZS0+c2V0VXNlck1vZGlm
eShkb2N1bWVudC0+aW5EZXNpZ25Nb2RlKCkgPyBSRUFEX1dSSVRFIDogUkVBRF9PTkxZKTsKKwor
ICAgIEVsZW1lbnQqIGRvY0VsZW1lbnQgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7Cisg
ICAgUmVuZGVyT2JqZWN0KiBkb2NFbGVtZW50UmVuZGVyZXIgPSBkb2NFbGVtZW50ID8gZG9jRWxl
bWVudC0+cmVuZGVyZXIoKSA6IDA7CisgICAgaWYgKGRvY0VsZW1lbnRSZW5kZXJlcikgeworICAg
ICAgICAvLyBVc2UgdGhlIGRpcmVjdGlvbiBhbmQgd3JpdGluZy1tb2RlIG9mIHRoZSBib2R5IHRv
IHNldCB0aGUKKyAgICAgICAgLy8gdmlld3BvcnQncyBkaXJlY3Rpb24gYW5kIHdyaXRpbmctbW9k
ZSB1bmxlc3MgdGhlIHByb3BlcnR5IGlzIHNldCBvbiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KKyAg
ICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gYm9keSwgdGhlbiB1c2UgdGhlIGRvY3VtZW50IGVsZW1l
bnQuCisgICAgICAgIFJlbmRlck9iamVjdCogYm9keVJlbmRlcmVyID0gZG9jdW1lbnQtPmJvZHko
KSA/IGRvY3VtZW50LT5ib2R5KCktPnJlbmRlcmVyKCkgOiAwOworICAgICAgICBpZiAoYm9keVJl
bmRlcmVyICYmICFkb2N1bWVudC0+d3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCgpKQor
ICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0V3JpdGluZ01vZGUoYm9keVJlbmRlcmVyLT5z
dHlsZSgpLT53cml0aW5nTW9kZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZG9jdW1l
bnRTdHlsZS0+c2V0V3JpdGluZ01vZGUoZG9jRWxlbWVudFJlbmRlcmVyLT5zdHlsZSgpLT53cml0
aW5nTW9kZSgpKTsKKyAgICAgICAgaWYgKGJvZHlSZW5kZXJlciAmJiAhZG9jdW1lbnQtPmRpcmVj
dGlvblNldE9uRG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5z
ZXREaXJlY3Rpb24oYm9keVJlbmRlcmVyLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldERpcmVjdGlvbihkb2NFbGVtZW50
UmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpKTsKKyAgICB9CisKKyAgICBpZiAoZnJhbWUp
IHsKKyAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKSkgewor
ICAgICAgICAgICAgY29uc3QgUGFnaW5hdGlvbiYgcGFnaW5hdGlvbiA9IGZyYW1lVmlldy0+cGFn
aW5hdGlvbigpOworICAgICAgICAgICAgaWYgKHBhZ2luYXRpb24ubW9kZSAhPSBQYWdpbmF0aW9u
OjpVbnBhZ2luYXRlZCkgeworICAgICAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldENvbHVt
blN0eWxlc0Zyb21QYWdpbmF0aW9uTW9kZShwYWdpbmF0aW9uLm1vZGUpOworICAgICAgICAgICAg
ICAgIGRvY3VtZW50U3R5bGUtPnNldENvbHVtbkdhcChwYWdpbmF0aW9uLmdhcCk7CisgICAgICAg
ICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh2aWV3LT5oYXNDb2x1bW5zKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICB2aWV3LT51cGRhdGVDb2x1bW5JbmZvRnJvbVN0eWxlKGRvY3VtZW50U3R5
bGUuZ2V0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFNlYW1sZXNzIGlmcmFtZXMgd2FudCB0byBpbmhlcml0IHRoZWlyIGZv
bnQgZnJvbSB0aGVpciBwYXJlbnQgaWZyYW1lLCBzbyBlYXJseSByZXR1cm4gYmVmb3JlIHNldHRp
bmcgdGhlIGZvbnQuCisgICAgaWYgKHNlYW1sZXNzV2l0aFBhcmVudCkKKyAgICAgICAgcmV0dXJu
IGRvY3VtZW50U3R5bGUucmVsZWFzZSgpOworCisgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbjsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29k
ZUZvckZvbnRTZWxlY3Rpb24oZG9jdW1lbnRTdHlsZS0+bG9jYWxlKCkpKTsKKyAgICBpZiAoU2V0
dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCkpIHsKKyAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGRvY3VtZW50LT5wcmludGluZygpIHx8ICFzZXR0
aW5ncy0+c2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQoKSk7CisgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsK
KyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFyZEZvbnQgPSBzZXR0aW5ncy0+c3Rh
bmRhcmRGb250RmFtaWx5KGZvbnREZXNjcmlwdGlvbi5zY3JpcHQoKSk7CisgICAgICAgIGlmICgh
c3RhbmRhcmRGb250LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7CisgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KHN0YW5kYXJkRm9udCk7CisgICAgICAg
IH0KKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVt
IC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7CisgICAgICAgIGludCBzaXplID0gZm9udFNpemVGb3JL
ZXl3b3JkKENTU1ZhbHVlTWVkaXVtLCBmYWxzZSwgZG9jdW1lbnQpOworICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKKyAgICAgICAgYm9vbCB1c2VTVkdab29t
UnVsZXMgPSBkb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpOworICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKGNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShzaXpl
LCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzLCBkb2N1
bWVudFN0eWxlLmdldCgpLCBkb2N1bWVudCkpOworICAgIH0gZWxzZQorICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQtPnByaW50aW5nKCkpOworCisgICAg
Rm9udE9yaWVudGF0aW9uIGZvbnRPcmllbnRhdGlvbjsKKyAgICBOb25DSktHbHlwaE9yaWVudGF0
aW9uIGdseXBoT3JpZW50YXRpb247CisgICAgZG9jdW1lbnRTdHlsZS0+Z2V0Rm9udEFuZEdseXBo
T3JpZW50YXRpb24oZm9udE9yaWVudGF0aW9uLCBnbHlwaE9yaWVudGF0aW9uKTsKKyAgICBmb250
RGVzY3JpcHRpb24uc2V0T3JpZW50YXRpb24oZm9udE9yaWVudGF0aW9uKTsKKyAgICBmb250RGVz
Y3JpcHRpb24uc2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihnbHlwaE9yaWVudGF0aW9uKTsKKwor
ICAgIGRvY3VtZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwor
CisgICAgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IgPSBkb2N1bWVudC0+c3R5bGVSZXNv
bHZlcklmRXhpc3RzKCkgPyBkb2N1bWVudC0+c3R5bGVSZXNvbHZlcklmRXhpc3RzKCktPmZvbnRT
ZWxlY3RvcigpIDogMDsKKyAgICBkb2N1bWVudFN0eWxlLT5mb250KCkudXBkYXRlKGZvbnRTZWxl
Y3Rvcik7CisKKyAgICByZXR1cm4gZG9jdW1lbnRTdHlsZS5yZWxlYXNlKCk7Cit9CisKK30KK30K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRv
Y3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3R5bGVSZXNvbHZlRm9yRG9j
dW1lbnRfaAorI2RlZmluZSBTdHlsZVJlc29sdmVGb3JEb2N1bWVudF9oCisKKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU0ZvbnRT
ZWxlY3RvcjsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgUmVuZGVyU3R5bGU7CisKK25hbWVzcGFj
ZSBTdHlsZSB7CisKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc29sdmVGb3JEb2N1bWVudChj
b25zdCBEb2N1bWVudCopOworCit9Cit9CisKKyNlbmRpZgo=
</data>
<flag name="commit-queue"
          id="230362"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208443</attachid>
            <date>2013-08-09 11:41:45 -0700</date>
            <delta_ts>2013-08-09 12:07:06 -0700</delta_ts>
            <desc>build files and fixes</desc>
            <filename>move-styleresolver-statics-4.patch</filename>
            <type>text/plain</type>
            <size>64100</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Mzg5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDEzLTA4LTA5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIHN0YXRpYyBTdHlsZVJl
c29sdmVyIGZ1bmN0aW9ucyB0byBTdHlsZSBuYW1lc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTYyOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gTW92ZSBzdGF0aWMgZm9udCBzaXplIGNvbXB1
dGF0aW9uIGZ1bmN0aW9ucyB0byBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgvLmNwcAorICAgICAg
ICAtIE1vdmUgU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JEb2N1bWVudCB0byBTdHlsZTo6cmVzb2x2
ZUZvckRvY3VtZW50CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRGYW1pbHk6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250RmFtaWx5OjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlJbml0aWFsVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseVZhbHVlKToK
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0Zv
ck9yaWVudGF0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JH
ZW5lcmljRmFtaWx5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Omlu
aXRpYWxpemVGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0
Rm9udFNpemUpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6
CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
bGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUpOgorICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6cHJvY2Vzcyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN0eWxlOjpnZXRGb250QW5kR2x5cGhPcmllbnRhdGlvbik6CisgICAgICAgIAor
ICAgICAgICAgICAgTW92ZWQgZnJvbSBTdHlsZVJlc29sdmVyLmNwcCBzbyBpdCBjYW4gYmUgdXNl
ZCBieSBTdHlsZTo6cmVzb2x2ZUZvckRvY3VtZW50KCkuCisgICAgICAgICAgICBUaGlzIGRlcGVu
ZHMgb24gUmVuZGVyU3R5bGUgb25seSBzbyBpdCBpcyBhIG5hdHVyYWwgbWVtYmVyIGZ1bmN0aW9u
LgorCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR0lubGluZVRleHQ6OmNvbXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUpOgorICAg
ICAgICAqIHN0eWxlL1N0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemVGb3JTVkdJbmxpbmVUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OmxlZ2FjeUZvbnRTaXplRm9yUGl4ZWxTaXplKToKKyAgICAgICAg
KiBzdHlsZS9TdHlsZUZvbnRTaXplRnVuY3Rpb25zLmg6IEFkZGVkLgorICAgICAgICAqIHN0eWxl
L1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6cmVzb2x2ZUZvckRvY3VtZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVG
b3JEb2N1bWVudC5oOiBBZGRlZC4KKwogMjAxMy0wOC0wOCAgQWxsYW4gU2FuZGZlbGQgSmVuc2Vu
ICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dLMl0gQ29tcG9zaXRl
ZCBhbmQgdHJhbnNmb3JtZWQgbGlua3MgYXNzZXJ0cyBpbiB0YXAgaGlnaGxpZ2h0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTUzODkzKQorKysgU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIzMjcsNiArMjMyNyw4IEBAIHNldChXZWJD
b3JlX1NPVVJDRVMKICAgICBzdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKICAgICBzdG9y
YWdlL1N0b3JhZ2VUcmFja2VyLmNwcAogCisgICAgc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9u
cy5jcHAKKyAgICBzdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAKICAgICBzdHlsZS9T
dHlsZVJlc29sdmVUcmVlLmNwcAogCiAgICAgc3ZnL0NvbG9yRGlzdGFuY2UuY3BwCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1Mzg5MykKKysrIFNvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3MTUsNiArNDcx
NSwxMCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVRyYWNrZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VUcmFja2Vy
LmggXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBcCisJ
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlRm9udFNpemVGdW5jdGlvbnMuaCBcCisJU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVJlc29sdmVUcmVlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZl
VHJlZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9XZWJDb3JlUHJlZml4LmggXApJbmRleDogU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCShyZXZpc2lvbiAxNTM4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjgxLDYgKzEyODEsOCBAQCBTT1VSQ0VTICs9IFwKICAgICBzdG9yYWdl
L1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAgXAogICAgIHN0b3JhZ2UvU3RvcmFnZVN0cmF0ZWd5LmNw
cCBcCiAgICAgc3RvcmFnZS9TdG9yYWdlVHJhY2tlci5jcHAgXAorICAgIHN0eWxlL1N0eWxlRm9u
dFNpemVGdW5jdGlvbnMuY3BwIFwKKyAgICBzdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5j
cHAgXAogICAgIHN0eWxlL1N0eWxlUmVzb2x2ZVRyZWUuY3BwIFwKICAgICB0ZXN0aW5nL0ludGVy
bmFscy5jcHAgXAogICAgIHRlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAgXApAQCAtMjYwMSw2
ICsyNjAzLDggQEAgSEVBREVSUyArPSBcCiAgICAgc3RvcmFnZS9TdG9yYWdlVGhyZWFkLmggXAog
ICAgIHN0b3JhZ2UvU3RvcmFnZVRyYWNrZXIuaCBcCiAgICAgc3RvcmFnZS9TdG9yYWdlVHJhY2tl
ckNsaWVudC5oIFwKKyAgICBzdHlsZS9TdHlsZUZvbnRTaXplRnVuY3Rpb25zLmggXAorICAgIHN0
eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggXAogICAgIHN0eWxlL1N0eWxlUmVzb2x2ZVRy
ZWUuaCBcCiAgICAgc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oIFwKICAgICBzdmcv
YW5pbWF0aW9uL1NNSUxUaW1lLmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTM4OTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzYwNyw2ICsxNzYwNyw4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0
b3JhZ2VTeW5jTWFuYWdlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdG9y
YWdlXFN0b3JhZ2VUaHJlYWQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3Rv
cmFnZVxTdG9yYWdlVHJhY2tlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxz
dHlsZVxTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHN0eWxlXFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHN0eWxlXFN0eWxlUmVzb2x2ZVRyZWUuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnJpZGdlXGpzY1xCcmlkZ2VKU0MuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnJpZGdlXGNcY19jbGFzcy5jcHAiIC8+CkBAIC0yMDkyNSw2ICsy
MDkyNyw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3JhZ2VTeW5j
TWFuYWdlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3RvcmFnZVxTdG9yYWdl
VGhyZWFkLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdG9yYWdlXFN0b3JhZ2VU
cmFja2VyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdHlsZVxTdHlsZUZvbnRT
aXplRnVuY3Rpb25zLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdHlsZVxTdHls
ZVJlc29sdmVGb3JEb2N1bWVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3R5
bGVcU3R5bGVSZXNvbHZlVHJlZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnJp
ZGdlXEJyaWRnZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnJpZGdlXGpzY1xC
cmlkZ2VKU0MuaCIgLz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1Mzg5MykKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTU0
NCw2ICs1NTQ0LDEwIEBACiAJCUU0QzE3ODlCMEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rv
ckxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
QzE3ODk2MEVFNjkwMzgwMDgyNEQ2OSAvKiBDU1NTZWxlY3Rvckxpc3QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEMyNzk1ODBDRjk3NDE5MDBF
OTdCOTggLyogUmVuZGVyTWVkaWEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTRDMjc5NTYwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNw
cCAqLzsgfTsKIAkJRTRDMjc5NTkwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMyNzk1NzBDRjk3
NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCAqLzsgfTsKKwkJRTRENThFQjQxN0I0REJEQzAw
Q0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDU4RUIyMTdCNERCREMwMENCRENBOCAvKiBT
dHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAgKi87IH07CisJCUU0RDU4RUI1MTdCNERCREMwMENC
RENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENThFQjMxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxl
UmVzb2x2ZUZvckRvY3VtZW50LmggKi87IH07CisJCUU0RDU4RUI4MTdCNEVEODkwMENCRENBOCAv
KiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDU4RUI2MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRT
aXplRnVuY3Rpb25zLmNwcCAqLzsgfTsKKwkJRTRENThFQjkxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0
eWxlRm9udFNpemVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0RDU4RUI3MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVu
Y3Rpb25zLmggKi87IH07CiAJCUU0RDY4Nzc3MEVEN0FFM0QwMDZFQTk3OCAvKiBQdXJnZWFibGVC
dWZmZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTRENjg3NzYwRUQ3QUUzRDAwNkVBOTc4IC8qIFB1cmdlYWJsZUJ1ZmZlck1hYy5jcHAgKi87
IH07CiAJCUU0RDY4Nzc5MEVEN0FFNEYwMDZFQTk3OCAvKiBQdXJnZWFibGVCdWZmZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDY4Nzc4MEVEN0FF
NEYwMDZFQTk3OCAvKiBQdXJnZWFibGVCdWZmZXIuaCAqLzsgfTsKIAkJRTRERUFBMTcxN0E5M0RD
MzAwMEUwNDMwIC8qIFN0eWxlUmVzb2x2ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRERUFBMTUxN0E5M0RDMzAwMEUwNDMwIC8qIFN0eWxl
UmVzb2x2ZVRyZWUuY3BwICovOyB9OwpAQCAtMTIzNjIsNiArMTIzNjYsMTAgQEAKIAkJRTRDMTc4
OTYwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDU1NTZWxlY3Rvckxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTRDMjc5NTYwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1lZGlhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRl
ck1lZGlhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1lZGlhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RDU4RUIyMTdCNERCREMwMENCRENBOCAv
KiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUU0RDU4RUIzMTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JE
b2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVJlc29sdmVG
b3JEb2N1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEQ1OEVCNjE3QjRF
RDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRENThFQjcxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxl
Rm9udFNpemVGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5
bGVGb250U2l6ZUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEQ2
ODc3NjBFRDdBRTNEMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1cmdlYWJsZUJ1ZmZlck1hYy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDY4Nzc4MEVEN0FFNEYwMDZFQTk3OCAvKiBQdXJn
ZWFibGVCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHVyZ2VhYmxl
QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0REVBQTE1MTdBOTNEQzMw
MDBFMDQzMCAvKiBTdHlsZVJlc29sdmVUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0eWxlUmVzb2x2ZVRyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTk2MDksNiArMTk2MTcsMTAgQEAKIAkJRTQ3NjNENEExN0IyNzA0OTAwRDM1MjA2
IC8qIHN0eWxlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQlFNEQ1OEVCNjE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAg
Ki8sCisJCQkJRTRENThFQjcxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlv
bnMuaCAqLywKKwkJCQlFNEQ1OEVCMjE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9y
RG9jdW1lbnQuY3BwICovLAorCQkJCUU0RDU4RUIzMTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJl
c29sdmVGb3JEb2N1bWVudC5oICovLAogCQkJCUU0REVBQTE1MTdBOTNEQzMwMDBFMDQzMCAvKiBT
dHlsZVJlc29sdmVUcmVlLmNwcCAqLywKIAkJCQlFNERFQUExNjE3QTkzREMzMDAwRTA0MzAgLyog
U3R5bGVSZXNvbHZlVHJlZS5oICovLAogCQkJKTsKQEAgLTIyMjQyLDYgKzIyMjU0LDcgQEAKIAkJ
CQk2NURGMzIzQTA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNHcmFkaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjVERjMyM0MwOUQxREU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzUGF0dGVybi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNjVERjMyM0MwOUQxREU2NTAwMUJFMzI1IC8qIEpTQ2FudmFz
UHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0RDU4RUI1MTdCNERCREMwMENCRENBOCAvKiBT
dHlsZVJlc29sdmVGb3JEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFRUQxNDMxMDUx
OTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDlFRUQxNDUxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Y5QjdBMTBCQTYwMzI2MDA4NTQwNjQgLyogSlND
REFUQVNlY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjM4MzcsNiArMjM4NTAsNyBAQAogCQkJ
CUJDOEJGMTUxMTA1ODEzQkYwMEE0MEEwNyAvKiBVc2VyU3R5bGVTaGVldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM4QkYxNUExMDU4MTQxODAwQTQwQTA3IC8qIFVzZXJTdHlsZVNoZWV0VHlwZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDREYzMTdDMTFGOEQ2ODMwMDNDNUJGOCAvKiBVc2VyVHlw
aW5nR2VzdHVyZUluZGljYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRENThFQjkxN0I0RUQ4
OTAwQ0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFGQUZCRjE5MTVBNUZBNzQwMDA4M0EyMCAvKiBVVElVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJFM0JCRjA4MTE2MkRBMTEwMEI5NDA5QSAvKiBVVUlELmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MEQzMjg1ODE2M0IzMTNGMDAxNjExMUUgLyogVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MDQzLDYgKzI1MDU3LDcgQEAKIAkJCQk0OUVD
RUI2RjE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBOENGRjA0RDBBMTU0RjA5MDAwQTQyMzQgLyogRml4ZWRUYWJsZUxheW91dC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMjc1MzU2ODBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2lu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNEQ1OEVCODE3QjRFRDg5MDBDQkRDQTggLyogU3R5
bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkUyN0M5RjBCMEYy
QjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUz
NTU5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjI3NTM1NzgwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRNYWMubW0gaW4gU291cmNl
cyAqLywKQEAgLTI2OTc3LDYgKzI2OTkyLDcgQEAKIAkJCQlBN0Q2QjM0QTBGNjExMDQ1MDBCNzlG
RDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFNDM0NjU0
MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEI5MDU2RjgwRjI2ODVGMzAwOTVGRjZBIC8qIFdvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRTRENThFQjQxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2
ZUZvckRvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QUFCRDJDMTRGQTA5RDUwMDc0
NTdBRSAvKiBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5MzMwOUUyMzA5OUU2NDkyMDA1NkU1ODEgLyogV3JhcENvbnRlbnRzSW5EdW1teVNw
YW5Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MzNDN0NDMEEyQ0YwNzQwMEQ1NzY2
NCAvKiBYTGlua05hbWVzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAkocmV2aXNpb24gMTUzODkzKQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdHlsZUZv
bnRTaXplRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtNjc4LDcgKzY3OSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBzaXplIHRvIGFjY291bnQgZm9y
IHRoZSBnZW5lcmljIGZhbWlseSBjaGFuZ2UgZnJvbSBtb25vc3BhY2UgdG8gbm9uLW1vbm9zcGFj
ZS4KICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNj
cmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHN0eWxlUmVzb2x2ZXItPmZvbnRTaXplRm9y
S2V5d29yZChzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250
RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsIGZhbHNlKSk7CisgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIFN0eWxlOjpmb250U2l6ZUZv
cktleXdvcmQoQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkg
LSAxLCBmYWxzZSwgc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSkpOwogICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShpbml0aWFsRGVzYy5nZW5lcmljRmFtaWx5KCkpOwog
ICAgICAgICBpZiAoIWluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKGluaXRpYWxEZXNjLmZhbWlsaWVzKCkp
OwpAQCAtNzUyLDcgKzc1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgZm9udERlc2NyaXB0aW9uLmFk
b3B0RmFtaWxpZXMoZmFtaWxpZXMpOwogCiAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5
d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpICE9IG9s
ZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktl
eXdvcmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERl
c2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNp
emUpKTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlw
dGlvbiwgU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVz
Y3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6
ZSwgc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSkpOwogCiAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KQEAgLTc5Niw3ICs3
OTcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7CiAgICAgICAgIEZv
bnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5m
b250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZmxvYXQgc2l6ZSA9IHN0eWxlUmVzb2x2ZXItPmZv
bnRTaXplRm9yS2V5d29yZChzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1
bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CisgICAgICAgIGZsb2F0
IHNpemUgPSBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlTWVkaXVtLCBmb250RGVz
Y3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgp
KTsKIAogICAgICAgICBpZiAoc2l6ZSA8IDApCiAgICAgICAgICAgICByZXR1cm47CkBAIC04MzYs
NyArODM3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVhMYXJnZToKICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgogICAgICAgICAgICAgY2FzZSBDU1NWYWx1
ZVdlYmtpdFh4eExhcmdlOgotICAgICAgICAgICAgICAgIHNpemUgPSBzdHlsZVJlc29sdmVyLT5m
b250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgaWRlbnQsIGZvbnRE
ZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpOworICAgICAgICAgICAgICAgIHNpemUg
PSBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4
ZWREZWZhdWx0U2l6ZSgpLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpKTsKICAgICAgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoaWRlbnQgLSBDU1NWYWx1ZVh4U21h
bGwgKyAxKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVMYXJnZXI6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCShyZXZpc2lv
biAxNTM4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNSw2ICsxMDUsNyBAQAogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNp
bmNsdWRlICJTaGFkb3dWYWx1ZS5oIgogI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIKKyNp
bmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVHZW5lcmF0
ZWRJbWFnZS5oIgogI2luY2x1ZGUgIlN0eWxlUGVuZGluZ0ltYWdlLmgiCiAjaW5jbHVkZSAiU3R5
bGVQcm9wZXJ0eVNldC5oIgpAQCAtNzgyLDEzNyArNzgzLDYgQEAgUmVuZGVyU3R5bGUqIFN0eWxl
UmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZAogICAgIHJldHVybiBzaGFyZUVsZW1lbnQtPnJlbmRlclN0
eWxlKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldEZvbnRBbmRHbHlwaE9yaWVudGF0aW9uKGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSwgRm9udE9yaWVudGF0aW9uJiBmb250T3JpZW50YXRpb24sIE5v
bkNKS0dseXBoT3JpZW50YXRpb24mIGdseXBoT3JpZW50YXRpb24pCi17Ci0gICAgaWYgKHN0eWxl
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgIGZvbnRPcmllbnRhdGlvbiA9
IEhvcml6b250YWw7Ci0gICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVu
dGF0aW9uVmVydGljYWxSaWdodDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN3aXRj
aCAoc3R5bGUtPnRleHRPcmllbnRhdGlvbigpKSB7Ci0gICAgY2FzZSBUZXh0T3JpZW50YXRpb25W
ZXJ0aWNhbFJpZ2h0OgotICAgICAgICBmb250T3JpZW50YXRpb24gPSBWZXJ0aWNhbDsKLSAgICAg
ICAgZ2x5cGhPcmllbnRhdGlvbiA9IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUZXh0T3JpZW50YXRpb25VcHJpZ2h0OgotICAg
ICAgICBmb250T3JpZW50YXRpb24gPSBWZXJ0aWNhbDsKLSAgICAgICAgZ2x5cGhPcmllbnRhdGlv
biA9IE5vbkNKS0dseXBoT3JpZW50YXRpb25VcHJpZ2h0OwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBUZXh0T3JpZW50YXRpb25TaWRld2F5czoKLSAgICAgICAgaWYgKHN0eWxlLT53cml0aW5n
TW9kZSgpID09IExlZnRUb1JpZ2h0V3JpdGluZ01vZGUpIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBtYXAgdG8gc2lkZXdheXMtbGVmdCwgd2hpY2ggaXMgbm90IHN1cHBvcnRl
ZCB5ZXQuCi0gICAgICAgICAgICBmb250T3JpZW50YXRpb24gPSBWZXJ0aWNhbDsKLSAgICAgICAg
ICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdo
dDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBmb250T3JpZW50YXRp
b24gPSBIb3Jpem9udGFsOwotICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5cGhP
cmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFRleHRP
cmllbnRhdGlvblNpZGV3YXlzUmlnaHQ6Ci0gICAgICAgIGZvbnRPcmllbnRhdGlvbiA9IEhvcml6
b250YWw7Ci0gICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0aW9u
VmVydGljYWxSaWdodDsKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBmb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFs
OwotICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRp
Y2FsUmlnaHQ7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50
LCBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKTsKLQotICAgIC8vIEhUTUw1IHN0YXRlcyB0aGF0IHNlYW1sZXNzIGlm
cmFtZXMgc2hvdWxkIHJlcGxhY2UgZGVmYXVsdCBDU1MgdmFsdWVzCi0gICAgLy8gd2l0aCB2YWx1
ZXMgaW5oZXJpdGVkIGZyb20gdGhlIGNvbnRhaW5pbmcgaWZyYW1lIGVsZW1lbnQuIEhvd2V2ZXIs
Ci0gICAgLy8gc29tZSB2YWx1ZXMgKHN1Y2ggYXMgdGhlIGNhc2Ugb2YgZGVzaWduTW9kZSA9ICJv
biIpIHN0aWxsIG5lZWQgdG8KLSAgICAvLyBiZSBzZXQgYnkgdGhpcyAiZG9jdW1lbnQgc3R5bGUi
LgotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHlsZSA9IFJlbmRlclN0eWxlOjpj
cmVhdGUoKTsKLSAgICBib29sIHNlYW1sZXNzV2l0aFBhcmVudCA9IGRvY3VtZW50LT5zaG91bGRE
aXNwbGF5U2VhbWxlc3NseVdpdGhQYXJlbnQoKTsKLSAgICBpZiAoc2VhbWxlc3NXaXRoUGFyZW50
KSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBpZnJhbWVTdHlsZSA9IGRvY3VtZW50LT5zZWFtbGVz
c1BhcmVudElGcmFtZSgpLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICBpZiAoaWZyYW1lU3R5bGUp
Ci0gICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5pbmhlcml0RnJvbShpZnJhbWVTdHlsZSk7Ci0g
ICAgfQotCi0gICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHdoaWNoIHZhbHVlcyBiZWxvdyB3
ZSB3YW50IHRvIG92ZXJyaWRlIGluIHRoZSBzZWFtbGVzcyBjYXNlIQotICAgIGRvY3VtZW50U3R5
bGUtPnNldERpc3BsYXkoQkxPQ0spOwotICAgIGlmICghc2VhbWxlc3NXaXRoUGFyZW50KSB7Ci0g
ICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFJUTE9yZGVyaW5nKGRvY3VtZW50LT52aXN1YWxseU9y
ZGVyZWQoKSA/IFZpc3VhbE9yZGVyIDogTG9naWNhbE9yZGVyKTsKLSAgICAgICAgZG9jdW1lbnRT
dHlsZS0+c2V0Wm9vbShmcmFtZSAmJiAhZG9jdW1lbnQtPnByaW50aW5nKCkgPyBmcmFtZS0+cGFn
ZVpvb21GYWN0b3IoKSA6IDEpOwotICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRQYWdlU2NhbGVU
cmFuc2Zvcm0oZnJhbWUgPyBmcmFtZS0+ZnJhbWVTY2FsZUZhY3RvcigpIDogMSk7Ci0gICAgICAg
IGRvY3VtZW50U3R5bGUtPnNldExvY2FsZShkb2N1bWVudC0+Y29udGVudExhbmd1YWdlKCkpOwot
ICAgIH0KLSAgICAvLyBUaGlzIG92ZXJyaWRlcyBhbnkgLXdlYmtpdC11c2VyLW1vZGlmeSBpbmhl
cml0ZWQgZnJvbSB0aGUgcGFyZW50IGlmcmFtZS4KLSAgICBkb2N1bWVudFN0eWxlLT5zZXRVc2Vy
TW9kaWZ5KGRvY3VtZW50LT5pbkRlc2lnbk1vZGUoKSA/IFJFQURfV1JJVEUgOiBSRUFEX09OTFkp
OwotCi0gICAgRWxlbWVudCogZG9jRWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQo
KTsKLSAgICBSZW5kZXJPYmplY3QqIGRvY0VsZW1lbnRSZW5kZXJlciA9IGRvY0VsZW1lbnQgPyBk
b2NFbGVtZW50LT5yZW5kZXJlcigpIDogMDsKLSAgICBpZiAoZG9jRWxlbWVudFJlbmRlcmVyKSB7
Ci0gICAgICAgIC8vIFVzZSB0aGUgZGlyZWN0aW9uIGFuZCB3cml0aW5nLW1vZGUgb2YgdGhlIGJv
ZHkgdG8gc2V0IHRoZQotICAgICAgICAvLyB2aWV3cG9ydCdzIGRpcmVjdGlvbiBhbmQgd3JpdGlu
Zy1tb2RlIHVubGVzcyB0aGUgcHJvcGVydHkgaXMgc2V0IG9uIHRoZSBkb2N1bWVudCBlbGVtZW50
LgotICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBib2R5LCB0aGVuIHVzZSB0aGUgZG9jdW1lbnQg
ZWxlbWVudC4KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBib2R5UmVuZGVyZXIgPSBkb2N1bWVudC0+
Ym9keSgpID8gZG9jdW1lbnQtPmJvZHkoKS0+cmVuZGVyZXIoKSA6IDA7Ci0gICAgICAgIGlmIChi
b2R5UmVuZGVyZXIgJiYgIWRvY3VtZW50LT53cml0aW5nTW9kZVNldE9uRG9jdW1lbnRFbGVtZW50
KCkpCi0gICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRXcml0aW5nTW9kZShib2R5UmVuZGVy
ZXItPnN0eWxlKCktPndyaXRpbmdNb2RlKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBk
b2N1bWVudFN0eWxlLT5zZXRXcml0aW5nTW9kZShkb2NFbGVtZW50UmVuZGVyZXItPnN0eWxlKCkt
PndyaXRpbmdNb2RlKCkpOwotICAgICAgICBpZiAoYm9keVJlbmRlcmVyICYmICFkb2N1bWVudC0+
ZGlyZWN0aW9uU2V0T25Eb2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50U3R5
bGUtPnNldERpcmVjdGlvbihib2R5UmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0RGlyZWN0aW9uKGRvY0Vs
ZW1lbnRSZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpOwotICAgIH0KLQotICAgIGlmIChm
cmFtZSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygp
KSB7Ci0gICAgICAgICAgICBjb25zdCBQYWdpbmF0aW9uJiBwYWdpbmF0aW9uID0gZnJhbWVWaWV3
LT5wYWdpbmF0aW9uKCk7Ci0gICAgICAgICAgICBpZiAocGFnaW5hdGlvbi5tb2RlICE9IFBhZ2lu
YXRpb246OlVucGFnaW5hdGVkKSB7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0
Q29sdW1uU3R5bGVzRnJvbVBhZ2luYXRpb25Nb2RlKHBhZ2luYXRpb24ubW9kZSk7Ci0gICAgICAg
ICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0Q29sdW1uR2FwKHBhZ2luYXRpb24uZ2FwKTsKLSAg
ICAgICAgICAgICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGRvY3VtZW50LT5yZW5kZXJWaWV3
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXctPmhhc0NvbHVtbnMoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZpZXctPnVwZGF0ZUNvbHVtbkluZm9Gcm9tU3R5bGUoZG9jdW1l
bnRTdHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gU2VhbWxlc3MgaWZyYW1lcyB3YW50IHRvIGluaGVyaXQgdGhl
aXIgZm9udCBmcm9tIHRoZWlyIHBhcmVudCBpZnJhbWUsIHNvIGVhcmx5IHJldHVybiBiZWZvcmUg
c2V0dGluZyB0aGUgZm9udC4KLSAgICBpZiAoc2VhbWxlc3NXaXRoUGFyZW50KQotICAgICAgICBy
ZXR1cm4gZG9jdW1lbnRTdHlsZS5yZWxlYXNlKCk7Ci0KLSAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3JpcHQobG9jYWxlVG9TY3Jp
cHRDb2RlRm9yRm9udFNlbGVjdGlvbihkb2N1bWVudFN0eWxlLT5sb2NhbGUoKSkpOwotICAgIGlm
IChTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKSkgewotICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQtPnByaW50aW5nKCkgfHwg
IXNldHRpbmdzLT5zY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZCgpKTsKLSAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2Rl
KCkpOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHN0YW5kYXJkRm9udCA9IHNldHRpbmdz
LT5zdGFuZGFyZEZvbnRGYW1pbHkoZm9udERlc2NyaXB0aW9uLnNjcmlwdCgpKTsKLSAgICAgICAg
aWYgKCFzdGFuZGFyZEZvbnQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5KTsKLSAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoc3RhbmRhcmRGb250KTsKLSAg
ICAgICAgfQotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoQ1NTVmFsdWVN
ZWRpdW0gLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKLSAgICAgICAgaW50IHNpemUgPSBTdHlsZVJl
c29sdmVyOjpmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQsIENTU1ZhbHVlTWVkaXVtLCBmYWxz
ZSk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAg
ICAgICBib29sIHVzZVNWR1pvb21SdWxlcyA9IGRvY3VtZW50LT5pc1NWR0RvY3VtZW50KCk7Ci0g
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGVSZXNvbHZlcjo6Z2V0
Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoZG9jdW1lbnQsIGRvY3VtZW50U3R5bGUuZ2V0
KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29tUnVs
ZXMpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJG
b250KGRvY3VtZW50LT5wcmludGluZygpKTsKLQotICAgIEZvbnRPcmllbnRhdGlvbiBmb250T3Jp
ZW50YXRpb247Ci0gICAgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBnbHlwaE9yaWVudGF0aW9uOwot
ICAgIGdldEZvbnRBbmRHbHlwaE9yaWVudGF0aW9uKGRvY3VtZW50U3R5bGUuZ2V0KCksIGZvbnRP
cmllbnRhdGlvbiwgZ2x5cGhPcmllbnRhdGlvbik7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldE9y
aWVudGF0aW9uKGZvbnRPcmllbnRhdGlvbik7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldE5vbkNK
S0dseXBoT3JpZW50YXRpb24oZ2x5cGhPcmllbnRhdGlvbik7Ci0KLSAgICBkb2N1bWVudFN0eWxl
LT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICBkb2N1bWVudFN0eWxl
LT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7Ci0KLSAgICByZXR1cm4gZG9jdW1lbnRTdHls
ZS5yZWxlYXNlKCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnko
Y29uc3QgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBpZiAoIWVsZW1lbnQpCkBAIC0xNDU1LDcg
KzEzMjUsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlCiAKICAg
ICAvLyBDYWxsIHNldFN0eWxlc0ZvclBhZ2luYXRpb25Nb2RlKCkgaWYgYSBwYWdpbmF0aW9uIG1v
ZGUgaXMgc2V0IGZvciBhbnkgbm9uLXJvb3QgZWxlbWVudHMuIElmIHRoZXNlCiAgICAgLy8gc3R5
bGVzIGFyZSBzcGVjaWZpZWQgb24gYSByb290IGVsZW1lbnQsIHRoZW4gdGhleSB3aWxsIGJlIGlu
Y29ycG9yYXRlZCBpbgotICAgIC8vIFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRG9jdW1lbnQoKS4K
KyAgICAvLyBTdHlsZTo6Y3JlYXRlRm9yRG9jdW1lbnQoKS4KICAgICBpZiAoKHN0eWxlLT5vdmVy
Zmxvd1koKSA9PSBPUEFHRURYIHx8IHN0eWxlLT5vdmVyZmxvd1koKSA9PSBPUEFHRURZKSAmJiAh
KGUgJiYgKGUtPmhhc1RhZ05hbWUoaHRtbFRhZykgfHwgZS0+aGFzVGFnTmFtZShib2R5VGFnKSkp
KQogICAgICAgICBzdHlsZS0+c2V0Q29sdW1uU3R5bGVzRnJvbVBhZ2luYXRpb25Nb2RlKFdlYkNv
cmU6OnBhZ2luYXRpb25Nb2RlRm9yUmVuZGVyU3R5bGUoc3R5bGUpKTsKIApAQCAtMTU4NSw3ICsx
NDU1LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShSZQogewogICAg
IEZvbnRPcmllbnRhdGlvbiBmb250T3JpZW50YXRpb247CiAgICAgTm9uQ0pLR2x5cGhPcmllbnRh
dGlvbiBnbHlwaE9yaWVudGF0aW9uOwotICAgIGdldEZvbnRBbmRHbHlwaE9yaWVudGF0aW9uKHN0
eWxlLCBmb250T3JpZW50YXRpb24sIGdseXBoT3JpZW50YXRpb24pOworICAgIHN0eWxlLT5nZXRG
b250QW5kR2x5cGhPcmllbnRhdGlvbihmb250T3JpZW50YXRpb24sIGdseXBoT3JpZW50YXRpb24p
OwogCiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24gPSBzdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5vcmllbnRhdGlvbigp
ID09IGZvbnRPcmllbnRhdGlvbiAmJiBmb250RGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRh
dGlvbigpID09IGdseXBoT3JpZW50YXRpb24pCkBAIC0yNDE3LDcgKzIyODcsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvCiAgICAgICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGRvY3VtZW50KCktPnByaW50aW5nKCkgfHwgIXNl
dHRpbmdzLT5zY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZCgpKTsKIAogICAgICAgICAgICAg
ICAgIC8vIEhhbmRsZSB0aGUgem9vbSBmYWN0b3IuCi0gICAgICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShk
b2N1bWVudCgpLCBzdGF0ZS5zdHlsZSgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUo
KSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsK
KyAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpj
b21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoZm9udERlc2NyaXB0aW9uLnNwZWNpZmll
ZFNpemUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHVzZVNWR1pvb21SdWxl
cygpLCBzdGF0ZS5zdHlsZSgpLCBkb2N1bWVudCgpKSk7CiAgICAgICAgICAgICAgICAgc2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZSBpZiAodmFsdWUtPmlzRm9udFZhbHVlKCkpIHsKQEAgLTMyNjMsNyArMzEzMyw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWwKICAgICAvLyBtdWx0aXBseWlu
ZyBieSBvdXIgc2NhbGUgZmFjdG9yLgogICAgIGZsb2F0IHNpemU7CiAgICAgaWYgKGNoaWxkRm9u
dC5rZXl3b3JkU2l6ZSgpKQotICAgICAgICBzaXplID0gZm9udFNpemVGb3JLZXl3b3JkKGRvY3Vt
ZW50KCksIENTU1ZhbHVlWHhTbWFsbCArIGNoaWxkRm9udC5rZXl3b3JkU2l6ZSgpIC0gMSwgY2hp
bGRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7CisgICAgICAgIHNpemUgPSBTdHlsZTo6Zm9u
dFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlWHhTbWFsbCArIGNoaWxkRm9udC5rZXl3b3JkU2l6ZSgp
IC0gMSwgY2hpbGRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgZG9jdW1lbnQoKSk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50U2V0dGluZ3MoKTsK
ICAgICAgICAgZmxvYXQgZml4ZWRTY2FsZUZhY3RvciA9IChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+
ZGVmYXVsdEZpeGVkRm9udFNpemUoKSAmJiBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCkpCkBA
IC0zMjg5LDcgKzMxNTksNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5
bGUoCiAgICAgaWYgKCFzdGFuZGFyZEZvbnRGYW1pbHkuaXNFbXB0eSgpKQogICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KHN0YW5kYXJkRm9udEZhbWlseSk7CiAgICAgZm9udERl
c2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxs
ICsgMSk7Ci0gICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdv
cmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVNZWRpdW0sIGZhbHNlKSk7CisgICAgc2V0Rm9udFNpemUo
Zm9udERlc2NyaXB0aW9uLCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlTWVkaXVt
LCBmYWxzZSwgZG9jdW1lbnQoKSkpOwogICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdo
dChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAgICAgbV9zdGF0ZS5zZXRMaW5l
SGVpZ2h0VmFsdWUoMCk7CiAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CkBAIC0zMjk4LDE1MSArMzE2OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZv
bnRTdHlsZSgKIHZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCiB7CiAgICAgZm9udERlc2NyaXB0aW9uLnNl
dFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6
ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBtX3N0YXRlLnN0
eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VTVkdab29t
UnVsZXMoKSkpOwotfQotCi1mbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9t
U3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlclN0eWxlKiBzdHlsZSwgYm9v
bCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVs
ZXMpCi17Ci0gICAgZmxvYXQgem9vbUZhY3RvciA9IDEuMGY7Ci0gICAgaWYgKCF1c2VTVkdab29t
UnVsZXMpIHsKLSAgICAgICAgem9vbUZhY3RvciA9IHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0g
ICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgICAg
IHpvb21GYWN0b3IgKj0gZnJhbWUtPnRleHRab29tRmFjdG9yKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKGRvY3Vt
ZW50LCB6b29tRmFjdG9yLCBpc0Fic29sdXRlU2l6ZSwgc3BlY2lmaWVkU2l6ZSk7Ci19Ci0KLWZs
b2F0IFN0eWxlUmVzb2x2ZXI6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3Vt
ZW50KiBkb2N1bWVudCwgZmxvYXQgem9vbUZhY3RvciwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxv
YXQgc3BlY2lmaWVkU2l6ZSwgRVNtYXJ0TWluaW11bUZvckZvbnRTaXplIHVzZVNtYXJ0TWluaW11
bUZvckZvbnRTaXplKQotewotICAgIC8vIFRleHQgd2l0aCBhIDBweCBmb250IHNpemUgc2hvdWxk
IG5vdCBiZSB2aXNpYmxlIGFuZCB0aGVyZWZvcmUgbmVlZHMgdG8gYmUKLSAgICAvLyBleGVtcHQg
ZnJvbSBtaW5pbXVtIGZvbnQgc2l6ZSBydWxlcy4gQWNpZDMgcmVsaWVzIG9uIHRoaXMgZm9yIHBp
eGVsLXBlcmZlY3QKLSAgICAvLyByZW5kZXJpbmcuIFRoaXMgaXMgYWxzbyBjb21wYXRpYmxlIHdp
dGggb3RoZXIgYnJvd3NlcnMgdGhhdCBoYXZlIG1pbmltdW0KLSAgICAvLyBmb250IHNpemUgc2V0
dGluZ3MgKGUuZy4gRmlyZWZveCkuCi0gICAgaWYgKGZhYnNmKHNwZWNpZmllZFNpemUpIDwgc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46OmVwc2lsb24oKSkKLSAgICAgICAgcmV0dXJuIDAuMGY7
Ci0KLSAgICAvLyBXZSBzdXBwb3J0IHR3byB0eXBlcyBvZiBtaW5pbXVtIGZvbnQgc2l6ZS4gVGhl
IGZpcnN0IGlzIGEgaGFyZCBvdmVycmlkZSB0aGF0IGFwcGxpZXMgdG8KLSAgICAvLyBhbGwgZm9u
dHMuIFRoaXMgaXMgIm1pblNpemUuIiBUaGUgc2Vjb25kIHR5cGUgb2YgbWluaW11bSBmb250IHNp
emUgaXMgYSAic21hcnQgbWluaW11bSIKLSAgICAvLyB0aGF0IGlzIGFwcGxpZWQgb25seSB3aGVu
IHRoZSBXZWIgcGFnZSBjYW4ndCBrbm93IHdoYXQgc2l6ZSBpdCByZWFsbHkgYXNrZWQgZm9yLCBl
LmcuLAotICAgIC8vIHdoZW4gaXQgdXNlcyBsb2dpY2FsIHNpemVzIGxpa2UgInNtYWxsIiBvciBl
eHByZXNzZXMgdGhlIGZvbnQtc2l6ZSBhcyBhIHBlcmNlbnRhZ2Ugb2YKLSAgICAvLyB0aGUgdXNl
cidzIGRlZmF1bHQgZm9udCBzZXR0aW5nLgotCi0gICAgLy8gV2l0aCB0aGUgc21hcnQgbWluaW11
bSwgd2UgbmV2ZXIgd2FudCB0byBnZXQgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIGZvbnQgc2l6
ZSB0byBrZWVwIGZvbnRzIHJlYWRhYmxlLgotICAgIC8vIEhvd2V2ZXIgd2UgYWx3YXlzIGFsbG93
IHRoZSBwYWdlIHRvIHNldCBhbiBleHBsaWNpdCBwaXhlbCBzaXplIHRoYXQgaXMgc21hbGxlciwK
LSAgICAvLyBzaW5jZSBzaXRlcyB3aWxsIG1pcy1yZW5kZXIgb3RoZXJ3aXNlIChlLmcuLCBodHRw
Oi8vd3d3LmdhbWVzcG90LmNvbSB3aXRoIGEgOXB4IG1pbmltdW0pLgotCi0gICAgU2V0dGluZ3Mq
IHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFzZXR0aW5ncykKLSAg
ICAgICAgcmV0dXJuIDEuMGY7Ci0KLSAgICBpbnQgbWluU2l6ZSA9IHNldHRpbmdzLT5taW5pbXVt
Rm9udFNpemUoKTsKLSAgICBpbnQgbWluTG9naWNhbFNpemUgPSBzZXR0aW5ncy0+bWluaW11bUxv
Z2ljYWxGb250U2l6ZSgpOwotICAgIGZsb2F0IHpvb21lZFNpemUgPSBzcGVjaWZpZWRTaXplICog
em9vbUZhY3RvcjsKLQotICAgIC8vIEFwcGx5IHRoZSBoYXJkIG1pbmltdW0gZmlyc3QuIFdlIG9u
bHkgYXBwbHkgdGhlIGhhcmQgbWluaW11bSBpZiBhZnRlciB6b29taW5nIHdlJ3JlIHN0aWxsIHRv
byBzbWFsbC4KLSAgICBpZiAoem9vbWVkU2l6ZSA8IG1pblNpemUpCi0gICAgICAgIHpvb21lZFNp
emUgPSBtaW5TaXplOwotCi0gICAgLy8gTm93IGFwcGx5IHRoZSAic21hcnQgbWluaW11bS4iIFRo
aXMgbWluaW11bSBpcyBhbHNvIG9ubHkgYXBwbGllZCBpZiB3ZSdyZSBzdGlsbCB0b28gc21hbGwK
LSAgICAvLyBhZnRlciB6b29taW5nLiBUaGUgZm9udCBzaXplIG11c3QgZWl0aGVyIGJlIHJlbGF0
aXZlIHRvIHRoZSB1c2VyIGRlZmF1bHQgb3IgdGhlIG9yaWdpbmFsIHNpemUKLSAgICAvLyBtdXN0
IGhhdmUgYmVlbiBhY2NlcHRhYmxlLiBJbiBvdGhlciB3b3Jkcywgd2Ugb25seSBhcHBseSB0aGUg
c21hcnQgbWluaW11bSB3aGVuZXZlciB3ZSdyZSBwb3NpdGl2ZQotICAgIC8vIGRvaW5nIHNvIHdv
bid0IGRpc3J1cHQgdGhlIGxheW91dC4KLSAgICBpZiAodXNlU21hcnRNaW5pbXVtRm9yRm9udFNp
emUgJiYgem9vbWVkU2l6ZSA8IG1pbkxvZ2ljYWxTaXplICYmIChzcGVjaWZpZWRTaXplID49IG1p
bkxvZ2ljYWxTaXplIHx8ICFpc0Fic29sdXRlU2l6ZSkpCi0gICAgICAgIHpvb21lZFNpemUgPSBt
aW5Mb2dpY2FsU2l6ZTsKLQotICAgIC8vIEFsc28gY2xhbXAgdG8gYSByZWFzb25hYmxlIG1heGlt
dW0gdG8gcHJldmVudCBpbnNhbmUgZm9udCBzaXplcyBmcm9tIGNhdXNpbmcgY3Jhc2hlcyBvbiB2
YXJpb3VzCi0gICAgLy8gcGxhdGZvcm1zIChJJ20gbG9va2luZyBhdCB5b3UsIFdpbmRvd3MuKQot
ICAgIHJldHVybiBtaW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwgem9vbWVkU2l6ZSk7Ci19Ci0K
LWNvbnN0IGludCBmb250U2l6ZVRhYmxlTWF4ID0gMTY7Ci1jb25zdCBpbnQgZm9udFNpemVUYWJs
ZU1pbiA9IDk7Ci1jb25zdCBpbnQgdG90YWxLZXl3b3JkcyA9IDg7Ci0KLS8vIFdpbklFL05hdjQg
dGFibGUgZm9yIGZvbnQgc2l6ZXMuIERlc2lnbmVkIHRvIG1hdGNoIHRoZSBsZWdhY3kgZm9udCBt
YXBwaW5nIHN5c3RlbSBvZiBIVE1MLgotc3RhdGljIGNvbnN0IGludCBxdWlya3NGb250U2l6ZVRh
YmxlW2ZvbnRTaXplVGFibGVNYXggLSBmb250U2l6ZVRhYmxlTWluICsgMV1bdG90YWxLZXl3b3Jk
c10gPQotewotICAgICAgeyA5LCAgICA5LCAgICAgOSwgICAgIDksICAgIDExLCAgICAxNCwgICAg
MTgsICAgIDI4IH0sCi0gICAgICB7IDksICAgIDksICAgICA5LCAgICAxMCwgICAgMTIsICAgIDE1
LCAgICAyMCwgICAgMzEgfSwKLSAgICAgIHsgOSwgICAgOSwgICAgIDksICAgIDExLCAgICAxMywg
ICAgMTcsICAgIDIyLCAgICAzNCB9LAotICAgICAgeyA5LCAgICA5LCAgICAxMCwgICAgMTIsICAg
IDE0LCAgICAxOCwgICAgMjQsICAgIDM3IH0sCi0gICAgICB7IDksICAgIDksICAgIDEwLCAgICAx
MywgICAgMTYsICAgIDIwLCAgICAyNiwgICAgNDAgfSwgLy8gZml4ZWQgZm9udCBkZWZhdWx0ICgx
MykKLSAgICAgIHsgOSwgICAgOSwgICAgMTEsICAgIDE0LCAgICAxNywgICAgMjEsICAgIDI4LCAg
ICA0MiB9LAotICAgICAgeyA5LCAgIDEwLCAgICAxMiwgICAgMTUsICAgIDE3LCAgICAyMywgICAg
MzAsICAgIDQ1IH0sCi0gICAgICB7IDksICAgMTAsICAgIDEzLCAgICAxNiwgICAgMTgsICAgIDI0
LCAgICAzMiwgICAgNDggfSAvLyBwcm9wb3J0aW9uYWwgZm9udCBkZWZhdWx0ICgxNikKLX07Ci0v
LyBIVE1MICAgICAgIDEgICAgICAyICAgICAgMyAgICAgIDQgICAgICA1ICAgICAgNiAgICAgIDcK
LS8vIENTUyAgeHhzICAgeHMgICAgIHMgICAgICBtICAgICAgbCAgICAgeGwgICAgIHh4bAotLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgIHwKLS8vICAgICAgICAgICAgICAgICAgICAgIHVzZXIg
cHJlZgotCi0vLyBTdHJpY3QgbW9kZSB0YWJsZSBtYXRjaGVzIE1hY0lFIGFuZCBNb3ppbGxhJ3Mg
c2V0dGluZ3MgZXhhY3RseS4KLXN0YXRpYyBjb25zdCBpbnQgc3RyaWN0Rm9udFNpemVUYWJsZVtm
b250U2l6ZVRhYmxlTWF4IC0gZm9udFNpemVUYWJsZU1pbiArIDFdW3RvdGFsS2V5d29yZHNdID0K
LXsKLSAgICAgIHsgOSwgICAgOSwgICAgIDksICAgICA5LCAgICAxMSwgICAgMTQsICAgIDE4LCAg
ICAyNyB9LAotICAgICAgeyA5LCAgICA5LCAgICAgOSwgICAgMTAsICAgIDEyLCAgICAxNSwgICAg
MjAsICAgIDMwIH0sCi0gICAgICB7IDksICAgIDksICAgIDEwLCAgICAxMSwgICAgMTMsICAgIDE3
LCAgICAyMiwgICAgMzMgfSwKLSAgICAgIHsgOSwgICAgOSwgICAgMTAsICAgIDEyLCAgICAxNCwg
ICAgMTgsICAgIDI0LCAgICAzNiB9LAotICAgICAgeyA5LCAgIDEwLCAgICAxMiwgICAgMTMsICAg
IDE2LCAgICAyMCwgICAgMjYsICAgIDM5IH0sIC8vIGZpeGVkIGZvbnQgZGVmYXVsdCAoMTMpCi0g
ICAgICB7IDksICAgMTAsICAgIDEyLCAgICAxNCwgICAgMTcsICAgIDIxLCAgICAyOCwgICAgNDIg
fSwKLSAgICAgIHsgOSwgICAxMCwgICAgMTMsICAgIDE1LCAgICAxOCwgICAgMjMsICAgIDMwLCAg
ICA0NSB9LAotICAgICAgeyA5LCAgIDEwLCAgICAxMywgICAgMTYsICAgIDE4LCAgICAyNCwgICAg
MzIsICAgIDQ4IH0gLy8gcHJvcG9ydGlvbmFsIGZvbnQgZGVmYXVsdCAoMTYpCi19OwotLy8gSFRN
TCAgICAgICAxICAgICAgMiAgICAgIDMgICAgICA0ICAgICAgNSAgICAgIDYgICAgICA3Ci0vLyBD
U1MgIHh4cyAgIHhzICAgICBzICAgICAgbSAgICAgIGwgICAgIHhsICAgICB4eGwKLS8vICAgICAg
ICAgICAgICAgICAgICAgICAgICB8Ci0vLyAgICAgICAgICAgICAgICAgICAgICB1c2VyIHByZWYK
LQotLy8gRm9yIHZhbHVlcyBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgdGFibGUsIHdlIHVzZSBU
b2RkIEZhaHJuZXIncyBzdWdnZXN0ZWQgc2NhbGUKLS8vIGZhY3RvcnMgZm9yIGVhY2gga2V5d29y
ZCB2YWx1ZS4KLXN0YXRpYyBjb25zdCBmbG9hdCBmb250U2l6ZUZhY3RvcnNbdG90YWxLZXl3b3Jk
c10gPSB7IDAuNjBmLCAwLjc1ZiwgMC44OWYsIDEuMGYsIDEuMmYsIDEuNWYsIDIuMGYsIDMuMGYg
fTsKLQotZmxvYXQgU3R5bGVSZXNvbHZlcjo6Zm9udFNpemVGb3JLZXl3b3JkKERvY3VtZW50KiBk
b2N1bWVudCwgaW50IGtleXdvcmQsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSkKLXsK
LSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKTsKLSAgICBpZiAo
IXNldHRpbmdzKQotICAgICAgICByZXR1cm4gMS4wZjsKLQotICAgIGJvb2wgcXVpcmtzTW9kZSA9
IGRvY3VtZW50LT5pblF1aXJrc01vZGUoKTsKLSAgICBpbnQgbWVkaXVtU2l6ZSA9IHNob3VsZFVz
ZUZpeGVkRGVmYXVsdFNpemUgPyBzZXR0aW5ncy0+ZGVmYXVsdEZpeGVkRm9udFNpemUoKSA6IHNl
dHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKTsKLSAgICBpZiAobWVkaXVtU2l6ZSA+PSBmb250U2l6
ZVRhYmxlTWluICYmIG1lZGl1bVNpemUgPD0gZm9udFNpemVUYWJsZU1heCkgewotICAgICAgICAv
LyBMb29rIHVwIHRoZSBlbnRyeSBpbiB0aGUgdGFibGUuCi0gICAgICAgIGludCByb3cgPSBtZWRp
dW1TaXplIC0gZm9udFNpemVUYWJsZU1pbjsKLSAgICAgICAgaW50IGNvbCA9IChrZXl3b3JkIC0g
Q1NTVmFsdWVYeFNtYWxsKTsKLSAgICAgICAgcmV0dXJuIHF1aXJrc01vZGUgPyBxdWlya3NGb250
U2l6ZVRhYmxlW3Jvd11bY29sXSA6IHN0cmljdEZvbnRTaXplVGFibGVbcm93XVtjb2xdOwotICAg
IH0KLQotICAgIC8vIFZhbHVlIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSB0YWJsZS4gQXBw
bHkgdGhlIHNjYWxlIGZhY3RvciBpbnN0ZWFkLgotICAgIGZsb2F0IG1pbkxvZ2ljYWxTaXplID0g
bWF4KHNldHRpbmdzLT5taW5pbXVtTG9naWNhbEZvbnRTaXplKCksIDEpOwotICAgIHJldHVybiBt
YXgoZm9udFNpemVGYWN0b3JzW2tleXdvcmQgLSBDU1NWYWx1ZVh4U21hbGxdKm1lZGl1bVNpemUs
IG1pbkxvZ2ljYWxTaXplKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbnQg
ZmluZE5lYXJlc3RMZWdhY3lGb250U2l6ZShpbnQgcGl4ZWxGb250U2l6ZSwgY29uc3QgVCogdGFi
bGUsIGludCBtdWx0aXBsaWVyKQotewotICAgIC8vIElnbm9yZSB0YWJsZVswXSBiZWNhdXNlIHh4
LXNtYWxsIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYW55IGxlZ2FjeSBmb250IHNpemUuCi0gICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCB0b3RhbEtleXdvcmRzIC0gMTsgaSsrKSB7Ci0gICAgICAgIGlm
IChwaXhlbEZvbnRTaXplICogMiA8ICh0YWJsZVtpXSArIHRhYmxlW2kgKyAxXSkgKiBtdWx0aXBs
aWVyKQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiB0b3RhbEtleXdv
cmRzIC0gMTsKLX0KLQotaW50IFN0eWxlUmVzb2x2ZXI6OmxlZ2FjeUZvbnRTaXplKERvY3VtZW50
KiBkb2N1bWVudCwgaW50IHBpeGVsRm9udFNpemUsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0
U2l6ZSkKLXsKLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKTsK
LSAgICBpZiAoIXNldHRpbmdzKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGJvb2wgcXVpcmtz
TW9kZSA9IGRvY3VtZW50LT5pblF1aXJrc01vZGUoKTsKLSAgICBpbnQgbWVkaXVtU2l6ZSA9IHNo
b3VsZFVzZUZpeGVkRGVmYXVsdFNpemUgPyBzZXR0aW5ncy0+ZGVmYXVsdEZpeGVkRm9udFNpemUo
KSA6IHNldHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKTsKLSAgICBpZiAobWVkaXVtU2l6ZSA+PSBm
b250U2l6ZVRhYmxlTWluICYmIG1lZGl1bVNpemUgPD0gZm9udFNpemVUYWJsZU1heCkgewotICAg
ICAgICBpbnQgcm93ID0gbWVkaXVtU2l6ZSAtIGZvbnRTaXplVGFibGVNaW47Ci0gICAgICAgIHJl
dHVybiBmaW5kTmVhcmVzdExlZ2FjeUZvbnRTaXplPGludD4ocGl4ZWxGb250U2l6ZSwgcXVpcmtz
TW9kZSA/IHF1aXJrc0ZvbnRTaXplVGFibGVbcm93XSA6IHN0cmljdEZvbnRTaXplVGFibGVbcm93
XSwgMSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZpbmROZWFyZXN0TGVnYWN5Rm9udFNpemU8Zmxv
YXQ+KHBpeGVsRm9udFNpemUsIGZvbnRTaXplRmFjdG9ycywgbWVkaXVtU2l6ZSk7CisgICAgZm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21T
cGVjaWZpZWRTaXplKHNpemUsIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCB1c2VT
Vkdab29tUnVsZXMoKSwgbV9zdGF0ZS5zdHlsZSgpLCBkb2N1bWVudCgpKSk7CiB9CiAKIHN0YXRp
YyBDb2xvciBjb2xvckZvckNTU1ZhbHVlKENTU1ZhbHVlSUQgY3NzVmFsdWVJZCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAkocmV2aXNpb24gMTUzODkzKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gRVNtYXJ0TWluaW11bUZvckZvbnRTaXpl
IHsgRG9Ob3RVc2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSwgVXNlU21hcnRNaW5pbXVtRm9yRm9u
dEZpemUgfTsKLQogY2xhc3MgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTsKIGNsYXNzIENTU0ZvbnRTZWxl
Y3RvcjsKIGNsYXNzIENTU0ZvbnRGYWNlOwpAQCAtMTkwLDggKzE4OCw2IEBAIHB1YmxpYzoKICAg
ICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCk7CiAg
ICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpOwogCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRG9jdW1lbnQoRG9jdW1l
bnQqLCBDU1NGb250U2VsZWN0b3IqID0gMCk7Ci0KICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLnN0eWxlKCk7IH0KICAgICBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnBhcmVudFN0eWxlKCk7IH0KICAgICBSZW5k
ZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpOyB9CkBAIC0yNTAsMTMgKzI0Niw2IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8
UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4gc3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCosIHVu
c2lnbmVkIHJ1bGVzVG9JbmNsdWRlID0gQWxsQnV0RW1wdHlDU1NSdWxlcyk7CiAgICAgVmVjdG9y
PFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+IHBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1l
bnQqLCBQc2V1ZG9JZCwgdW5zaWduZWQgcnVsZXNUb0luY2x1ZGUgPSBBbGxCdXRFbXB0eUNTU1J1
bGVzKTsKIAotICAgIC8vIEdpdmVuIGEgQ1NTIGtleXdvcmQgaW4gdGhlIHJhbmdlICh4eC1zbWFs
bCB0byAtd2Via2l0LXh4eC1sYXJnZSksIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4KLSAgICAv
LyB0aGUgY29ycmVjdCBmb250IHNpemUgc2NhbGVkIHJlbGF0aXZlIHRvIHRoZSB1c2VyJ3MgZGVm
YXVsdCAobWVkaXVtKS4KLSAgICBzdGF0aWMgZmxvYXQgZm9udFNpemVGb3JLZXl3b3JkKERvY3Vt
ZW50KiwgaW50IGtleXdvcmQsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSk7Ci0KLSAg
ICAvLyBHaXZlbiBhIGZvbnQgc2l6ZSBpbiBwaXhlbCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVy
biBsZWdhY3kgZm9udCBzaXplIGJldHdlZW4gMSBhbmQgNy4KLSAgICBzdGF0aWMgaW50IGxlZ2Fj
eUZvbnRTaXplKERvY3VtZW50KiwgaW50IHBpeGVsRm9udFNpemUsIGJvb2wgc2hvdWxkVXNlRml4
ZWREZWZhdWx0U2l6ZSk7Ci0KIHB1YmxpYzoKICAgICB2b2lkIGFwcGx5UHJvcGVydHlUb1N0eWxl
KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgUmVuZGVyU3R5bGUqKTsKIApAQCAtMjY1LDEzICsy
NTQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVGb250KCk7CiAgICAgdm9pZCBpbml0aWFs
aXplRm9udFN0eWxlKFNldHRpbmdzKik7CiAKLSAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRT
aXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBmbG9hdCB6b29tRmFjdG9yLCBib29sIGlz
QWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZpZWRTaXplLCBFU21hcnRNaW5pbXVtRm9yRm9udFNp
emUgPSBVc2VTbWFydE1pbmltdW1Gb3JGb250Rml6ZSk7Ci0KICAgICB2b2lkIHNldEZvbnRTaXpl
KEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUpOwogCi1wcml2YXRlOgotICAgIHN0YXRpYyBm
bG9hdCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIFJlbmRlclN0
eWxlKiwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VT
Vkdab29tUnVsZXMpOwotCiBwdWJsaWM6CiAgICAgYm9vbCB1c2VTVkdab29tUnVsZXMoKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNTM4OTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNiArMTQ2LDcg
QEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNs
dWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlRm9yRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENv
bnRlbnRzLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKQEAgLTE3ODAsOCArMTc4MSw5
IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlOjpDaGFuZ2UKICAgICAgICAgaWYg
KChjaGFuZ2UgPT0gU3R5bGU6OkZvcmNlKSB8fCAoc2hvdWxkRGlzcGxheVNlYW1sZXNzbHlXaXRo
UGFyZW50KCkgJiYgKGNoYW5nZSA+PSBTdHlsZTo6SW5oZXJpdCkpKSB7CiAgICAgICAgICAgICAv
LyBzdHlsZSBzZWxlY3RvciBtYXkgc2V0IHRoaXMgYWdhaW4gZHVyaW5nIHJlY2FsYwogICAgICAg
ICAgICAgbV9oYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlID0gZmFsc2U7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHlsZSA9IFN0eWxl
UmVzb2x2ZXI6OnN0eWxlRm9yRG9jdW1lbnQodGhpcywgbV9zdHlsZVJlc29sdmVyID8gbV9zdHls
ZVJlc29sdmVyLT5mb250U2VsZWN0b3IoKSA6IDApOworCisgICAgICAgICAgICBSZWZQdHI8UmVu
ZGVyU3R5bGU+IGRvY3VtZW50U3R5bGUgPSBTdHlsZTo6cmVzb2x2ZUZvckRvY3VtZW50KHRoaXMp
OworCiAgICAgICAgICAgICBTdHlsZTo6Q2hhbmdlIGRvY3VtZW50Q2hhbmdlID0gU3R5bGU6OmRl
dGVybWluZUNoYW5nZShkb2N1bWVudFN0eWxlLmdldCgpLCByZW5kZXJlcigpLT5zdHlsZSgpLCBz
ZXR0aW5ncygpKTsKICAgICAgICAgICAgIGlmIChkb2N1bWVudENoYW5nZSAhPSBTdHlsZTo6Tm9D
aGFuZ2UpCiAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0U3R5bGUoZG9jdW1lbnRTdHls
ZS5yZWxlYXNlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNw
cAkocmV2aXNpb24gMTUzODkzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiUG9zaXRp
b24uaCIKICNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKKyNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0eVNldC5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHls
ZVJ1bGUuaCIKQEAgLTE1NjcsMTAgKzE1NjgsMTAgQEAgaW50IGxlZ2FjeUZvbnRTaXplRnJvbUNT
U1ZhbHVlKERvY3VtZW50KgogewogICAgIGlmIChpc0NTU1ZhbHVlTGVuZ3RoKHZhbHVlKSkgewog
ICAgICAgICBpbnQgcGl4ZWxGb250U2l6ZSA9IHZhbHVlLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BYKTsKLSAgICAgICAgaW50IGxlZ2FjeUZvbnRTaXplID0gU3R5bGVSZXNv
bHZlcjo6bGVnYWN5Rm9udFNpemUoZG9jdW1lbnQsIHBpeGVsRm9udFNpemUsIHNob3VsZFVzZUZp
eGVkRm9udERlZmF1bHRTaXplKTsKKyAgICAgICAgaW50IGxlZ2FjeUZvbnRTaXplID0gU3R5bGU6
OmxlZ2FjeUZvbnRTaXplRm9yUGl4ZWxTaXplKHBpeGVsRm9udFNpemUsIHNob3VsZFVzZUZpeGVk
Rm9udERlZmF1bHRTaXplLCBkb2N1bWVudCk7CiAgICAgICAgIC8vIFVzZSBsZWdhY3kgZm9udCBz
aXplIG9ubHkgaWYgcGl4ZWwgdmFsdWUgbWF0Y2hlcyBleGFjdGx5IHRvIHRoYXQgb2YgbGVnYWN5
IGZvbnQgc2l6ZS4KICAgICAgICAgaW50IGNzc1ByaW1pdGl2ZUVxdWl2YWxlbnQgPSBsZWdhY3lG
b250U2l6ZSAtIDEgKyBDU1NWYWx1ZVhTbWFsbDsKLSAgICAgICAgaWYgKG1vZGUgPT0gQWx3YXlz
VXNlTGVnYWN5Rm9udFNpemUgfHwgU3R5bGVSZXNvbHZlcjo6Zm9udFNpemVGb3JLZXl3b3JkKGRv
Y3VtZW50LCBjc3NQcmltaXRpdmVFcXVpdmFsZW50LCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0
U2l6ZSkgPT0gcGl4ZWxGb250U2l6ZSkKKyAgICAgICAgaWYgKG1vZGUgPT0gQWx3YXlzVXNlTGVn
YWN5Rm9udFNpemUgfHwgU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChjc3NQcmltaXRpdmVFcXVp
dmFsZW50LCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSwgZG9jdW1lbnQpID09IHBpeGVs
Rm9udFNpemUpCiAgICAgICAgICAgICByZXR1cm4gbGVnYWN5Rm9udFNpemU7CiAKICAgICAgICAg
cmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNTM4OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEwICs0NCwxMiBAQAogI2luY2x1ZGUgIk1lZGlhTGlz
dC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKICNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVy
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgot
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEu
aCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oIgogI2luY2x1ZGUgIlN0eWxl
U2hlZXRDb250ZW50cy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMjA0
LDcgKzIwNiw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKCkKIAogICAgICAgICBi
b29sIG1lZGlhUXVlcnlNYXRjaGVzID0gdHJ1ZTsKICAgICAgICAgaWYgKCFtX21lZGlhLmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBkb2N1bWVudFN0eWxlID0g
U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JEb2N1bWVudChkb2N1bWVudCgpKTsKKyAgICAgICAgICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gZG9jdW1lbnRTdHlsZSA9IFN0eWxlOjpyZXNvbHZlRm9yRG9j
dW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVk
aWEgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4KG1fbWVk
aWEpOwogICAgICAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBldmFsdWF0b3IoZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+dmlldygpLT5tZWRpYVR5cGUoKSwgZG9jdW1lbnQoKS0+ZnJhbWUoKSwgZG9j
dW1lbnRTdHlsZS5nZXQoKSk7CiAgICAgICAgICAgICBtZWRpYVF1ZXJ5TWF0Y2hlcyA9IGV2YWx1
YXRvci5ldmFsKG1lZGlhLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24gMTUzODkzKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTcxNiw2ICsxNzE2LDQ1IEBAIExheW91dEJveEV4dGVudCBSZW5kZXJTdHlsZTo6aW1hZ2VPdXRz
ZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5pbmVQaWVjZUltYWdlOjpjb21wdXRlT3V0
c2V0KGltYWdlLm91dHNldCgpLmxlZnQoKSwgYm9yZGVyTGVmdFdpZHRoKCkpKTsKIH0KIAordm9p
ZCBSZW5kZXJTdHlsZTo6Z2V0Rm9udEFuZEdseXBoT3JpZW50YXRpb24oRm9udE9yaWVudGF0aW9u
JiBmb250T3JpZW50YXRpb24sIE5vbkNKS0dseXBoT3JpZW50YXRpb24mIGdseXBoT3JpZW50YXRp
b24pCit7CisgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKKyAgICAgICAgZm9u
dE9yaWVudGF0aW9uID0gSG9yaXpvbnRhbDsKKyAgICAgICAgZ2x5cGhPcmllbnRhdGlvbiA9IE5v
bkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0OworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgc3dpdGNoICh0ZXh0T3JpZW50YXRpb24oKSkgeworICAgIGNhc2UgVGV4dE9yaWVu
dGF0aW9uVmVydGljYWxSaWdodDoKKyAgICAgICAgZm9udE9yaWVudGF0aW9uID0gVmVydGljYWw7
CisgICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0aW9uVmVydGlj
YWxSaWdodDsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVGV4dE9yaWVudGF0aW9uVXByaWdo
dDoKKyAgICAgICAgZm9udE9yaWVudGF0aW9uID0gVmVydGljYWw7CisgICAgICAgIGdseXBoT3Jp
ZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0aW9uVXByaWdodDsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVGV4dE9yaWVudGF0aW9uU2lkZXdheXM6CisgICAgICAgIGlmICh3cml0aW5n
TW9kZSgpID09IExlZnRUb1JpZ2h0V3JpdGluZ01vZGUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBtYXAgdG8gc2lkZXdheXMtbGVmdCwgd2hpY2ggaXMgbm90IHN1cHBvcnRl
ZCB5ZXQuCisgICAgICAgICAgICBmb250T3JpZW50YXRpb24gPSBWZXJ0aWNhbDsKKyAgICAgICAg
ICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0aW9uVmVydGljYWxSaWdo
dDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb250T3JpZW50YXRp
b24gPSBIb3Jpem9udGFsOworICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5cGhP
cmllbnRhdGlvblZlcnRpY2FsUmlnaHQ7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFRleHRP
cmllbnRhdGlvblNpZGV3YXlzUmlnaHQ6CisgICAgICAgIGZvbnRPcmllbnRhdGlvbiA9IEhvcml6
b250YWw7CisgICAgICAgIGdseXBoT3JpZW50YXRpb24gPSBOb25DSktHbHlwaE9yaWVudGF0aW9u
VmVydGljYWxSaWdodDsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBmb250T3JpZW50YXRpb24gPSBIb3Jpem9udGFs
OworICAgICAgICBnbHlwaE9yaWVudGF0aW9uID0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRp
Y2FsUmlnaHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyU3R5bGU6
OnNldEJvcmRlckltYWdlU291cmNlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UpCiB7CiAg
ICAgaWYgKHN1cnJvdW5kLT5ib3JkZXIubV9pbWFnZS5pbWFnZSgpID09IGltYWdlLmdldCgpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJl
dmlzaW9uIDE1Mzg5MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NTcsNiArNTU3LDcgQEAgcHVibGljOgogICAgIGZs
b2F0IHNwZWNpZmllZEZvbnRTaXplKCkgY29uc3Q7CiAgICAgZmxvYXQgY29tcHV0ZWRGb250U2l6
ZSgpIGNvbnN0OwogICAgIGludCBmb250U2l6ZSgpIGNvbnN0OworICAgIHZvaWQgZ2V0Rm9udEFu
ZEdseXBoT3JpZW50YXRpb24oRm9udE9yaWVudGF0aW9uJiwgTm9uQ0pLR2x5cGhPcmllbnRhdGlv
biYpOwogCiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKICAgICBmbG9hdCB0ZXh0QXV0b3Np
emluZ011bHRpcGxpZXIoKSBjb25zdCB7IHJldHVybiB2aXN1YWwtPm1fdGV4dEF1dG9zaXppbmdN
dWx0aXBsaWVyOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDE1Mzg5MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCiAjaW5j
bHVkZSAiU1ZHUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3gu
aCIKKyNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogCkBAIC0yNDEsNyArMjQy
LDcgQEAgdm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpjb21wdXRlTmV3U2NhbAogICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24oc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKIAog
ICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGJldHRlciBoYW5kbGUgdGhlIGNhc2Ugd2hlbiB3ZSBj
b21wdXRlIHZlcnkgc21hbGwgZm9udHMgYmVsb3cgKGJlbG93IDFwdCkuCi0gICAgZm9udERlc2Ny
aXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNpemVGcm9t
U3BlY2lmaWVkU2l6ZShkb2N1bWVudCwgc2NhbGluZ0ZhY3RvciwgZm9udERlc2NyaXB0aW9uLmlz
QWJzb2x1dGVTaXplKCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSwgRG9Ob3RVc2VT
bWFydE1pbmltdW1Gb3JGb250U2l6ZSkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZUZvclNWR0lubGlu
ZVRleHQoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uaXNB
YnNvbHV0ZVNpemUoKSwgc2NhbGluZ0ZhY3RvciwgZG9jdW1lbnQpKTsKIAogICAgIHNjYWxlZEZv
bnQgPSBGb250KGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7CiAgICAgc2NhbGVkRm9udC51cGRhdGUo
c3R5bGVSZXNvbHZlci0+Zm9udFNlbGVjdG9yKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZl
bGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0QG5pY2tzaGFua3MuY29tKQorICogQ29weXJpZ2h0IChD
KSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4
ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9y
dW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKKworI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBTdHlsZSB7CisKK2VudW0gRVNtYXJ0TWluaW11
bUZvckZvbnRTaXplIHsgRG9Ob3RVc2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSwgVXNlU21hcnRN
aW5pbXVtRm9yRm9udEZpemUgfTsKKworc3RhdGljIGZsb2F0IGNvbXB1dGVkRm9udFNpemVGcm9t
U3BlY2lmaWVkU2l6ZShmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIGlzQWJzb2x1dGVTaXplLCBm
bG9hdCB6b29tRmFjdG9yLCBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUgdXNlU21hcnRNaW5pbXVt
Rm9yRm9udFNpemUsIGNvbnN0IFNldHRpbmdzKiBzZXR0aW5ncykKK3sKKyAgICAvLyBUZXh0IHdp
dGggYSAwcHggZm9udCBzaXplIHNob3VsZCBub3QgYmUgdmlzaWJsZSBhbmQgdGhlcmVmb3JlIG5l
ZWRzIHRvIGJlCisgICAgLy8gZXhlbXB0IGZyb20gbWluaW11bSBmb250IHNpemUgcnVsZXMuIEFj
aWQzIHJlbGllcyBvbiB0aGlzIGZvciBwaXhlbC1wZXJmZWN0CisgICAgLy8gcmVuZGVyaW5nLiBU
aGlzIGlzIGFsc28gY29tcGF0aWJsZSB3aXRoIG90aGVyIGJyb3dzZXJzIHRoYXQgaGF2ZSBtaW5p
bXVtCisgICAgLy8gZm9udCBzaXplIHNldHRpbmdzIChlLmcuIEZpcmVmb3gpLgorICAgIGlmIChm
YWJzZihzcGVjaWZpZWRTaXplKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNpbG9u
KCkpCisgICAgICAgIHJldHVybiAwLjBmOworCisgICAgLy8gV2Ugc3VwcG9ydCB0d28gdHlwZXMg
b2YgbWluaW11bSBmb250IHNpemUuIFRoZSBmaXJzdCBpcyBhIGhhcmQgb3ZlcnJpZGUgdGhhdCBh
cHBsaWVzIHRvCisgICAgLy8gYWxsIGZvbnRzLiBUaGlzIGlzICJtaW5TaXplLiIgVGhlIHNlY29u
ZCB0eXBlIG9mIG1pbmltdW0gZm9udCBzaXplIGlzIGEgInNtYXJ0IG1pbmltdW0iCisgICAgLy8g
dGhhdCBpcyBhcHBsaWVkIG9ubHkgd2hlbiB0aGUgV2ViIHBhZ2UgY2FuJ3Qga25vdyB3aGF0IHNp
emUgaXQgcmVhbGx5IGFza2VkIGZvciwgZS5nLiwKKyAgICAvLyB3aGVuIGl0IHVzZXMgbG9naWNh
bCBzaXplcyBsaWtlICJzbWFsbCIgb3IgZXhwcmVzc2VzIHRoZSBmb250LXNpemUgYXMgYSBwZXJj
ZW50YWdlIG9mCisgICAgLy8gdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgc2V0dGluZy4KKworICAg
IC8vIFdpdGggdGhlIHNtYXJ0IG1pbmltdW0sIHdlIG5ldmVyIHdhbnQgdG8gZ2V0IHNtYWxsZXIg
dGhhbiB0aGUgbWluaW11bSBmb250IHNpemUgdG8ga2VlcCBmb250cyByZWFkYWJsZS4KKyAgICAv
LyBIb3dldmVyIHdlIGFsd2F5cyBhbGxvdyB0aGUgcGFnZSB0byBzZXQgYW4gZXhwbGljaXQgcGl4
ZWwgc2l6ZSB0aGF0IGlzIHNtYWxsZXIsCisgICAgLy8gc2luY2Ugc2l0ZXMgd2lsbCBtaXMtcmVu
ZGVyIG90aGVyd2lzZSAoZS5nLiwgaHR0cDovL3d3dy5nYW1lc3BvdC5jb20gd2l0aCBhIDlweCBt
aW5pbXVtKS4KKworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybiAxLjBmOworCisg
ICAgaW50IG1pblNpemUgPSBzZXR0aW5ncy0+bWluaW11bUZvbnRTaXplKCk7CisgICAgaW50IG1p
bkxvZ2ljYWxTaXplID0gc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKTsKKyAgICBm
bG9hdCB6b29tZWRTaXplID0gc3BlY2lmaWVkU2l6ZSAqIHpvb21GYWN0b3I7CisKKyAgICAvLyBB
cHBseSB0aGUgaGFyZCBtaW5pbXVtIGZpcnN0LiBXZSBvbmx5IGFwcGx5IHRoZSBoYXJkIG1pbmlt
dW0gaWYgYWZ0ZXIgem9vbWluZyB3ZSdyZSBzdGlsbCB0b28gc21hbGwuCisgICAgaWYgKHpvb21l
ZFNpemUgPCBtaW5TaXplKQorICAgICAgICB6b29tZWRTaXplID0gbWluU2l6ZTsKKworICAgIC8v
IE5vdyBhcHBseSB0aGUgInNtYXJ0IG1pbmltdW0uIiBUaGlzIG1pbmltdW0gaXMgYWxzbyBvbmx5
IGFwcGxpZWQgaWYgd2UncmUgc3RpbGwgdG9vIHNtYWxsCisgICAgLy8gYWZ0ZXIgem9vbWluZy4g
VGhlIGZvbnQgc2l6ZSBtdXN0IGVpdGhlciBiZSByZWxhdGl2ZSB0byB0aGUgdXNlciBkZWZhdWx0
IG9yIHRoZSBvcmlnaW5hbCBzaXplCisgICAgLy8gbXVzdCBoYXZlIGJlZW4gYWNjZXB0YWJsZS4g
SW4gb3RoZXIgd29yZHMsIHdlIG9ubHkgYXBwbHkgdGhlIHNtYXJ0IG1pbmltdW0gd2hlbmV2ZXIg
d2UncmUgcG9zaXRpdmUKKyAgICAvLyBkb2luZyBzbyB3b24ndCBkaXNydXB0IHRoZSBsYXlvdXQu
CisgICAgaWYgKHVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXplICYmIHpvb21lZFNpemUgPCBtaW5M
b2dpY2FsU2l6ZSAmJiAoc3BlY2lmaWVkU2l6ZSA+PSBtaW5Mb2dpY2FsU2l6ZSB8fCAhaXNBYnNv
bHV0ZVNpemUpKQorICAgICAgICB6b29tZWRTaXplID0gbWluTG9naWNhbFNpemU7CisKKyAgICAv
LyBBbHNvIGNsYW1wIHRvIGEgcmVhc29uYWJsZSBtYXhpbXVtIHRvIHByZXZlbnQgaW5zYW5lIGZv
bnQgc2l6ZXMgZnJvbSBjYXVzaW5nIGNyYXNoZXMgb24gdmFyaW91cworICAgIC8vIHBsYXRmb3Jt
cyAoSSdtIGxvb2tpbmcgYXQgeW91LCBXaW5kb3dzLikKKyAgICByZXR1cm4gc3RkOjptaW4obWF4
aW11bUFsbG93ZWRGb250U2l6ZSwgem9vbWVkU2l6ZSk7Cit9CisKK2Zsb2F0IGNvbXB1dGVkRm9u
dFNpemVGcm9tU3BlY2lmaWVkU2l6ZShmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIGlzQWJzb2x1
dGVTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcywgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgZmxvYXQgem9vbUZhY3RvciA9IDEuMGY7
CisgICAgaWYgKCF1c2VTVkdab29tUnVsZXMpIHsKKyAgICAgICAgem9vbUZhY3RvciA9IHN0eWxl
LT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+
ZnJhbWUoKSkKKyAgICAgICAgICAgIHpvb21GYWN0b3IgKj0gZnJhbWUtPnRleHRab29tRmFjdG9y
KCk7CisgICAgfQorICAgIHJldHVybiBjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUo
c3BlY2lmaWVkU2l6ZSwgaXNBYnNvbHV0ZVNpemUsIHpvb21GYWN0b3IsIFVzZVNtYXJ0TWluaW11
bUZvckZvbnRGaXplLCBkb2N1bWVudC0+c2V0dGluZ3MoKSk7Cit9CisKK2Zsb2F0IGNvbXB1dGVk
Rm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZUZvclNWR0lubGluZVRleHQoZmxvYXQgc3BlY2lmaWVk
U2l6ZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgem9vbUZhY3RvciwgY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmll
ZFNpemUoc3BlY2lmaWVkU2l6ZSwgaXNBYnNvbHV0ZVNpemUsIHpvb21GYWN0b3IsIERvTm90VXNl
U21hcnRNaW5pbXVtRm9yRm9udFNpemUsIGRvY3VtZW50LT5zZXR0aW5ncygpKTsKK30KKworY29u
c3QgaW50IGZvbnRTaXplVGFibGVNYXggPSAxNjsKK2NvbnN0IGludCBmb250U2l6ZVRhYmxlTWlu
ID0gOTsKK2NvbnN0IGludCB0b3RhbEtleXdvcmRzID0gODsKKworLy8gV2luSUUvTmF2NCB0YWJs
ZSBmb3IgZm9udCBzaXplcy4gRGVzaWduZWQgdG8gbWF0Y2ggdGhlIGxlZ2FjeSBmb250IG1hcHBp
bmcgc3lzdGVtIG9mIEhUTUwuCitzdGF0aWMgY29uc3QgaW50IHF1aXJrc0ZvbnRTaXplVGFibGVb
Zm9udFNpemVUYWJsZU1heCAtIGZvbnRTaXplVGFibGVNaW4gKyAxXVt0b3RhbEtleXdvcmRzXSA9
Cit7CisgICAgeyA5LCAgICA5LCAgICAgOSwgICAgIDksICAgIDExLCAgICAxNCwgICAgMTgsICAg
IDI4IH0sCisgICAgeyA5LCAgICA5LCAgICAgOSwgICAgMTAsICAgIDEyLCAgICAxNSwgICAgMjAs
ICAgIDMxIH0sCisgICAgeyA5LCAgICA5LCAgICAgOSwgICAgMTEsICAgIDEzLCAgICAxNywgICAg
MjIsICAgIDM0IH0sCisgICAgeyA5LCAgICA5LCAgICAxMCwgICAgMTIsICAgIDE0LCAgICAxOCwg
ICAgMjQsICAgIDM3IH0sCisgICAgeyA5LCAgICA5LCAgICAxMCwgICAgMTMsICAgIDE2LCAgICAy
MCwgICAgMjYsICAgIDQwIH0sIC8vIGZpeGVkIGZvbnQgZGVmYXVsdCAoMTMpCisgICAgeyA5LCAg
ICA5LCAgICAxMSwgICAgMTQsICAgIDE3LCAgICAyMSwgICAgMjgsICAgIDQyIH0sCisgICAgeyA5
LCAgIDEwLCAgICAxMiwgICAgMTUsICAgIDE3LCAgICAyMywgICAgMzAsICAgIDQ1IH0sCisgICAg
eyA5LCAgIDEwLCAgICAxMywgICAgMTYsICAgIDE4LCAgICAyNCwgICAgMzIsICAgIDQ4IH0gLy8g
cHJvcG9ydGlvbmFsIGZvbnQgZGVmYXVsdCAoMTYpCit9OworLy8gSFRNTCAgICAgICAxICAgICAg
MiAgICAgIDMgICAgICA0ICAgICAgNSAgICAgIDYgICAgICA3CisvLyBDU1MgIHh4cyAgIHhzICAg
ICBzICAgICAgbSAgICAgIGwgICAgIHhsICAgICB4eGwKKy8vICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisvLyAgICAgICAgICAgICAgICAgICAgICB1c2VyIHByZWYKKworLy8gU3RyaWN0IG1v
ZGUgdGFibGUgbWF0Y2hlcyBNYWNJRSBhbmQgTW96aWxsYSdzIHNldHRpbmdzIGV4YWN0bHkuCitz
dGF0aWMgY29uc3QgaW50IHN0cmljdEZvbnRTaXplVGFibGVbZm9udFNpemVUYWJsZU1heCAtIGZv
bnRTaXplVGFibGVNaW4gKyAxXVt0b3RhbEtleXdvcmRzXSA9Cit7CisgICAgeyA5LCAgICA5LCAg
ICAgOSwgICAgIDksICAgIDExLCAgICAxNCwgICAgMTgsICAgIDI3IH0sCisgICAgeyA5LCAgICA5
LCAgICAgOSwgICAgMTAsICAgIDEyLCAgICAxNSwgICAgMjAsICAgIDMwIH0sCisgICAgeyA5LCAg
ICA5LCAgICAxMCwgICAgMTEsICAgIDEzLCAgICAxNywgICAgMjIsICAgIDMzIH0sCisgICAgeyA5
LCAgICA5LCAgICAxMCwgICAgMTIsICAgIDE0LCAgICAxOCwgICAgMjQsICAgIDM2IH0sCisgICAg
eyA5LCAgIDEwLCAgICAxMiwgICAgMTMsICAgIDE2LCAgICAyMCwgICAgMjYsICAgIDM5IH0sIC8v
IGZpeGVkIGZvbnQgZGVmYXVsdCAoMTMpCisgICAgeyA5LCAgIDEwLCAgICAxMiwgICAgMTQsICAg
IDE3LCAgICAyMSwgICAgMjgsICAgIDQyIH0sCisgICAgeyA5LCAgIDEwLCAgICAxMywgICAgMTUs
ICAgIDE4LCAgICAyMywgICAgMzAsICAgIDQ1IH0sCisgICAgeyA5LCAgIDEwLCAgICAxMywgICAg
MTYsICAgIDE4LCAgICAyNCwgICAgMzIsICAgIDQ4IH0gLy8gcHJvcG9ydGlvbmFsIGZvbnQgZGVm
YXVsdCAoMTYpCit9OworLy8gSFRNTCAgICAgICAxICAgICAgMiAgICAgIDMgICAgICA0ICAgICAg
NSAgICAgIDYgICAgICA3CisvLyBDU1MgIHh4cyAgIHhzICAgICBzICAgICAgbSAgICAgIGwgICAg
IHhsICAgICB4eGwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICB8CisvLyAgICAgICAgICAg
ICAgICAgICAgICB1c2VyIHByZWYKKworLy8gRm9yIHZhbHVlcyBvdXRzaWRlIHRoZSByYW5nZSBv
ZiB0aGUgdGFibGUsIHdlIHVzZSBUb2RkIEZhaHJuZXIncyBzdWdnZXN0ZWQgc2NhbGUKKy8vIGZh
Y3RvcnMgZm9yIGVhY2gga2V5d29yZCB2YWx1ZS4KK3N0YXRpYyBjb25zdCBmbG9hdCBmb250U2l6
ZUZhY3RvcnNbdG90YWxLZXl3b3Jkc10gPSB7IDAuNjBmLCAwLjc1ZiwgMC44OWYsIDEuMGYsIDEu
MmYsIDEuNWYsIDIuMGYsIDMuMGYgfTsKKworZmxvYXQgZm9udFNpemVGb3JLZXl3b3JkKHVuc2ln
bmVkIGtleXdvcmRJRCwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplLCBjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQpCit7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNl
dHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgcmV0dXJuIDEuMGY7CisKKyAg
ICBib29sIHF1aXJrc01vZGUgPSBkb2N1bWVudC0+aW5RdWlya3NNb2RlKCk7CisgICAgaW50IG1l
ZGl1bVNpemUgPSBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplID8gc2V0dGluZ3MtPmRlZmF1bHRG
aXhlZEZvbnRTaXplKCkgOiBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCk7CisgICAgaWYgKG1l
ZGl1bVNpemUgPj0gZm9udFNpemVUYWJsZU1pbiAmJiBtZWRpdW1TaXplIDw9IGZvbnRTaXplVGFi
bGVNYXgpIHsKKyAgICAgICAgLy8gTG9vayB1cCB0aGUgZW50cnkgaW4gdGhlIHRhYmxlLgorICAg
ICAgICBpbnQgcm93ID0gbWVkaXVtU2l6ZSAtIGZvbnRTaXplVGFibGVNaW47CisgICAgICAgIGlu
dCBjb2wgPSAoa2V5d29yZElEIC0gQ1NTVmFsdWVYeFNtYWxsKTsKKyAgICAgICAgcmV0dXJuIHF1
aXJrc01vZGUgPyBxdWlya3NGb250U2l6ZVRhYmxlW3Jvd11bY29sXSA6IHN0cmljdEZvbnRTaXpl
VGFibGVbcm93XVtjb2xdOworICAgIH0KKworICAgIC8vIFZhbHVlIGlzIG91dHNpZGUgdGhlIHJh
bmdlIG9mIHRoZSB0YWJsZS4gQXBwbHkgdGhlIHNjYWxlIGZhY3RvciBpbnN0ZWFkLgorICAgIGZs
b2F0IG1pbkxvZ2ljYWxTaXplID0gbWF4KHNldHRpbmdzLT5taW5pbXVtTG9naWNhbEZvbnRTaXpl
KCksIDEpOworICAgIHJldHVybiBtYXgoZm9udFNpemVGYWN0b3JzW2tleXdvcmRJRCAtIENTU1Zh
bHVlWHhTbWFsbF0gKiBtZWRpdW1TaXplLCBtaW5Mb2dpY2FsU2l6ZSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitzdGF0aWMgaW50IGZpbmROZWFyZXN0TGVnYWN5Rm9udFNpemUoaW50IHBp
eGVsRm9udFNpemUsIGNvbnN0IFQqIHRhYmxlLCBpbnQgbXVsdGlwbGllcikKK3sKKyAgICAvLyBJ
Z25vcmUgdGFibGVbMF0gYmVjYXVzZSB4eC1zbWFsbCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFu
eSBsZWdhY3kgZm9udCBzaXplLgorICAgIGZvciAoaW50IGkgPSAxOyBpIDwgdG90YWxLZXl3b3Jk
cyAtIDE7IGkrKykgeworICAgICAgICBpZiAocGl4ZWxGb250U2l6ZSAqIDIgPCAodGFibGVbaV0g
KyB0YWJsZVtpICsgMV0pICogbXVsdGlwbGllcikKKyAgICAgICAgICAgIHJldHVybiBpOworICAg
IH0KKyAgICByZXR1cm4gdG90YWxLZXl3b3JkcyAtIDE7Cit9CisKK2ludCBsZWdhY3lGb250U2l6
ZUZvclBpeGVsU2l6ZShpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRVc2VGaXhlZERlZmF1
bHRTaXplLCBjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAg
cmV0dXJuIDE7CisKKyAgICBib29sIHF1aXJrc01vZGUgPSBkb2N1bWVudC0+aW5RdWlya3NNb2Rl
KCk7CisgICAgaW50IG1lZGl1bVNpemUgPSBzaG91bGRVc2VGaXhlZERlZmF1bHRTaXplID8gc2V0
dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCkgOiBzZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXpl
KCk7CisgICAgaWYgKG1lZGl1bVNpemUgPj0gZm9udFNpemVUYWJsZU1pbiAmJiBtZWRpdW1TaXpl
IDw9IGZvbnRTaXplVGFibGVNYXgpIHsKKyAgICAgICAgaW50IHJvdyA9IG1lZGl1bVNpemUgLSBm
b250U2l6ZVRhYmxlTWluOworICAgICAgICByZXR1cm4gZmluZE5lYXJlc3RMZWdhY3lGb250U2l6
ZTxpbnQ+KHBpeGVsRm9udFNpemUsIHF1aXJrc01vZGUgPyBxdWlya3NGb250U2l6ZVRhYmxlW3Jv
d10gOiBzdHJpY3RGb250U2l6ZVRhYmxlW3Jvd10sIDEpOworICAgIH0KKworICAgIHJldHVybiBm
aW5kTmVhcmVzdExlZ2FjeUZvbnRTaXplPGZsb2F0PihwaXhlbEZvbnRTaXplLCBmb250U2l6ZUZh
Y3RvcnMsIG1lZGl1bVNpemUpOworfQorCit9Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTQgQEAKKyAgICAvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zX2gKKyNkZWZpbmUgU3R5bGVGb250
U2l6ZUZ1bmN0aW9uc19oCisKKyNpbmNsdWRlICJGb250T3JpZW50YXRpb24uaCIKKyNpbmNsdWRl
ICJOb25DSktHbHlwaE9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFJlbmRlclN0
eWxlOworY2xhc3MgU2V0dGluZ3M7CisKK25hbWVzcGFjZSBTdHlsZSB7CisKK2Zsb2F0IGNvbXB1
dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIGlz
QWJzb2x1dGVTaXplLCBib29sIHVzZVNWR1pvb21SdWxlcywgY29uc3QgUmVuZGVyU3R5bGUqLCBj
b25zdCBEb2N1bWVudCopOworZmxvYXQgY29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXpl
Rm9yU1ZHSW5saW5lVGV4dChmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIGlzQWJzb2x1dGVTaXpl
LCBmbG9hdCB6b29tRmFjdG9yLCBjb25zdCBEb2N1bWVudCopOworCisvLyBHaXZlbiBhIENTUyBr
ZXl3b3JkIGlkIGluIHRoZSByYW5nZSAoQ1NTVmFsdWVYeFNtYWxsIHRvIENTU1ZhbHVlV2Via2l0
WHh4TGFyZ2UpLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisvLyB0aGUgY29ycmVjdCBmb250
IHNpemUgc2NhbGVkIHJlbGF0aXZlIHRvIHRoZSB1c2VyJ3MgZGVmYXVsdCAobWVkaXVtKS4KK2Zs
b2F0IGZvbnRTaXplRm9yS2V5d29yZCh1bnNpZ25lZCBrZXl3b3JkSUQsIGJvb2wgc2hvdWxkVXNl
Rml4ZWREZWZhdWx0U2l6ZSwgY29uc3QgRG9jdW1lbnQqKTsKKworLy8gR2l2ZW4gYSBmb250IHNp
emUgaW4gcGl4ZWwsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gbGVnYWN5IGZvbnQgc2l6ZSBi
ZXR3ZWVuIDEgYW5kIDcuCitpbnQgbGVnYWN5Rm9udFNpemVGb3JQaXhlbFNpemUoaW50IHBpeGVs
Rm9udFNpemUsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSwgY29uc3QgRG9jdW1lbnQq
KTsKKworfQorfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVz
b2x2ZUZvckRvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNl
biAoa2RlQGNhcmV3b2xmLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xh
cyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3Nr
dXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRv
cmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oIgorCisjaW5jbHVkZSAiQ1NTRm9udFNlbGVj
dG9yLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCisjaW5jbHVk
ZSAiTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisj
aW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCisjaW5j
bHVkZSAiU3R5bGVSZXNvbHZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBTdHlsZSB7CisKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc29sdmVGb3JEb2N1bWVudChj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQt
PmZyYW1lKCk7CisKKyAgICAvLyBIVE1MNSBzdGF0ZXMgdGhhdCBzZWFtbGVzcyBpZnJhbWVzIHNo
b3VsZCByZXBsYWNlIGRlZmF1bHQgQ1NTIHZhbHVlcworICAgIC8vIHdpdGggdmFsdWVzIGluaGVy
aXRlZCBmcm9tIHRoZSBjb250YWluaW5nIGlmcmFtZSBlbGVtZW50LiBIb3dldmVyLAorICAgIC8v
IHNvbWUgdmFsdWVzIChzdWNoIGFzIHRoZSBjYXNlIG9mIGRlc2lnbk1vZGUgPSAib24iKSBzdGls
bCBuZWVkIHRvCisgICAgLy8gYmUgc2V0IGJ5IHRoaXMgImRvY3VtZW50IHN0eWxlIi4KKyAgICBS
ZWZQdHI8UmVuZGVyU3R5bGU+IGRvY3VtZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7
CisgICAgYm9vbCBzZWFtbGVzc1dpdGhQYXJlbnQgPSBkb2N1bWVudC0+c2hvdWxkRGlzcGxheVNl
YW1sZXNzbHlXaXRoUGFyZW50KCk7CisgICAgaWYgKHNlYW1sZXNzV2l0aFBhcmVudCkgeworICAg
ICAgICBSZW5kZXJTdHlsZSogaWZyYW1lU3R5bGUgPSBkb2N1bWVudC0+c2VhbWxlc3NQYXJlbnRJ
RnJhbWUoKS0+cmVuZGVyU3R5bGUoKTsKKyAgICAgICAgaWYgKGlmcmFtZVN0eWxlKQorICAgICAg
ICAgICAgZG9jdW1lbnRTdHlsZS0+aW5oZXJpdEZyb20oaWZyYW1lU3R5bGUpOworICAgIH0KKwor
ICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGljaCB2YWx1ZXMgYmVsb3cgd2Ugd2FudCB0
byBvdmVycmlkZSBpbiB0aGUgc2VhbWxlc3MgY2FzZSEKKyAgICBkb2N1bWVudFN0eWxlLT5zZXRE
aXNwbGF5KEJMT0NLKTsKKyAgICBpZiAoIXNlYW1sZXNzV2l0aFBhcmVudCkgeworICAgICAgICBk
b2N1bWVudFN0eWxlLT5zZXRSVExPcmRlcmluZyhkb2N1bWVudC0+dmlzdWFsbHlPcmRlcmVkKCkg
PyBWaXN1YWxPcmRlciA6IExvZ2ljYWxPcmRlcik7CisgICAgICAgIGRvY3VtZW50U3R5bGUtPnNl
dFpvb20oZnJhbWUgJiYgIWRvY3VtZW50LT5wcmludGluZygpID8gZnJhbWUtPnBhZ2Vab29tRmFj
dG9yKCkgOiAxKTsKKyAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0UGFnZVNjYWxlVHJhbnNmb3Jt
KGZyYW1lID8gZnJhbWUtPmZyYW1lU2NhbGVGYWN0b3IoKSA6IDEpOworICAgICAgICBkb2N1bWVu
dFN0eWxlLT5zZXRMb2NhbGUoZG9jdW1lbnQtPmNvbnRlbnRMYW5ndWFnZSgpKTsKKyAgICB9Cisg
ICAgLy8gVGhpcyBvdmVycmlkZXMgYW55IC13ZWJraXQtdXNlci1tb2RpZnkgaW5oZXJpdGVkIGZy
b20gdGhlIHBhcmVudCBpZnJhbWUuCisgICAgZG9jdW1lbnRTdHlsZS0+c2V0VXNlck1vZGlmeShk
b2N1bWVudC0+aW5EZXNpZ25Nb2RlKCkgPyBSRUFEX1dSSVRFIDogUkVBRF9PTkxZKTsKKworICAg
IEVsZW1lbnQqIGRvY0VsZW1lbnQgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAg
UmVuZGVyT2JqZWN0KiBkb2NFbGVtZW50UmVuZGVyZXIgPSBkb2NFbGVtZW50ID8gZG9jRWxlbWVu
dC0+cmVuZGVyZXIoKSA6IDA7CisgICAgaWYgKGRvY0VsZW1lbnRSZW5kZXJlcikgeworICAgICAg
ICAvLyBVc2UgdGhlIGRpcmVjdGlvbiBhbmQgd3JpdGluZy1tb2RlIG9mIHRoZSBib2R5IHRvIHNl
dCB0aGUKKyAgICAgICAgLy8gdmlld3BvcnQncyBkaXJlY3Rpb24gYW5kIHdyaXRpbmctbW9kZSB1
bmxlc3MgdGhlIHByb3BlcnR5IGlzIHNldCBvbiB0aGUgZG9jdW1lbnQgZWxlbWVudC4KKyAgICAg
ICAgLy8gSWYgdGhlcmUgaXMgbm8gYm9keSwgdGhlbiB1c2UgdGhlIGRvY3VtZW50IGVsZW1lbnQu
CisgICAgICAgIFJlbmRlck9iamVjdCogYm9keVJlbmRlcmVyID0gZG9jdW1lbnQtPmJvZHkoKSA/
IGRvY3VtZW50LT5ib2R5KCktPnJlbmRlcmVyKCkgOiAwOworICAgICAgICBpZiAoYm9keVJlbmRl
cmVyICYmICFkb2N1bWVudC0+d3JpdGluZ01vZGVTZXRPbkRvY3VtZW50RWxlbWVudCgpKQorICAg
ICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0V3JpdGluZ01vZGUoYm9keVJlbmRlcmVyLT5zdHls
ZSgpLT53cml0aW5nTW9kZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZG9jdW1lbnRT
dHlsZS0+c2V0V3JpdGluZ01vZGUoZG9jRWxlbWVudFJlbmRlcmVyLT5zdHlsZSgpLT53cml0aW5n
TW9kZSgpKTsKKyAgICAgICAgaWYgKGJvZHlSZW5kZXJlciAmJiAhZG9jdW1lbnQtPmRpcmVjdGlv
blNldE9uRG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRE
aXJlY3Rpb24oYm9keVJlbmRlcmVyLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldERpcmVjdGlvbihkb2NFbGVtZW50UmVu
ZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpKTsKKyAgICB9CisKKyAgICBpZiAoZnJhbWUpIHsK
KyAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKSkgeworICAg
ICAgICAgICAgY29uc3QgUGFnaW5hdGlvbiYgcGFnaW5hdGlvbiA9IGZyYW1lVmlldy0+cGFnaW5h
dGlvbigpOworICAgICAgICAgICAgaWYgKHBhZ2luYXRpb24ubW9kZSAhPSBQYWdpbmF0aW9uOjpV
bnBhZ2luYXRlZCkgeworICAgICAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldENvbHVtblN0
eWxlc0Zyb21QYWdpbmF0aW9uTW9kZShwYWdpbmF0aW9uLm1vZGUpOworICAgICAgICAgICAgICAg
IGRvY3VtZW50U3R5bGUtPnNldENvbHVtbkdhcChwYWdpbmF0aW9uLmdhcCk7CisgICAgICAgICAg
ICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh2aWV3LT5oYXNDb2x1bW5zKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICB2aWV3LT51cGRhdGVDb2x1bW5JbmZvRnJvbVN0eWxlKGRvY3VtZW50U3R5bGUu
Z2V0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIFNlYW1sZXNzIGlmcmFtZXMgd2FudCB0byBpbmhlcml0IHRoZWlyIGZvbnQg
ZnJvbSB0aGVpciBwYXJlbnQgaWZyYW1lLCBzbyBlYXJseSByZXR1cm4gYmVmb3JlIHNldHRpbmcg
dGhlIGZvbnQuCisgICAgaWYgKHNlYW1sZXNzV2l0aFBhcmVudCkKKyAgICAgICAgcmV0dXJuIGRv
Y3VtZW50U3R5bGUucmVsZWFzZSgpOworCisgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlw
dGlvbjsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U2NyaXB0KGxvY2FsZVRvU2NyaXB0Q29kZUZv
ckZvbnRTZWxlY3Rpb24oZG9jdW1lbnRTdHlsZS0+bG9jYWxlKCkpKTsKKyAgICBpZiAoU2V0dGlu
Z3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCkpIHsKKyAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFVzZVByaW50ZXJGb250KGRvY3VtZW50LT5wcmludGluZygpIHx8ICFzZXR0aW5n
cy0+c2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQoKSk7CisgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5mb250UmVuZGVyaW5nTW9kZSgpKTsKKyAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFyZEZvbnQgPSBzZXR0aW5ncy0+c3RhbmRh
cmRGb250RmFtaWx5KGZvbnREZXNjcmlwdGlvbi5zY3JpcHQoKSk7CisgICAgICAgIGlmICghc3Rh
bmRhcmRGb250LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdl
bmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSk7CisgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KHN0YW5kYXJkRm9udCk7CisgICAgICAgIH0K
KyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0g
Q1NTVmFsdWVYeFNtYWxsICsgMSk7CisgICAgICAgIGludCBzaXplID0gZm9udFNpemVGb3JLZXl3
b3JkKENTU1ZhbHVlTWVkaXVtLCBmYWxzZSwgZG9jdW1lbnQpOworICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKKyAgICAgICAgYm9vbCB1c2VTVkdab29tUnVs
ZXMgPSBkb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpOworICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKGNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShzaXplLCBm
b250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzLCBkb2N1bWVu
dFN0eWxlLmdldCgpLCBkb2N1bWVudCkpOworICAgIH0gZWxzZQorICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0VXNlUHJpbnRlckZvbnQoZG9jdW1lbnQtPnByaW50aW5nKCkpOworCisgICAgRm9u
dE9yaWVudGF0aW9uIGZvbnRPcmllbnRhdGlvbjsKKyAgICBOb25DSktHbHlwaE9yaWVudGF0aW9u
IGdseXBoT3JpZW50YXRpb247CisgICAgZG9jdW1lbnRTdHlsZS0+Z2V0Rm9udEFuZEdseXBoT3Jp
ZW50YXRpb24oZm9udE9yaWVudGF0aW9uLCBnbHlwaE9yaWVudGF0aW9uKTsKKyAgICBmb250RGVz
Y3JpcHRpb24uc2V0T3JpZW50YXRpb24oZm9udE9yaWVudGF0aW9uKTsKKyAgICBmb250RGVzY3Jp
cHRpb24uc2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihnbHlwaE9yaWVudGF0aW9uKTsKKworICAg
IGRvY3VtZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworCisg
ICAgQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IgPSBkb2N1bWVudC0+c3R5bGVSZXNvbHZl
cklmRXhpc3RzKCkgPyBkb2N1bWVudC0+c3R5bGVSZXNvbHZlcklmRXhpc3RzKCktPmZvbnRTZWxl
Y3RvcigpIDogMDsKKyAgICBkb2N1bWVudFN0eWxlLT5mb250KCkudXBkYXRlKGZvbnRTZWxlY3Rv
cik7CisKKyAgICByZXR1cm4gZG9jdW1lbnRTdHlsZS5yZWxlYXNlKCk7Cit9CisKK30KK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3Vt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3R5bGVSZXNvbHZlRm9yRG9jdW1l
bnRfaAorI2RlZmluZSBTdHlsZVJlc29sdmVGb3JEb2N1bWVudF9oCisKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU0ZvbnRTZWxl
Y3RvcjsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgUmVuZGVyU3R5bGU7CisKK25hbWVzcGFjZSBT
dHlsZSB7CisKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc29sdmVGb3JEb2N1bWVudChjb25z
dCBEb2N1bWVudCopOworCit9Cit9CisKKyNlbmRpZgo=
</data>
<flag name="review"
          id="230365"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="230368"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>