<?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>59101</bug_id>
          
          <creation_ts>2011-04-21 07:00:08 -0700</creation_ts>
          <short_desc>Split SVGGlyphIdentifier class out of SVGGlyphElement.h</short_desc>
          <delta_ts>2011-04-21 08:27:12 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>59085</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>389999</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-21 07:00:08 -0700</bug_when>
    <thetext>Split SVGGlyphIdentifier class out of SVGGlyphElement.h, rename it to SVGGlyph and move it to platform/graphics.
It will be used in follow-up patches, that will integrate SVGGlyph &amp; GlyphPage.

Several utility functions should be moved from SVGFont.cpp to SVGGlyph.cpp, as that&apos;s the logical place they belong into.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390000</commentid>
    <comment_count>1</comment_count>
      <attachid>90526</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-21 07:05:02 -0700</bug_when>
    <thetext>Created attachment 90526
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390013</commentid>
    <comment_count>2</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-04-21 07:34:22 -0700</bug_when>
    <thetext>Landed in r84498.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390049</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-21 08:27:12 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/84498 might have broken SnowLeopard Intel Release (Tests)
The following tests are not passing:
http/tests/xmlhttprequest/failed-auth.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90526</attachid>
            <date>2011-04-21 07:05:02 -0700</date>
            <delta_ts>2011-04-21 07:18:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>SVGGlyph-h-patch.diff</filename>
            <type>text/plain</type>
            <size>94187</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NDk1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTEtMDQtMjEgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgU1ZHR2x5cGhJZGVudGlmaWVyIGNsYXNz
IG91dCBvZiBTVkdHbHlwaEVsZW1lbnQuaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTkxMDEKKworICAgICAgICBNb3ZlIFNWR0dseXBoSWRlbnRpZmll
ciBjbGFzcyBvdXQgb2YgU1ZHR2x5cGhFbGVtZW50LmgsIHBsYWNlIGl0IGluIHBsYXRmb3JtL2dy
YXBoaWNzL1NWR0dseXBoLmgKKyAgICAgICAgYW5kIHJlbmFtZSB0aGUgY29udGFpbmVkIHN0cnVj
dCB0byBTVkdHbHlwaC4gSXQgd2lsbCBiZSB1c2VkIGluIGZvbGxvdy11cCBwYXRjaGVzIHRoYXQg
d2lsbCBpbnRlZ3JhdGUgU1ZHR2x5cGggJiBHbHlwaFBhZ2UuCisKKyAgICAgICAgU2V2ZXJhbCB1
dGlsaXR5IGZ1bmN0aW9ucyBhcmUgbW92ZWQgZnJvbSBTVkdGb250LmNwcCB0byBTVkdHbHlwaC5j
cHAsIGFzIHRoYXQncyB0aGUgcGxhY2Ugd2hlcmUgdGhleSByZWFsbHkgYmVsb25nIHRvLgorICAg
ICAgICBSZW5hbWVkIG5hbWVMZW5ndGggdG8gdW5pY29kZVN0cmluZ0xlbmd0aCBpbiB0aGUgU1ZH
R2x5cGggc3RydWN0IGZvciBjbGFyaXR5LgorCisgICAgICAgICogQW5kcm9pZC5tazogQWRkIFNW
R0dseXBoLmNwcC9oIHRvIGJ1aWxkLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4K
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUucHJvOiBEaXR0by4KKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TVkdHbHlwaC5jcHA6IENvcGllZCBmcm9tIHN2Zy9TVkdGb250LmNwcC4gUmVtb3ZlZCBl
dmVyeXRoaW5nIGV4Y2VwdCB0aGUgbWV0aG9kcyBsaXN0ZWQgYmVsb3csIHRoYXQgYmVsb25nIGhl
cmUuCisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzQXJhYmljRm9ybURldGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJzV2l0aEFyYWJpY0Zvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6aXNDb21wYXRpYmxlQXJhYmljRm9ybSk6CisgICAgICAgIChXZWJDb3JlOjppc0NvbXBhdGli
bGVHbHlwaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU1ZHR2x5cGguaDogQ29waWVk
IGZyb20gc3ZnL1NWR0dseXBoRWxlbWVudC5oLiBSZW5hbWVkIFNWR0dseXBoSWRlbnRpZmllciB0
byBTVkdHbHlwaC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0dseXBoOjpTVkdHbHlwaCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdHbHlwaDo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwOiBBZGFwdCBmb3IgU1ZHR2x5cGhJZGVudGlmaWVy
IC0+IFNWR0dseXBoIGFuZCBuYW1lTGVuZ3RoIC0+IHVuaWNvZGVTdHJpbmdMZW5ndGggcmVuYW1l
LgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKToKKyAg
ICAgICAgKiBzdmcvU1ZHRm9udC5jcHA6IERpdHRvLiBSZW1vdmUgaGVscGVyIGZ1bmN0aW9ucyB0
aGF0IGFyZSBub3cgbGl2aW5nIGluIFNWR0dseXBoLmNwcAorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dFJ1bldhbGtlcjo6d2Fsayk6CisgICAgICAgIChXZWJDb3JlOjpmbG9hdFdpZHRoVXNpbmdT
VkdGb250Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1RleHRVc2luZ1NWR0ZvbnRD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3VGV4dE1pc3NpbmdHbHlwaENhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250KToKKyAgICAg
ICAgKiBzdmcvU1ZHRm9udEVsZW1lbnQuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZvbnRFbGVtZW50OjpnZXRHbHlwaElkZW50aWZpZXJzRm9yU3RyaW5nKToKKyAgICAgICAgKiBz
dmcvU1ZHRm9udEVsZW1lbnQuaDogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0dseXBoRWxlbWVu
dC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBcmFiaWNGb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR2x5
cGhFbGVtZW50Ojppbmhlcml0VW5zcGVjaWZpZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlU1ZHR2x5cGhBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR2x5cGhF
bGVtZW50OjpidWlsZEdlbmVyaWNHbHlwaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHR2x5cGhFbGVtZW50OjpidWlsZEdseXBoSWRlbnRpZmllcik6CisgICAgICAgICogc3ZnL1NW
R0dseXBoRWxlbWVudC5oOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHR2x5cGhNYXAuaDogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaE1hcDo6YWRkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0dseXBoTWFwOjpjb21wYXJlR2x5cGhQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdHbHlwaE1hcDo6Z2V0KToKKwogMjAxMS0wNC0yMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxk
bWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gODQ0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9BbmRy
b2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC01NjIsNiArNTYyLDcgQEAgTE9DQUxfU1JDX0ZJTEVT
IDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAKIGlmZXEgKCQoRU5BQkxFX1NWRyksIHRydWUpCiBM
T0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKKwlwbGF0Zm9ybS9ncmFwaGlj
cy9TVkdHbHlwaC5jcHAgXAogCXBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0
U291cmNlLmNwcCBcCiAJcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBcCiAJ
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBcCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAkocmV2aXNpb24gODQ0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTU2NSw2ICsxNTY1LDcgQEAgSUYgKEVOQUJMRV9T
VkcpCiAgICAgICAgIGNzcy9TVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCiAgICAg
ICAgIGNzcy9TVkdDU1NQYXJzZXIuY3BwCiAgICAgICAgIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9y
LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TVkdHbHlwaC5jcHAKICAgICAgICAgcmVu
ZGVyaW5nL1BvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N0eWxl
L1NWR1JlbmRlclN0eWxlLmNwcAogICAgICAgICByZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5
bGVEZWZzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA4
NDQ5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI0NzIsNiArMjQ3Miw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmggXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N0cm9rZVN0eWxlQXBwbGllci5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TVkdHbHlwaC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NWR0dseXBoLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1RleHRSZW5kZXJpbmdNb2RlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1RleHRSdW4uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJh
bnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlz
aW9uIDg0NDkwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkp
CkBAIC04NDksNiArODQ5LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Sb3Vu
ZGVkSW50UmVjdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3Iu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvU1ZHR2x5cGguaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJlbmRlcmluZ01vZGUuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9UeXBlc2V0dGluZ0ZlYXR1cmVzLmgnLApAQCAtMzkwNCw2ICszOTA1LDcgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL1NWR0dseXBoLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvU3Ry
aW5nVHJ1bmNhdG9yLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvU3Ryb2tl
U3R5bGVBcHBsaWVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1RpbGUuaCcs
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gODQ0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtOTk2LDYgKzk5Niw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRJbnRSZWN0LmNwcCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU1ZHR2x5cGguY3BwIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA4NDQ5MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDgyNSw2ICszMDgyNSwxNCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcU1ZHR2x5cGguY3BwIgorCQkJ
CQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcU1ZHR2x5cGguaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQog
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHRleHRcVGV4dEJvdW5kYXJpZXMuY3BwIgog
CQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gODQ0OTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTE0MSw2ICsxNDEsOCBAQAogCQkwODc0NEJBQTBFREI3RDg2MDA0QzlFNjMgLyogV01MT25FdmVu
dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDg3NDRCQTkwRURCN0Q4NjAwNEM5RTYzIC8qIFdNTE9uRXZlbnRFbGVtZW50LmNwcCAqLzsg
fTsKIAkJMDg3NDRCQUUwRURCN0Q5MjAwNEM5RTYzIC8qIFdNTE9uRXZlbnRFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODc0NEJBRDBFREI3
RDkyMDA0QzlFNjMgLyogV01MT25FdmVudEVsZW1lbnQuaCAqLzsgfTsKIAkJMDg3Qjg0OTYxMjcy
Q0VDODAwQTE0NDE3IC8qIFNWR0FuaW1hdGVkQW5nbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4N0I4NDk1MTI3MkNFQzcwMEExNDQxNyAvKiBTVkdB
bmltYXRlZEFuZ2xlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMDg3RTBBRjYxMzYwNkQwQjAwRkE0QkE4IC8qIFNWR0dseXBoLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4N0UwQUY0MTM2MDZEMEIw
MEZBNEJBOCAvKiBTVkdHbHlwaC5jcHAgKi87IH07CisJCTA4N0UwQUY3MTM2MDZEMEIwMEZBNEJB
OCAvKiBTVkdHbHlwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDg3RTBBRjUxMzYwNkQwQjAwRkE0QkE4IC8qIFNWR0dseXBoLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDg3RkZBMEYwRUZGM0VEMzAw
OURCRDg4IC8qIFdNTEluc2VydGVkTGVnZW5kRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODdGRkEwRDBFRkYzRUQzMDA5REJEODggLyog
V01MSW5zZXJ0ZWRMZWdlbmRFbGVtZW50LmNwcCAqLzsgfTsKIAkJMDg3RkZBMTAwRUZGM0VEMzAw
OURCRDg4IC8qIFdNTEluc2VydGVkTGVnZW5kRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg3RkZBMEUwRUZGM0VEMzAwOURCRDg4IC8qIFdN
TEluc2VydGVkTGVnZW5kRWxlbWVudC5oICovOyB9OwogCQkwODgwN0I3NjBFRDcwOUFCMDAzRjY5
NzUgLyogV01MR29FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4ODA3QjZBMEVENzA5QUIwMDNGNjk3NSAvKiBXTUxHb0VsZW1lbnQuY3Bw
ICovOyB9OwpAQCAtNjU3NSw2ICs2NTc3LDggQEAKIAkJMDg3NDRCQTkwRURCN0Q4NjAwNEM5RTYz
IC8qIFdNTE9uRXZlbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdNTE9uRXZlbnRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDg3NDRCQUQwRURCN0Q5MjAwNEM5RTYzIC8qIFdNTE9uRXZlbnRFbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTE9uRXZlbnRFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4N0I4NDk1MTI3MkNFQzcwMEExNDQxNyAvKiBTVkdBbmlt
YXRlZEFuZ2xlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVk
QW5nbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDg3RTBBRjQxMzYwNkQwQjAw
RkE0QkE4IC8qIFNWR0dseXBoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNWR0dseXBoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDg3RTBBRjUx
MzYwNkQwQjAwRkE0QkE4IC8qIFNWR0dseXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR0dseXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4N0ZGQTBE
MEVGRjNFRDMwMDlEQkQ4OCAvKiBXTUxJbnNlcnRlZExlZ2VuZEVsZW1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MSW5zZXJ0ZWRMZWdlbmRFbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg3RkZBMEUwRUZGM0VEMzAwOURCRDg4
IC8qIFdNTEluc2VydGVkTGVnZW5kRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXTUxJbnNlcnRlZExlZ2VuZEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDg4MDdCNkEwRUQ3MDlBQjAwM0Y2OTc1IC8qIFdNTEdvRWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxHb0VsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc5MzQsNiArMTc5MzgsOCBAQAogCQkJCUIyQzNE
QTU0MEQwMDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5oICovLAogCQkJCUIyMzU0MEYw
MEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuY3BwICovLAogCQkJCUIyMzU0MEYx
MEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuaCAqLywKKwkJCQkwODdFMEFGNDEz
NjA2RDBCMDBGQTRCQTggLyogU1ZHR2x5cGguY3BwICovLAorCQkJCTA4N0UwQUY1MTM2MDZEMEIw
MEZBNEJBOCAvKiBTVkdHbHlwaC5oICovLAogCQkJCTkzMEZDNjg5MTA3MkI5MjgwMDQ1MjkzRSAv
KiBUZXh0UmVuZGVyaW5nTW9kZS5oICovLAogCQkJCUE4MjRCNDY0MEUyRUYyRUEwMDgxQTdCNyAv
KiBUZXh0UnVuLmggKi8sCiAJCQkJMzdDMjhBNjcxMEY2NTlDQzAwOEM3ODEzIC8qIFR5cGVzZXR0
aW5nRmVhdHVyZXMuaCAqLywKQEAgLTIzMDExLDYgKzIzMDE3LDcgQEAKIAkJCQk5NzdFMkUwRjEy
RjBGQzlDMDBDMTMzNzkgLyogWFNTRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODZCQkQw
RjEzNjAzOUMyMDA4QjE1RDggLyogR2x5cGguaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NzNCODZC
MTM2MDY0RUEwMEE1MjJDMiAvKiBHbHlwaFBhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTA4N0Uw
QUY3MTM2MDZEMEIwMEZBNEJBOCAvKiBTVkdHbHlwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTcy
MCw2ICsyNTcyNyw3IEBACiAJCQkJOTNGMTlCMDUwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9j
ZXNzb3JMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJF
QTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3RTJFMEUx
MkYwRkM5QzAwQzEzMzc5IC8qIFhTU0ZpbHRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwODdF
MEFGNjEzNjA2RDBCMDBGQTRCQTggLyogU1ZHR2x5cGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TVkdHbHlwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU1ZHR2x5cGguY3BwCShyZXZp
c2lvbiA4NDQ4MikJKGZyb20gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwOjg0NDgyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU1ZHR2x5cGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorI2luY2x1ZGUgIkZv
bnQuaCIKKworI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNW
R0lubGluZVRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIK
KyNpbmNsdWRlICJTVkdBbHRHbHlwaEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGb250RGF0YS5o
IgorI2luY2x1ZGUgIlNWR0ZvbnRFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVt
ZW50LmgiCisjaW5jbHVkZSAiU1ZHR2x5cGhFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHR2x5cGhN
YXAuaCIKKyNpbmNsdWRlICJTVkdNaXNzaW5nR2x5cGhFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIlRleHRSdW4u
aCIKKyNpbmNsdWRlICJYTUxOYW1lcy5oIgorCit1c2luZyBuYW1lc3BhY2UgV1RGOjpVbmljb2Rl
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydEVt
VW5pdFRvUGl4ZWwoZmxvYXQgZm9udFNpemUsIGZsb2F0IHVuaXRzUGVyRW0sIGZsb2F0IHZhbHVl
KQoreworICAgIGlmICghdW5pdHNQZXJFbSkKKyAgICAgICAgcmV0dXJuIDAuMGY7CisKKyAgICBy
ZXR1cm4gdmFsdWUgKiBmb250U2l6ZSAvIHVuaXRzUGVyRW07Cit9CisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc1ZlcnRpY2FsV3JpdGluZ01vZGUoY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlKQor
eworICAgIHJldHVybiBzdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBXTV9UQlJMIHx8IHN0eWxlLT53
cml0aW5nTW9kZSgpID09IFdNX1RCOyAKK30KKworLy8gSGVscGVyIGZ1bmN0aW9ucyB0byBkZXRl
cm1pbmUgdGhlIGFyYWJpYyBjaGFyYWN0ZXIgZm9ybXMgKGluaXRpYWwsIG1lZGlhbCwgdGVybWlu
YWwsIGlzb2xhdGVkKQorZW51bSBBcmFiaWNDaGFyU2hhcGluZ01vZGUgeworICAgIFNOb25lID0g
MCwKKyAgICBTUmlnaHQgPSAxLAorICAgIFNEdWFsID0gMgorfTsKKworc3RhdGljIGNvbnN0IEFy
YWJpY0NoYXJTaGFwaW5nTW9kZSBzX2FyYWJpY0NoYXJTaGFwaW5nTW9kZVsyMjJdID0geworICAg
IFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwgU0R1YWwgLCBTUmlnaHQsIFNEdWFsICwg
U1JpZ2h0LCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU1JpZ2h0LCAg
ICAgICAgICAgICAgICAgLyogMHgwNjIyIC0gMHgwNjJGICovCisgICAgU1JpZ2h0LCBTUmlnaHQs
IFNSaWdodCwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwg
U0R1YWwgLCBTRHVhbCAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCAv
KiAweDA2MzAgLSAweDA2M0YgKi8KKyAgICBTTm9uZSAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAs
IFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNSaWdodCwgU0R1YWwgLCBTRHVhbCAsIFNOb25lICwg
U05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIC8qIDB4MDY0MCAtIDB4MDY0
RiAqLworICAgIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAs
IFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwg
U05vbmUgLCBTTm9uZSAsIFNOb25lICwgLyogMHgwNjUwIC0gMHgwNjVGICovCisgICAgU05vbmUg
LCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAs
IFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwg
U05vbmUgLCAvKiAweDA2NjAgLSAweDA2NkYgKi8KKyAgICBTTm9uZSAsIFNSaWdodCwgU1JpZ2h0
LCBTUmlnaHQsIFNOb25lICwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwgU0R1YWwgLCBTRHVhbCAs
IFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIC8qIDB4MDY3
MCAtIDB4MDY3RiAqLworICAgIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwg
LCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQs
IFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwgLyogMHgwNjgwIC0gMHgwNjhGICovCisg
ICAgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0
LCBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAs
IFNEdWFsICwgU0R1YWwgLCAvKiAweDA2OTAgLSAweDA2OUYgKi8KKyAgICBTRHVhbCAsIFNEdWFs
ICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwg
LCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAs
IC8qIDB4MDZBMCAtIDB4MDZBRiAqLworICAgIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFs
ICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwg
LCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgLyogMHgwNkIwIC0gMHgw
NkJGICovCisgICAgU1JpZ2h0LCBTRHVhbCAsIFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdo
dCwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwgU0R1YWwg
LCBTUmlnaHQsIFNEdWFsICwgU1JpZ2h0LCAvKiAweDA2QzAgLSAweDA2Q0YgKi8KKyAgICBTRHVh
bCAsIFNEdWFsICwgU1JpZ2h0LCBTUmlnaHQsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25l
ICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUg
LCBTTm9uZSAsIC8qIDB4MDZEMCAtIDB4MDZERiAqLworICAgIFNOb25lICwgU05vbmUgLCBTTm9u
ZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25l
ICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgLyogMHgw
NkUwIC0gMHgwNkVGICovCisgICAgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9u
ZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTRHVhbCAsIFNEdWFs
ICwgU0R1YWwgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgICAvKiAweDA2RjAgLSAweDA2RkYgKi8K
K307CisKK3N0YXRpYyBpbmxpbmUgU1ZHR2x5cGhJZGVudGlmaWVyOjpBcmFiaWNGb3JtIHByb2Nl
c3NBcmFiaWNGb3JtRGV0ZWN0aW9uKGNvbnN0IFVDaGFyJiBjdXJDaGFyLCBib29sJiBsYXN0Q2hh
clNoYXBlc1JpZ2h0LCBTVkdHbHlwaElkZW50aWZpZXI6OkFyYWJpY0Zvcm0qIHByZXZGb3JtKQor
eworICAgIFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmljRm9ybSBjdXJGb3JtOworCisgICAgQXJh
YmljQ2hhclNoYXBpbmdNb2RlIHNoYXBpbmdNb2RlID0gU05vbmU7CisgICAgaWYgKGN1ckNoYXIg
Pj0gMHgwNjIyICYmIGN1ckNoYXIgPD0gMHgwNkZGKQorICAgICAgICBzaGFwaW5nTW9kZSA9IHNf
YXJhYmljQ2hhclNoYXBpbmdNb2RlW2N1ckNoYXIgLSAweDA2MjJdOworCisgICAgLy8gVXNlIGEg
c2ltcGxlIHN0YXRlIG1hY2hpbmUgdG8gaWRlbnRpZnkgdGhlIGFjdHVhbCBhcmFiaWMgZm9ybQor
ICAgIC8vIEl0IGRlcGVuZHMgb24gdGhlIG9yZGVyIG9mIHRoZSBhcmFiaWMgZm9ybSBlbnVtOgor
ICAgIC8vIGVudW0gQXJhYmljRm9ybSB7IE5vbmUgPSAwLCBJc29sYXRlZCwgVGVybWluYWwsIElu
aXRpYWwsIE1lZGlhbCB9OworCisgICAgaWYgKGxhc3RDaGFyU2hhcGVzUmlnaHQgJiYgc2hhcGlu
Z01vZGUgPT0gU0R1YWwpIHsKKyAgICAgICAgaWYgKHByZXZGb3JtKSB7CisgICAgICAgICAgICBp
bnQgY29ycmVjdGVkRm9ybSA9IChpbnQpICpwcmV2Rm9ybSArIDE7CisgICAgICAgICAgICBBU1NF
UlQoY29ycmVjdGVkRm9ybSA+PSBTVkdHbHlwaElkZW50aWZpZXI6Ok5vbmUgJiYgY29ycmVjdGVk
Rm9ybSA8PSBTVkdHbHlwaElkZW50aWZpZXI6Ok1lZGlhbCk7CisgICAgICAgICAgICAqcHJldkZv
cm0gPSBzdGF0aWNfY2FzdDxTVkdHbHlwaElkZW50aWZpZXI6OkFyYWJpY0Zvcm0+KGNvcnJlY3Rl
ZEZvcm0pOworICAgICAgICB9CisKKyAgICAgICAgY3VyRm9ybSA9IFNWR0dseXBoSWRlbnRpZmll
cjo6SW5pdGlhbDsKKyAgICB9IGVsc2UKKyAgICAgICAgY3VyRm9ybSA9IHNoYXBpbmdNb2RlID09
IFNOb25lID8gU1ZHR2x5cGhJZGVudGlmaWVyOjpOb25lIDogU1ZHR2x5cGhJZGVudGlmaWVyOjpJ
c29sYXRlZDsKKworICAgIGxhc3RDaGFyU2hhcGVzUmlnaHQgPSBzaGFwaW5nTW9kZSAhPSBTTm9u
ZTsKKyAgICByZXR1cm4gY3VyRm9ybTsKK30KKworc3RhdGljIFZlY3RvcjxTVkdHbHlwaElkZW50
aWZpZXI6OkFyYWJpY0Zvcm0+IGNoYXJhY3RlcnNXaXRoQXJhYmljRm9ybShjb25zdCBTdHJpbmcm
IGlucHV0LCBib29sIHJ0bCkKK3sKKyAgICBWZWN0b3I8U1ZHR2x5cGhJZGVudGlmaWVyOjpBcmFi
aWNGb3JtPiBmb3JtczsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKKwor
ICAgIGJvb2wgY29udGFpbnNBcmFiaWMgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGlzQXJhYmljQ2hhcihpbnB1dFtpXSkp
IHsKKyAgICAgICAgICAgIGNvbnRhaW5zQXJhYmljID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFjb250YWluc0FyYWJpYykKKyAgICAgICAg
cmV0dXJuIGZvcm1zOworCisgICAgYm9vbCBsYXN0Q2hhclNoYXBlc1JpZ2h0ID0gZmFsc2U7CisK
KyAgICAvLyBTdGFydCBpZGVudGlmeWluZyBhcmFiaWMgZm9ybXMKKyAgICBpZiAocnRsKSB7Cisg
ICAgICAgIGZvciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IC0taSkKKyAgICAgICAgICAg
IGZvcm1zLnByZXBlbmQocHJvY2Vzc0FyYWJpY0Zvcm1EZXRlY3Rpb24oaW5wdXRbaV0sIGxhc3RD
aGFyU2hhcGVzUmlnaHQsIGZvcm1zLmlzRW1wdHkoKSA/IDAgOiAmZm9ybXMuZmlyc3QoKSkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkKKyAgICAgICAgICAgIGZvcm1zLmFwcGVuZChwcm9jZXNzQXJhYmljRm9ybURldGVjdGlvbihp
bnB1dFtpXSwgbGFzdENoYXJTaGFwZXNSaWdodCwgZm9ybXMuaXNFbXB0eSgpID8gMCA6ICZmb3Jt
cy5sYXN0KCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZm9ybXM7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBpc0NvbXBhdGlibGVBcmFiaWNGb3JtKGNvbnN0IFNWR0dseXBoSWRlbnRpZmllciYg
aWRlbnRpZmllciwgY29uc3QgVmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmljRm9ybT4m
IGNoYXJzLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikKK3sK
KyAgICBpZiAoY2hhcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFZl
Y3RvcjxTVkdHbHlwaElkZW50aWZpZXI6OkFyYWJpY0Zvcm0+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGNoYXJzLmJlZ2luKCkgKyBzdGFydFBvc2l0aW9uOworICAgIFZlY3RvcjxTVkdHbHlwaElkZW50
aWZpZXI6OkFyYWJpY0Zvcm0+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBjaGFycy5iZWdpbigpICsg
ZW5kUG9zaXRpb247CisKKyAgICBBU1NFUlQoZW5kIDw9IGNoYXJzLmVuZCgpKTsKKyAgICBmb3Ig
KDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgqaXQgIT0gc3RhdGljX2Nhc3Q8U1ZH
R2x5cGhJZGVudGlmaWVyOjpBcmFiaWNGb3JtPihpZGVudGlmaWVyLmFyYWJpY0Zvcm0pICYmICpp
dCAhPSBTVkdHbHlwaElkZW50aWZpZXI6Ok5vbmUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Nv
bXBhdGlibGVHbHlwaChjb25zdCBTVkdHbHlwaElkZW50aWZpZXImIGlkZW50aWZpZXIsIGJvb2wg
aXNWZXJ0aWNhbFRleHQsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcjo6QXJh
YmljRm9ybT4mIGNoYXJzLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3Np
dGlvbikKK3sKKyAgICBib29sIHZhbGlkID0gdHJ1ZTsKKworICAgIC8vIENoZWNrIHdoZXRlciBv
cmllbnRhdGlvbiBpZiBnbHlwaCBmaXRzIHdpdGhpbiB0aGUgcmVxdWVzdAorICAgIHN3aXRjaCAo
aWRlbnRpZmllci5vcmllbnRhdGlvbikgeworICAgIGNhc2UgU1ZHR2x5cGhJZGVudGlmaWVyOjpW
ZXJ0aWNhbDoKKyAgICAgICAgdmFsaWQgPSBpc1ZlcnRpY2FsVGV4dDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBTVkdHbHlwaElkZW50aWZpZXI6Okhvcml6b250YWw6CisgICAgICAgIHZhbGlk
ID0gIWlzVmVydGljYWxUZXh0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNWR0dseXBoSWRl
bnRpZmllcjo6Qm90aDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCF2YWxpZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2hlY2sgd2hldGVyIGxhbmd1YWdlcyBh
cmUgY29tcGF0aWJsZQorICAgIGlmICghaWRlbnRpZmllci5sYW5ndWFnZXMuaXNFbXB0eSgpKSB7
CisgICAgICAgIC8vIFRoaXMgZ2x5cGggZXhpc3RzIG9ubHkgaW4gY2VydGFpbiBsYW5ndWFnZXMs
IGlmIHdlJ3JlIG5vdCBzcGVjaWZ5aW5nIGEKKyAgICAgICAgLy8gbGFuZ3VhZ2Ugb24gdGhlIHJl
ZmVyZW5jaW5nIGVsZW1lbnQgd2UncmUgdW5hYmxlIHRvIHVzZSB0aGlzIGdseXBoLgorICAgICAg
ICBpZiAobGFuZ3VhZ2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIC8vIFNwbGl0IHN1YmNvZGUgZnJvbSBsYW5ndWFnZSwgaWYgZXhpc3RhbnQuCisgICAg
ICAgIFN0cmluZyBsYW5ndWFnZVByZWZpeDsKKworICAgICAgICBzaXplX3Qgc3ViQ29kZVNlcGFy
YXRvciA9IGxhbmd1YWdlLmZpbmQoJy0nKTsKKyAgICAgICAgaWYgKHN1YkNvZGVTZXBhcmF0b3Ig
IT0gbm90Rm91bmQpCisgICAgICAgICAgICBsYW5ndWFnZVByZWZpeCA9IGxhbmd1YWdlLmxlZnQo
c3ViQ29kZVNlcGFyYXRvcik7CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gaWRlbnRpZmllci5sYW5ndWFnZXMuYmVnaW4oKTsKKyAgICAgICAgVmVjdG9yPFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGlkZW50aWZpZXIubGFuZ3VhZ2VzLmVuZCgpOwor
CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBjdXIgPSAqaXQ7CisgICAgICAgICAg
ICBpZiAoY3VyID09IGxhbmd1YWdlIHx8IGN1ciA9PSBsYW5ndWFnZVByZWZpeCkgeworICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gQ2hlY2sgd2hldGVyIGFyYWJpYyBmb3JtIGlzIGNv
bXBhdGlibGUKKyAgICByZXR1cm4gaXNDb21wYXRpYmxlQXJhYmljRm9ybShpZGVudGlmaWVyLCBj
aGFycywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworfQorCitzdGF0aWMgaW5saW5lIGNv
bnN0IFNWR0ZvbnREYXRhKiBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBTVkdGb250RmFjZUVsZW1lbnQqJiBmb250RmFj
ZSwgU1ZHRm9udEVsZW1lbnQqJiBmb250KQoreworICAgIEFTU0VSVChmb250RGF0YS0+aXNDdXN0
b21Gb250KCkpOworICAgIEFTU0VSVChmb250RGF0YS0+aXNTVkdGb250KCkpOworCisgICAgY29u
c3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERh
dGEqPihmb250RGF0YS0+c3ZnRm9udERhdGEoKSk7CisKKyAgICBmb250RmFjZSA9IHN2Z0ZvbnRE
YXRhLT5zdmdGb250RmFjZUVsZW1lbnQoKTsKKyAgICBBU1NFUlQoZm9udEZhY2UpOworCisgICAg
Zm9udCA9IGZvbnRGYWNlLT5hc3NvY2lhdGVkRm9udEVsZW1lbnQoKTsKKyAgICByZXR1cm4gc3Zn
Rm9udERhdGE7Cit9CisKKy8vIEhlbHBlciBjbGFzcyB0byB3YWxrIGEgdGV4dCBydW4uIExvb2t1
cCBhIFNWR0dseXBoSWRlbnRpZmllciBmb3IgZWFjaCBjaGFyYWN0ZXIKKy8vIC0gYWxzbyByZXNw
ZWN0aW5nIHBvc3NpYmx5IGRlZmluZWQgbGlnYXR1cmVzIC0gYW5kIGludm9rZSBhIGNhbGxiYWNr
IGZvciBlYWNoIGZvdW5kIGdseXBoLgordGVtcGxhdGU8dHlwZW5hbWUgU1ZHVGV4dFJ1bkRhdGE+
CitzdHJ1Y3QgU1ZHVGV4dFJ1bldhbGtlciB7CisgICAgdHlwZWRlZiBib29sICgqU1ZHVGV4dFJ1
bldhbGtlckNhbGxiYWNrKShjb25zdCBTVkdHbHlwaElkZW50aWZpZXImLCBTVkdUZXh0UnVuRGF0
YSYpOworICAgIHR5cGVkZWYgdm9pZCAoKlNWR1RleHRSdW5XYWxrZXJNaXNzaW5nR2x5cGhDYWxs
YmFjaykoY29uc3QgVGV4dFJ1biYsIFNWR1RleHRSdW5EYXRhJik7CisKKyAgICBTVkdUZXh0UnVu
V2Fsa2VyKGNvbnN0IFNWR0ZvbnREYXRhKiBmb250RGF0YSwgU1ZHRm9udEVsZW1lbnQqIGZvbnRF
bGVtZW50LCBTVkdUZXh0UnVuRGF0YSYgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIFNWR1Rl
eHRSdW5XYWxrZXJDYWxsYmFjayBjYWxsYmFjaywgU1ZHVGV4dFJ1bldhbGtlck1pc3NpbmdHbHlw
aENhbGxiYWNrIG1pc3NpbmdHbHlwaENhbGxiYWNrKQorICAgICAgICA6IG1fZm9udERhdGEoZm9u
dERhdGEpCisgICAgICAgICwgbV9mb250RWxlbWVudChmb250RWxlbWVudCkKKyAgICAgICAgLCBt
X3dhbGtlckRhdGEoZGF0YSkKKyAgICAgICAgLCBtX3dhbGtlckNhbGxiYWNrKGNhbGxiYWNrKQor
ICAgICAgICAsIG1fd2Fsa2VyTWlzc2luZ0dseXBoQ2FsbGJhY2sobWlzc2luZ0dseXBoQ2FsbGJh
Y2spCisgICAgeworICAgIH0KKworICAgIHZvaWQgd2Fsayhjb25zdCBUZXh0UnVuJiBydW4sIGJv
b2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UsIGludCBmcm9tLCBpbnQg
dG8pCisgICAgeworICAgICAgICBBU1NFUlQoMCA8PSBmcm9tICYmIGZyb20gPD0gdG8gJiYgdG8g
LSBmcm9tIDw9IHJ1bi5sZW5ndGgoKSk7CisKKyAgICAgICAgY29uc3QgU3RyaW5nIHRleHQgPSBG
b250Ojpub3JtYWxpemVTcGFjZXMocnVuLmRhdGEoZnJvbSksIHRvIC0gZnJvbSk7CisgICAgICAg
IFZlY3RvcjxTVkdHbHlwaElkZW50aWZpZXI6OkFyYWJpY0Zvcm0+IGNoYXJzKGNoYXJhY3RlcnNX
aXRoQXJhYmljRm9ybSh0ZXh0LCBydW4ucnRsKCkpKTsKKworICAgICAgICBTVkdHbHlwaElkZW50
aWZpZXIgaWRlbnRpZmllcjsKKyAgICAgICAgYm9vbCBmb3VuZEdseXBoID0gZmFsc2U7CisgICAg
ICAgIGludCBjaGFyYWN0ZXJMb29rdXBSYW5nZTsKKyAgICAgICAgaW50IGVuZE9mU2NhblJhbmdl
ID0gdG8gKyBtX3dhbGtlckRhdGEuZXh0cmFDaGFyc0F2YWlsYWJsZTsKKworICAgICAgICBib29s
IGhhdmVBbHRHbHlwaCA9IGZhbHNlOworICAgICAgICBTVkdHbHlwaElkZW50aWZpZXIgYWx0R2x5
cGhJZGVudGlmaWVyOworICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QgPSBy
dW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSkgeworICAgICAgICAgICAgUmVuZGVyT2JqZWN0
KiBwYXJlbnRSZW5kZXJlciA9IHJlbmRlck9iamVjdC0+cGFyZW50KCk7CisgICAgICAgICAgICBB
U1NFUlQocGFyZW50UmVuZGVyZXIpOworICAgICAgICAgICAgaWYgKHBhcmVudFJlbmRlcmVyLT5u
b2RlKCkgJiYgcGFyZW50UmVuZGVyZXItPm5vZGUoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6YWx0
R2x5cGhUYWcpKSB7CisgICAgICAgICAgICAgICAgU1ZHR2x5cGhFbGVtZW50KiBnbHlwaEVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdBbHRHbHlwaEVsZW1lbnQqPihwYXJlbnRSZW5kZXJlci0+bm9k
ZSgpKS0+Z2x5cGhFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgaWYgKGdseXBoRWxlbWVudCkg
eworICAgICAgICAgICAgICAgICAgICBoYXZlQWx0R2x5cGggPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBhbHRHbHlwaElkZW50aWZpZXIgPSBnbHlwaEVsZW1lbnQtPmJ1aWxkR2x5cGhJZGVu
dGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAgIGFsdEdseXBoSWRlbnRpZmllci5pc1ZhbGlk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYWx0R2x5cGhJZGVudGlmaWVyLm5hbWVMZW5n
dGggPSB0byAtIGZyb207CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgZm9yIChpbnQgaSA9IGZyb207IGkgPCB0bzsgKytpKSB7CisgICAgICAg
ICAgICAvLyBJZiBjaGFyYWN0ZXJMb29rdXBSYW5nZSBpcyA+IDAsIHRoZW4gdGhlIGZvbnQgZGVm
aW5lZCBsaWdhdHVyZXMgKGxlbmd0aCBvZiB1bmljb2RlIHByb3BlcnR5IHZhbHVlID4gMSkuCisg
ICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIHdoZXRlciB0aGUgY3VycmVudCBjaGFyYWN0
ZXIgJiB0aGUgbmV4dCBjaGFyYWN0ZXIgZGVmaW5lIGEgbGlnYXR1cmUuIFRoaXMgbmVlZHMgdG8g
YmUKKyAgICAgICAgICAgIC8vIGV4dGVuZGVkIHRvIHRoZSBuLXRoIG5leHQgY2hhcmFjdGVyICh3
aGVyZSBuIGlzICdjaGFyYWN0ZXJMb29rdXBSYW5nZScpLCB0byBjaGVjayBmb3IgYW55IHBvc3Np
YmxlIGxpZ2F0dXJlLgorICAgICAgICAgICAgY2hhcmFjdGVyTG9va3VwUmFuZ2UgPSBlbmRPZlNj
YW5SYW5nZSAtIGk7CisKKyAgICAgICAgICAgIFN0cmluZyBsb29rdXBTdHJpbmcgPSBGb250Ojpu
b3JtYWxpemVTcGFjZXMocnVuLmRhdGEoaSksIGNoYXJhY3Rlckxvb2t1cFJhbmdlKTsKKworICAg
ICAgICAgICAgVmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcj4gZ2x5cGhzOworICAgICAgICAgICAg
aWYgKGhhdmVBbHRHbHlwaCkKKyAgICAgICAgICAgICAgICBnbHlwaHMuYXBwZW5kKGFsdEdseXBo
SWRlbnRpZmllcik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9mb250RWxl
bWVudC0+Z2V0R2x5cGhJZGVudGlmaWVyc0ZvclN0cmluZyhsb29rdXBTdHJpbmcsIGdseXBocyk7
CisKKyAgICAgICAgICAgIFZlY3RvcjxTVkdHbHlwaElkZW50aWZpZXI+OjppdGVyYXRvciBpdCA9
IGdseXBocy5iZWdpbigpOworICAgICAgICAgICAgVmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcj46
Oml0ZXJhdG9yIGVuZCA9IGdseXBocy5lbmQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Zm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSAq
aXQ7CisgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNWYWxpZCAmJiBpc0NvbXBhdGli
bGVHbHlwaChpZGVudGlmaWVyLCBpc1ZlcnRpY2FsVGV4dCwgbGFuZ3VhZ2UsIGNoYXJzLCBpLCBp
ICsgaWRlbnRpZmllci5uYW1lTGVuZ3RoKSkgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
Y2hhcmFjdGVyTG9va3VwUmFuZ2UgPiAwKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBpZGVu
dGlmaWVyLm5hbWVMZW5ndGggLSAxOworICAgICAgICAgICAgICAgICAgICBtX3dhbGtlckRhdGEu
Y2hhcnNDb25zdW1lZCArPSBpZGVudGlmaWVyLm5hbWVMZW5ndGg7CisgICAgICAgICAgICAgICAg
ICAgIG1fd2Fsa2VyRGF0YS5nbHlwaE5hbWUgPSBpZGVudGlmaWVyLmdseXBoTmFtZTsKKworICAg
ICAgICAgICAgICAgICAgICBmb3VuZEdseXBoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
U1ZHR2x5cGhFbGVtZW50Ojppbmhlcml0VW5zcGVjaWZpZWRBdHRyaWJ1dGVzKGlkZW50aWZpZXIs
IG1fZm9udERhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZm91bmRHbHlwaCkgeworICAg
ICAgICAgICAgICAgICsrbV93YWxrZXJEYXRhLmNoYXJzQ29uc3VtZWQ7CisgICAgICAgICAgICAg
ICAgaWYgKFNWR01pc3NpbmdHbHlwaEVsZW1lbnQqIGVsZW1lbnQgPSBtX2ZvbnRFbGVtZW50LT5m
aXJzdE1pc3NpbmdHbHlwaEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyA8bWlz
c2luZy1nbHlwaD4gZWxlbWVudCBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZp
ZXIgPSBTVkdHbHlwaEVsZW1lbnQ6OmJ1aWxkR2VuZXJpY0dseXBoSWRlbnRpZmllcihlbGVtZW50
KTsKKyAgICAgICAgICAgICAgICAgICAgU1ZHR2x5cGhFbGVtZW50Ojppbmhlcml0VW5zcGVjaWZp
ZWRBdHRyaWJ1dGVzKGlkZW50aWZpZXIsIG1fZm9udERhdGEpOworICAgICAgICAgICAgICAgICAg
ICBpZGVudGlmaWVyLmlzVmFsaWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHN5c3RlbSBmb250IGZhbGxiYWNrCisg
ICAgICAgICAgICAgICAgICAgIFRleHRSdW4gc3ViUnVuKHJ1bik7CisgICAgICAgICAgICAgICAg
ICAgIHN1YlJ1bi5zZXRUZXh0KHN1YlJ1bi5kYXRhKGkpLCAxKTsKKworICAgICAgICAgICAgICAg
ICAgICAoKm1fd2Fsa2VyTWlzc2luZ0dseXBoQ2FsbGJhY2spKHN1YlJ1biwgbV93YWxrZXJEYXRh
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoISgqbV93YWxrZXJDYWxsYmFjaykoaWRlbnRp
ZmllciwgbV93YWxrZXJEYXRhKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgZm91bmRHbHlwaCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAg
IGNvbnN0IFNWR0ZvbnREYXRhKiBtX2ZvbnREYXRhOworICAgIFNWR0ZvbnRFbGVtZW50KiBtX2Zv
bnRFbGVtZW50OworICAgIFNWR1RleHRSdW5EYXRhJiBtX3dhbGtlckRhdGE7CisgICAgU1ZHVGV4
dFJ1bldhbGtlckNhbGxiYWNrIG1fd2Fsa2VyQ2FsbGJhY2s7CisgICAgU1ZHVGV4dFJ1bldhbGtl
ck1pc3NpbmdHbHlwaENhbGxiYWNrIG1fd2Fsa2VyTWlzc2luZ0dseXBoQ2FsbGJhY2s7Cit9Owor
CisvLyBDYWxsYmFjayAmIGRhdGEgc3RydWN0dXJlcyB0byBjb21wdXRlIHRoZSB3aWR0aCBvZiB0
ZXh0IHVzaW5nIFNWRyBGb250cworc3RydWN0IFNWR1RleHRSdW5XYWxrZXJNZWFzdXJlZExlbmd0
aERhdGEgeworICAgIGludCBhdDsKKyAgICBpbnQgZnJvbTsKKyAgICBpbnQgdG87CisgICAgaW50
IGV4dHJhQ2hhcnNBdmFpbGFibGU7CisgICAgaW50IGNoYXJzQ29uc3VtZWQ7CisgICAgU3RyaW5n
IGdseXBoTmFtZTsKKworICAgIGZsb2F0IHNjYWxlOworICAgIGZsb2F0IGxlbmd0aDsKKyAgICBj
b25zdCBGb250KiBmb250OworfTsKKworc3RhdGljIGJvb2wgZmxvYXRXaWR0aFVzaW5nU1ZHRm9u
dENhbGxiYWNrKGNvbnN0IFNWR0dseXBoSWRlbnRpZmllciYgaWRlbnRpZmllciwgU1ZHVGV4dFJ1
bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0YSYgZGF0YSkKK3sKKyAgICBpZiAoZGF0YS5hdCA+PSBk
YXRhLmZyb20gJiYgZGF0YS5hdCA8IGRhdGEudG8pCisgICAgICAgIGRhdGEubGVuZ3RoICs9IGlk
ZW50aWZpZXIuaG9yaXpvbnRhbEFkdmFuY2VYICogZGF0YS5zY2FsZTsKKworICAgIGRhdGEuYXQr
KzsKKyAgICByZXR1cm4gZGF0YS5hdCA8IGRhdGEudG87Cit9CisKK3N0YXRpYyB2b2lkIGZsb2F0
V2lkdGhNaXNzaW5nR2x5cGhDYWxsYmFjayhjb25zdCBUZXh0UnVuJiBydW4sIFNWR1RleHRSdW5X
YWxrZXJNZWFzdXJlZExlbmd0aERhdGEmIGRhdGEpCit7CisgICAgLy8gSGFuZGxlIHN5c3RlbSBm
b250IGZhbGxiYWNrCisgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbihkYXRhLmZv
bnQtPmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KEZv
bnRGYW1pbHkoKSk7CisgICAgRm9udCBmb250KGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7IC8vIHNw
YWNpbmcgaGFuZGxlZCBieSBTVkcgdGV4dCBjb2RlLgorICAgIGZvbnQudXBkYXRlKGRhdGEuZm9u
dC0+Zm9udFNlbGVjdG9yKCkpOworCisgICAgZGF0YS5sZW5ndGggKz0gZm9udC53aWR0aChydW4p
OworfQorCisKK1NWR0ZvbnRFbGVtZW50KiBGb250OjpzdmdGb250KCkgY29uc3QKK3sgCisgICAg
aWYgKCFpc1NWR0ZvbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTVkdGb250RWxlbWVu
dCogZm9udEVsZW1lbnQgPSAwOworICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVt
ZW50ID0gMDsKKyAgICBpZiAoc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKHBy
aW1hcnlGb250KCksIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpKQorICAgICAgICByZXR1
cm4gZm9udEVsZW1lbnQ7CisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBmbG9hdCBm
bG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCogZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBpbnQgZXh0cmFDaGFyc0F2YWlsYWJsZSwgaW50IGZyb20sIGludCB0bywg
aW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkKK3sKKyAgICBpbnQgbmV3RnJv
bSA9IHRvID4gZnJvbSA/IGZyb20gOiB0bzsKKyAgICBpbnQgbmV3VG8gPSB0byA+IGZyb20gPyB0
byA6IGZyb207CisKKyAgICBmcm9tID0gbmV3RnJvbTsKKyAgICB0byA9IG5ld1RvOworCisgICAg
U1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50ID0gMDsKKyAgICBTVkdGb250RmFjZUVsZW1lbnQq
IGZvbnRGYWNlRWxlbWVudCA9IDA7CisKKyAgICBpZiAoY29uc3QgU1ZHRm9udERhdGEqIGZvbnRE
YXRhID0gc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGZvbnQtPnByaW1hcnlG
b250KCksIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpKSB7CisgICAgICAgIGlmICghZm9u
dEVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gMC4wZjsKKworICAgICAgICBTVkdUZXh0UnVu
V2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRhIGRhdGE7CisKKyAgICAgICAgZGF0YS5mb250ID0gZm9u
dDsKKyAgICAgICAgZGF0YS5hdCA9IGZyb207CisgICAgICAgIGRhdGEuZnJvbSA9IGZyb207Cisg
ICAgICAgIGRhdGEudG8gPSB0bzsKKyAgICAgICAgZGF0YS5leHRyYUNoYXJzQXZhaWxhYmxlID0g
ZXh0cmFDaGFyc0F2YWlsYWJsZTsKKyAgICAgICAgZGF0YS5jaGFyc0NvbnN1bWVkID0gMDsKKyAg
ICAgICAgZGF0YS5zY2FsZSA9IGNvbnZlcnRFbVVuaXRUb1BpeGVsKGZvbnQtPnNpemUoKSwgZm9u
dEZhY2VFbGVtZW50LT51bml0c1BlckVtKCksIDEuMGYpOworICAgICAgICBkYXRhLmxlbmd0aCA9
IDAuMGY7CisKKyAgICAgICAgU3RyaW5nIGxhbmd1YWdlOworICAgICAgICBib29sIGlzVmVydGlj
YWxUZXh0ID0gZmFsc2U7IC8vIEhvbGRzIHRydWUgZm9yIEhUTUwgdGV4dAorCisgICAgICAgIC8v
IFRPRE86IGxhbmd1YWdlIG1hdGNoaW5nICYgc3ZnIGdseXBocyBzaG91bGQgYmUgcG9zc2libGUg
Zm9yIEhUTUwgdGV4dCwgdG9vLgorICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QgPSBydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSkgeworICAgICAgICAgICAgUmVuZGVy
T2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHJlbmRlck9iamVjdC0+cGFyZW50KCk7CisgICAgICAg
ICAgICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOworICAgICAgICAgICAgaXNWZXJ0aWNhbFRleHQg
PSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUocGFyZW50UmVuZGVyZXItPnN0eWxlKCktPnN2Z1N0eWxl
KCkpOworCisgICAgICAgICAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihwYXJlbnRSZW5kZXJlci0+bm9kZSgpKSkKKyAgICAgICAgICAgICAgICBs
YW5ndWFnZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOworICAg
ICAgICB9CisKKyAgICAgICAgU1ZHVGV4dFJ1bldhbGtlcjxTVkdUZXh0UnVuV2Fsa2VyTWVhc3Vy
ZWRMZW5ndGhEYXRhPiBydW5XYWxrZXIoZm9udERhdGEsIGZvbnRFbGVtZW50LCBkYXRhLCBmbG9h
dFdpZHRoVXNpbmdTVkdGb250Q2FsbGJhY2ssIGZsb2F0V2lkdGhNaXNzaW5nR2x5cGhDYWxsYmFj
ayk7CisgICAgICAgIHJ1bldhbGtlci53YWxrKHJ1biwgaXNWZXJ0aWNhbFRleHQsIGxhbmd1YWdl
LCBmcm9tLCB0byk7CisgICAgICAgIGNoYXJzQ29uc3VtZWQgPSBkYXRhLmNoYXJzQ29uc3VtZWQ7
CisgICAgICAgIGdseXBoTmFtZSA9IGRhdGEuZ2x5cGhOYW1lOworICAgICAgICByZXR1cm4gZGF0
YS5sZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIDAuMGY7Cit9CisKK2Zsb2F0IEZvbnQ6OmZs
b2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgVGV4dFJ1biYgcnVuKSBjb25zdAoreworICAgIGlu
dCBjaGFyc0NvbnN1bWVkOworICAgIFN0cmluZyBnbHlwaE5hbWU7CisgICAgcmV0dXJuIGZsb2F0
V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlzLCBydW4sIDAsIDAsIHJ1bi5sZW5ndGgo
KSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKK30KKworZmxvYXQgRm9udDo6ZmxvYXRXaWR0
aFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVuJiBydW4sIGludCBleHRyYUNoYXJzQXZhaWxhYmxl
LCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdAoreworICAgIHJl
dHVybiBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQodGhpcywgcnVuLCBleHRyYUNo
YXJzQXZhaWxhYmxlLCAwLCBydW4ubGVuZ3RoKCksIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7
Cit9CisKKy8vIENhbGxiYWNrICYgZGF0YSBzdHJ1Y3R1cmVzIHRvIGRyYXcgdGV4dCB1c2luZyBT
VkcgRm9udHMKK3N0cnVjdCBTVkdUZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhIHsKKyAgICBpbnQg
ZXh0cmFDaGFyc0F2YWlsYWJsZTsKKyAgICBpbnQgY2hhcnNDb25zdW1lZDsKKyAgICBTdHJpbmcg
Z2x5cGhOYW1lOworICAgIFZlY3RvcjxTVkdHbHlwaElkZW50aWZpZXI+IGdseXBoSWRlbnRpZmll
cnM7CisgICAgVmVjdG9yPFVDaGFyPiBmYWxsYmFja0NoYXJhY3RlcnM7Cit9OworCitzdGF0aWMg
Ym9vbCBkcmF3VGV4dFVzaW5nU1ZHRm9udENhbGxiYWNrKGNvbnN0IFNWR0dseXBoSWRlbnRpZmll
ciYgaWRlbnRpZmllciwgU1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSYgZGF0YSkKK3sKKyAg
ICBkYXRhLmdseXBoSWRlbnRpZmllcnMuYXBwZW5kKGlkZW50aWZpZXIpOworICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgdm9pZCBkcmF3VGV4dE1pc3NpbmdHbHlwaENhbGxiYWNrKGNvbnN0
IFRleHRSdW4mIHJ1biwgU1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSYgZGF0YSkKK3sKKyAg
ICBBU1NFUlQocnVuLmxlbmd0aCgpID09IDEpOworICAgIGRhdGEuZ2x5cGhJZGVudGlmaWVycy5h
cHBlbmQoU1ZHR2x5cGhJZGVudGlmaWVyKCkpOworICAgIGRhdGEuZmFsbGJhY2tDaGFyYWN0ZXJz
LmFwcGVuZChydW5bMF0pOworfQorCit2b2lkIEZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0Cit7CisgICAgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50ID0gMDsKKyAg
ICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IDA7CisKKyAgICBpZiAoY29u
c3QgU1ZHRm9udERhdGEqIGZvbnREYXRhID0gc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZv
bnREYXRhKHByaW1hcnlGb250KCksIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpKSB7Cisg
ICAgICAgIGlmICghZm9udEVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
U1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSBkYXRhOworICAgICAgICBGbG9hdFBvaW50IGN1
cnJlbnRQb2ludCA9IHBvaW50OworICAgICAgICBmbG9hdCBzY2FsZSA9IGNvbnZlcnRFbVVuaXRU
b1BpeGVsKHNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCksIDEuMGYpOworCisg
ICAgICAgIFJlbmRlclNWR1Jlc291cmNlKiBhY3RpdmVQYWludGluZ1Jlc291cmNlID0gcnVuLmFj
dGl2ZVBhaW50aW5nUmVzb3VyY2UoKTsKKworICAgICAgICAvLyBJZiByZW5kZXJPYmplY3QgaXMg
bm90IHNldCwgd2UncmUgZGVhbGluZyBmb3IgSFRNTCB0ZXh0IHJlbmRlcmVkIHVzaW5nIFNWRyBG
b250cy4KKyAgICAgICAgaWYgKCFydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSkgeworICAg
ICAgICAgICAgQVNTRVJUKCFhY3RpdmVQYWludGluZ1Jlc291cmNlKTsKKworICAgICAgICAgICAg
Ly8gVE9ETzogV2UncmUgb25seSBzdXBwb3J0aW5nIHNpbXBsZSBmaWxsZWQgSFRNTCB0ZXh0IHNv
IGZhci4KKyAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogc29saWRQYWlu
dGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNv
dXJjZSgpOworICAgICAgICAgICAgc29saWRQYWludGluZ1Jlc291cmNlLT5zZXRDb2xvcihjb250
ZXh0LT5maWxsQ29sb3IoKSk7CisKKyAgICAgICAgICAgIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2Ug
PSBzb2xpZFBhaW50aW5nUmVzb3VyY2U7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoYWN0
aXZlUGFpbnRpbmdSZXNvdXJjZSk7CisKKyAgICAgICAgaW50IGNoYXJzQ29uc3VtZWQ7CisgICAg
ICAgIFN0cmluZyBnbHlwaE5hbWU7CisgICAgICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBmYWxz
ZTsKKyAgICAgICAgZmxvYXQgeFN0YXJ0T2Zmc2V0ID0gZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNp
bmdTVkdGb250KHRoaXMsIHJ1biwgMCwgcnVuLnJ0bCgpID8gdG8gOiAwLCBydW4ucnRsKCkgPyBy
dW4ubGVuZ3RoKCkgOiBmcm9tLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpOworICAgICAgICBG
bG9hdFBvaW50IGdseXBoT3JpZ2luOworCisgICAgICAgIFN0cmluZyBsYW5ndWFnZTsKKworICAg
ICAgICAvLyBUT0RPOiBsYW5ndWFnZSBtYXRjaGluZyAmIHN2ZyBnbHlwaHMgc2hvdWxkIGJlIHBv
c3NpYmxlIGZvciBIVE1MIHRleHQsIHRvby4KKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZWZlcmVu
Y2luZ1JlbmRlck9iamVjdCA9IHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpOworICAgICAg
ICBSZW5kZXJPYmplY3QqIHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50ID0gcmVmZXJlbmNp
bmdSZW5kZXJPYmplY3QgPyByZWZlcmVuY2luZ1JlbmRlck9iamVjdC0+cGFyZW50KCkgOiAwOwor
ICAgICAgICBSZW5kZXJTdHlsZSogcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnRTdHlsZSA9
IDA7CisgICAgICAgIGlmIChyZWZlcmVuY2luZ1JlbmRlck9iamVjdCkgeworICAgICAgICAgICAg
QVNTRVJUKHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50KTsKKyAgICAgICAgICAgIHJlZmVy
ZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50U3R5bGUgPSByZWZlcmVuY2luZ1JlbmRlck9iamVjdFBh
cmVudC0+c3R5bGUoKTsKKworICAgICAgICAgICAgaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2Fs
V3JpdGluZ01vZGUocmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnRTdHlsZS0+c3ZnU3R5bGUo
KSk7ICAgIAorICAgICAgICAgICAgaWYgKFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxTVkdFbGVtZW50Kj4ocmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnQtPm5vZGUoKSkpCisg
ICAgICAgICAgICAgICAgbGFuZ3VhZ2UgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoWE1MTmFtZXM6
OmxhbmdBdHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaXNWZXJ0aWNhbFRleHQpIHsK
KyAgICAgICAgICAgIGdseXBoT3JpZ2luLnNldFgoZm9udERhdGEtPmhvcml6b250YWxPcmlnaW5Y
KCkgKiBzY2FsZSk7CisgICAgICAgICAgICBnbHlwaE9yaWdpbi5zZXRZKGZvbnREYXRhLT5ob3Jp
em9udGFsT3JpZ2luWSgpICogc2NhbGUpOworICAgICAgICB9CisKKyAgICAgICAgZGF0YS5leHRy
YUNoYXJzQXZhaWxhYmxlID0gMDsKKyAgICAgICAgZGF0YS5jaGFyc0NvbnN1bWVkID0gMDsKKwor
ICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyPFNWR1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGE+IHJ1
bldhbGtlcihmb250RGF0YSwgZm9udEVsZW1lbnQsIGRhdGEsIGRyYXdUZXh0VXNpbmdTVkdGb250
Q2FsbGJhY2ssIGRyYXdUZXh0TWlzc2luZ0dseXBoQ2FsbGJhY2spOworICAgICAgICBydW5XYWxr
ZXIud2FsayhydW4sIGlzVmVydGljYWxUZXh0LCBsYW5ndWFnZSwgZnJvbSwgdG8pOworCisgICAg
ICAgIFJlbmRlclNWR1Jlc291cmNlTW9kZSByZXNvdXJjZU1vZGUgPSBjb250ZXh0LT50ZXh0RHJh
d2luZ01vZGUoKSA9PSBUZXh0TW9kZVN0cm9rZSA/IEFwcGx5VG9TdHJva2VNb2RlIDogQXBwbHlU
b0ZpbGxNb2RlOworCisgICAgICAgIHVuc2lnbmVkIG51bUdseXBocyA9IGRhdGEuZ2x5cGhJZGVu
dGlmaWVycy5zaXplKCk7CisgICAgICAgIHVuc2lnbmVkIGZhbGxiYWNrQ2hhcmFjdGVySW5kZXgg
PSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsK
KyAgICAgICAgICAgIGNvbnN0IFNWR0dseXBoSWRlbnRpZmllciYgaWRlbnRpZmllciA9IGRhdGEu
Z2x5cGhJZGVudGlmaWVyc1tydW4ucnRsKCkgPyBudW1HbHlwaHMgLSBpIC0gMSA6IGldOworICAg
ICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNWYWxpZCkgeworICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBTdXBwb3J0IGFyYml0YXJ5IFNWRyBjb250ZW50IGFzIGdseXBoIChjdXJyZW50bHkgbGlt
aXRlZCB0byA8Z2x5cGggZD0iLi4uIj4gc2l0dWF0aW9ucykuCisgICAgICAgICAgICAgICAgaWYg
KCFpZGVudGlmaWVyLnBhdGhEYXRhLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5zYXZlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE9yaWdpbi5zZXRYKGlkZW50aWZpZXIu
dmVydGljYWxPcmlnaW5YICogc2NhbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhP
cmlnaW4uc2V0WShpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWSAqIHNjYWxlKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBnbHlw
aFBhdGhUcmFuc2Zvcm07CisgICAgICAgICAgICAgICAgICAgIGdseXBoUGF0aFRyYW5zZm9ybS50
cmFuc2xhdGUoeFN0YXJ0T2Zmc2V0ICsgY3VycmVudFBvaW50LngoKSArIGdseXBoT3JpZ2luLngo
KSwgY3VycmVudFBvaW50LnkoKSArIGdseXBoT3JpZ2luLnkoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGdseXBoUGF0aFRyYW5zZm9ybS5zY2FsZShzY2FsZSwgLXNjYWxlKTsKKworICAgICAgICAg
ICAgICAgICAgICBQYXRoIGdseXBoUGF0aCA9IGlkZW50aWZpZXIucGF0aERhdGE7CisgICAgICAg
ICAgICAgICAgICAgIGdseXBoUGF0aC50cmFuc2Zvcm0oZ2x5cGhQYXRoVHJhbnNmb3JtKTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNv
dXJjZShyZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudCwgcmVmZXJlbmNpbmdSZW5kZXJPYmpl
Y3RQYXJlbnRTdHlsZSwgY29udGV4dCwgcmVzb3VyY2VNb2RlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJT
VkdJbmxpbmVUZXh0KHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoY29udGV4dC0+c3Ryb2tlVGhp
Y2tuZXNzKCkgKiB0ZXh0UmVuZGVyZXItPnNjYWxpbmdGYWN0b3IoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291
cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShyZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudCwgY29u
dGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5cGhQYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRQb2ludC5tb3ZlKDAuMGYsIGlkZW50aWZpZXIudmVydGljYWxBZHZhbmNl
WSAqIHNjYWxlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRQb2ludC5tb3ZlKGlkZW50aWZpZXIuaG9yaXpvbnRhbEFkdmFuY2VYICogc2NhbGUsIDAu
MGYpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUgc3lz
dGVtIGZvbnQgZmFsbGJhY2sKKyAgICAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uKG1fZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0RmFtaWx5KEZvbnRGYW1pbHkoKSk7CisgICAgICAgICAgICAgICAgRm9udCBmb250
KGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7IC8vIHNwYWNpbmcgaGFuZGxlZCBieSBTVkcgdGV4dCBj
b2RlLgorICAgICAgICAgICAgICAgIGZvbnQudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKKworICAg
ICAgICAgICAgICAgIFRleHRSdW4gZmFsbGJhY2tDaGFyYWN0ZXJSdW4ocnVuKTsKKyAgICAgICAg
ICAgICAgICBmYWxsYmFja0NoYXJhY3RlclJ1bi5zZXRUZXh0KCZkYXRhLmZhbGxiYWNrQ2hhcmFj
dGVyc1tydW4ucnRsKCkgPyBkYXRhLmZhbGxiYWNrQ2hhcmFjdGVycy5zaXplKCkgLSBmYWxsYmFj
a0NoYXJhY3RlckluZGV4IC0gMSA6IGZhbGxiYWNrQ2hhcmFjdGVySW5kZXhdLCAxKTsKKyAgICAg
ICAgICAgICAgICBmb250LmRyYXdUZXh0KGNvbnRleHQsIGZhbGxiYWNrQ2hhcmFjdGVyUnVuLCBj
dXJyZW50UG9pbnQpOworCisgICAgICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQorICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50UG9pbnQubW92ZSgwLjBmLCBmb250LndpZHRoKGZhbGxi
YWNrQ2hhcmFjdGVyUnVuKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50UG9pbnQubW92ZShmb250LndpZHRoKGZhbGxiYWNrQ2hhcmFjdGVyUnVuKSwg
MC4wZik7CisKKyAgICAgICAgICAgICAgICBmYWxsYmFja0NoYXJhY3RlckluZGV4Kys7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK0Zsb2F0UmVjdCBGb250OjpzZWxlY3Rp
b25SZWN0Rm9yVGV4dFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAg
IGludCBjaGFyc0NvbnN1bWVkOworICAgIFN0cmluZyBnbHlwaE5hbWU7CisKKyAgICByZXR1cm4g
RmxvYXRSZWN0KHBvaW50LngoKSArIGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0
aGlzLCBydW4sIDAsIHJ1bi5ydGwoKSA/IHRvIDogMCwgcnVuLnJ0bCgpID8gcnVuLmxlbmd0aCgp
IDogZnJvbSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKSwKKyAgICAgICAgICAgICAgICAgICAg
IHBvaW50LnkoKSwgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwg
MCwgZnJvbSwgdG8sIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSksIGhlaWdodCk7Cit9CisKK2lu
dCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQoY29uc3QgVGV4dFJ1
biYsIGZsb2F0LCBib29sKSBjb25zdAoreworICAgIC8vIFRPRE86IEZpeCB0ZXh0IHNlbGVjdGlv
biB3aGVuIEhUTUwgdGV4dCBpcyBkcmF3biB1c2luZyBhIFNWRyBGb250CisgICAgLy8gV2UgbmVl
ZCB0byBpbnRlZ3JhdGUgdGhlIFNWRyB0ZXh0IHNlbGVjdGlvbiBjb2RlIGluIHRoZSBvZmZzZXRG
b3JQb3NpdGlvbigpIGZyYW1ld29yay4KKyAgICAvLyBUaGlzIHdpbGwgYWxzbyBmaXggYSBtYWpv
ciBpc3N1ZSwgdGhhdCBTVkcgVGV4dCBjb2RlIGNhbid0IHNlbGVjdCBhcmFiaWMgc3RyaW5ncyBw
cm9wZXJseS4KKyAgICByZXR1cm4gMDsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NWR0dseXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TVkdHbHlwaC5jcHAJKHJldmlzaW9uIDg0NDgy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU1ZHR2x5cGguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC0yMDExLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSw0MiArMjEsMTQg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0jaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIlNWR0dseXBoLmgiCiAKLSNpbmNsdWRlICJDU1NGb250U2Vs
ZWN0b3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmVUZXh0LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCi0jaW5jbHVkZSAiU1ZHQWx0R2x5cGhFbGVtZW50
LmgiCi0jaW5jbHVkZSAiU1ZHRm9udERhdGEuaCIKLSNpbmNsdWRlICJTVkdGb250RWxlbWVudC5o
IgotI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0dseXBoRWxl
bWVudC5oIgotI2luY2x1ZGUgIlNWR0dseXBoTWFwLmgiCi0jaW5jbHVkZSAiU1ZHTWlzc2luZ0ds
eXBoRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9u
dERhdGEuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCi0jaW5jbHVkZSAiWE1MTmFtZXMuaCIKKyNp
bmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY6OlVu
aWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSBmbG9hdCBjb252
ZXJ0RW1Vbml0VG9QaXhlbChmbG9hdCBmb250U2l6ZSwgZmxvYXQgdW5pdHNQZXJFbSwgZmxvYXQg
dmFsdWUpCi17Ci0gICAgaWYgKCF1bml0c1BlckVtKQotICAgICAgICByZXR1cm4gMC4wZjsKLQot
ICAgIHJldHVybiB2YWx1ZSAqIGZvbnRTaXplIC8gdW5pdHNQZXJFbTsKLX0KLQotc3RhdGljIGlu
bGluZSBib29sIGlzVmVydGljYWxXcml0aW5nTW9kZShjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5
bGUpCi17Ci0gICAgcmV0dXJuIHN0eWxlLT53cml0aW5nTW9kZSgpID09IFdNX1RCUkwgfHwgc3R5
bGUtPndyaXRpbmdNb2RlKCkgPT0gV01fVEI7IAotfQotCiAvLyBIZWxwZXIgZnVuY3Rpb25zIHRv
IGRldGVybWluZSB0aGUgYXJhYmljIGNoYXJhY3RlciBmb3JtcyAoaW5pdGlhbCwgbWVkaWFsLCB0
ZXJtaW5hbCwgaXNvbGF0ZWQpCiBlbnVtIEFyYWJpY0NoYXJTaGFwaW5nTW9kZSB7CiAgICAgU05v
bmUgPSAwLApAQCAtODEsOSArNTMsOSBAQCBzdGF0aWMgY29uc3QgQXJhYmljQ2hhclNoYXBpbmdN
b2RlIHNfYXJhCiAgICAgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNO
b25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTRHVhbCAsIFNEdWFsICwgU0R1
YWwgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgICAvKiAweDA2RjAgLSAweDA2RkYgKi8KIH07CiAK
LXN0YXRpYyBpbmxpbmUgU1ZHR2x5cGhJZGVudGlmaWVyOjpBcmFiaWNGb3JtIHByb2Nlc3NBcmFi
aWNGb3JtRGV0ZWN0aW9uKGNvbnN0IFVDaGFyJiBjdXJDaGFyLCBib29sJiBsYXN0Q2hhclNoYXBl
c1JpZ2h0LCBTVkdHbHlwaElkZW50aWZpZXI6OkFyYWJpY0Zvcm0qIHByZXZGb3JtKQorc3RhdGlj
IGlubGluZSBTVkdHbHlwaDo6QXJhYmljRm9ybSBwcm9jZXNzQXJhYmljRm9ybURldGVjdGlvbihj
b25zdCBVQ2hhciYgY3VyQ2hhciwgYm9vbCYgbGFzdENoYXJTaGFwZXNSaWdodCwgU1ZHR2x5cGg6
OkFyYWJpY0Zvcm0qIHByZXZGb3JtKQogewotICAgIFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmlj
Rm9ybSBjdXJGb3JtOworICAgIFNWR0dseXBoOjpBcmFiaWNGb3JtIGN1ckZvcm07CiAKICAgICBB
cmFiaWNDaGFyU2hhcGluZ01vZGUgc2hhcGluZ01vZGUgPSBTTm9uZTsKICAgICBpZiAoY3VyQ2hh
ciA+PSAweDA2MjIgJiYgY3VyQ2hhciA8PSAweDA2RkYpCkBAIC05NiwyMSArNjgsMjEgQEAgc3Rh
dGljIGlubGluZSBTVkdHbHlwaElkZW50aWZpZXI6OkFyYWJpYwogICAgIGlmIChsYXN0Q2hhclNo
YXBlc1JpZ2h0ICYmIHNoYXBpbmdNb2RlID09IFNEdWFsKSB7CiAgICAgICAgIGlmIChwcmV2Rm9y
bSkgewogICAgICAgICAgICAgaW50IGNvcnJlY3RlZEZvcm0gPSAoaW50KSAqcHJldkZvcm0gKyAx
OwotICAgICAgICAgICAgQVNTRVJUKGNvcnJlY3RlZEZvcm0gPj0gU1ZHR2x5cGhJZGVudGlmaWVy
OjpOb25lICYmIGNvcnJlY3RlZEZvcm0gPD0gU1ZHR2x5cGhJZGVudGlmaWVyOjpNZWRpYWwpOwot
ICAgICAgICAgICAgKnByZXZGb3JtID0gc3RhdGljX2Nhc3Q8U1ZHR2x5cGhJZGVudGlmaWVyOjpB
cmFiaWNGb3JtPihjb3JyZWN0ZWRGb3JtKTsKKyAgICAgICAgICAgIEFTU0VSVChjb3JyZWN0ZWRG
b3JtID49IFNWR0dseXBoOjpOb25lICYmIGNvcnJlY3RlZEZvcm0gPD0gU1ZHR2x5cGg6Ok1lZGlh
bCk7CisgICAgICAgICAgICAqcHJldkZvcm0gPSBzdGF0aWNfY2FzdDxTVkdHbHlwaDo6QXJhYmlj
Rm9ybT4oY29ycmVjdGVkRm9ybSk7CiAgICAgICAgIH0KIAotICAgICAgICBjdXJGb3JtID0gU1ZH
R2x5cGhJZGVudGlmaWVyOjpJbml0aWFsOworICAgICAgICBjdXJGb3JtID0gU1ZHR2x5cGg6Oklu
aXRpYWw7CiAgICAgfSBlbHNlCi0gICAgICAgIGN1ckZvcm0gPSBzaGFwaW5nTW9kZSA9PSBTTm9u
ZSA/IFNWR0dseXBoSWRlbnRpZmllcjo6Tm9uZSA6IFNWR0dseXBoSWRlbnRpZmllcjo6SXNvbGF0
ZWQ7CisgICAgICAgIGN1ckZvcm0gPSBzaGFwaW5nTW9kZSA9PSBTTm9uZSA/IFNWR0dseXBoOjpO
b25lIDogU1ZHR2x5cGg6Oklzb2xhdGVkOwogCiAgICAgbGFzdENoYXJTaGFwZXNSaWdodCA9IHNo
YXBpbmdNb2RlICE9IFNOb25lOwogICAgIHJldHVybiBjdXJGb3JtOwogfQogCi1zdGF0aWMgVmVj
dG9yPFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmljRm9ybT4gY2hhcmFjdGVyc1dpdGhBcmFiaWNG
b3JtKGNvbnN0IFN0cmluZyYgaW5wdXQsIGJvb2wgcnRsKQorVmVjdG9yPFNWR0dseXBoOjpBcmFi
aWNGb3JtPiBjaGFyYWN0ZXJzV2l0aEFyYWJpY0Zvcm0oY29uc3QgU3RyaW5nJiBpbnB1dCwgYm9v
bCBtaXJyb3IpCiB7Ci0gICAgVmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmljRm9ybT4g
Zm9ybXM7CisgICAgVmVjdG9yPFNWR0dseXBoOjpBcmFiaWNGb3JtPiBmb3JtczsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBpbnB1dC5sZW5ndGgoKTsKIAogICAgIGJvb2wgY29udGFpbnNBcmFiaWMg
PSBmYWxzZTsKQEAgLTEyNyw3ICs5OSw3IEBAIHN0YXRpYyBWZWN0b3I8U1ZHR2x5cGhJZGVudGlm
aWVyOjpBcmFiaWMKICAgICBib29sIGxhc3RDaGFyU2hhcGVzUmlnaHQgPSBmYWxzZTsKIAogICAg
IC8vIFN0YXJ0IGlkZW50aWZ5aW5nIGFyYWJpYyBmb3JtcwotICAgIGlmIChydGwpIHsKKyAgICBp
ZiAobWlycm9yKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IC0t
aSkKICAgICAgICAgICAgIGZvcm1zLnByZXBlbmQocHJvY2Vzc0FyYWJpY0Zvcm1EZXRlY3Rpb24o
aW5wdXRbaV0sIGxhc3RDaGFyU2hhcGVzUmlnaHQsIGZvcm1zLmlzRW1wdHkoKSA/IDAgOiAmZm9y
bXMuZmlyc3QoKSkpOwogICAgIH0gZWxzZSB7CkBAIC0xMzgsMzcgKzExMCw0MiBAQCBzdGF0aWMg
VmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmljCiAgICAgcmV0dXJuIGZvcm1zOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNDb21wYXRpYmxlQXJhYmljRm9ybShjb25zdCBTVkdHbHlw
aElkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxTVkdHbHlwaElkZW50aWZpZXI6
OkFyYWJpY0Zvcm0+JiBjaGFycywgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5k
UG9zaXRpb24pCitzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21wYXRpYmxlQXJhYmljRm9ybShjb25z
dCBTVkdHbHlwaCYgaWRlbnRpZmllciwgY29uc3QgVmVjdG9yPFNWR0dseXBoOjpBcmFiaWNGb3Jt
PiYgY2hhcnMsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0aW9uKQog
ewogICAgIGlmIChjaGFycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
VmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmljRm9ybT46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gY2hhcnMuYmVnaW4oKSArIHN0YXJ0UG9zaXRpb247Ci0gICAgVmVjdG9yPFNWR0dseXBoSWRl
bnRpZmllcjo6QXJhYmljRm9ybT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNoYXJzLmJlZ2luKCkg
KyBlbmRQb3NpdGlvbjsKKyAgICBWZWN0b3I8U1ZHR2x5cGg6OkFyYWJpY0Zvcm0+Ojpjb25zdF9p
dGVyYXRvciByZWFsRW5kID0gY2hhcnMuZW5kKCk7CisgICAgVmVjdG9yPFNWR0dseXBoOjpBcmFi
aWNGb3JtPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGFycy5iZWdpbigpICsgc3RhcnRQb3NpdGlv
bjsKKyAgICBpZiAoaXQgPj0gcmVhbEVuZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBW
ZWN0b3I8U1ZHR2x5cGg6OkFyYWJpY0Zvcm0+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBjaGFycy5i
ZWdpbigpICsgZW5kUG9zaXRpb247CisgICAgaWYgKGVuZCA+PSByZWFsRW5kKQorICAgICAgICBl
bmQgPSByZWFsRW5kOwogCi0gICAgQVNTRVJUKGVuZCA8PSBjaGFycy5lbmQoKSk7CiAgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoKml0ICE9IHN0YXRpY19jYXN0PFNW
R0dseXBoSWRlbnRpZmllcjo6QXJhYmljRm9ybT4oaWRlbnRpZmllci5hcmFiaWNGb3JtKSAmJiAq
aXQgIT0gU1ZHR2x5cGhJZGVudGlmaWVyOjpOb25lKQorICAgICAgICBpZiAoKml0ICE9IHN0YXRp
Y19jYXN0PFNWR0dseXBoOjpBcmFiaWNGb3JtPihpZGVudGlmaWVyLmFyYWJpY0Zvcm0pICYmICpp
dCAhPSBTVkdHbHlwaDo6Tm9uZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlzQ29tcGF0aWJsZUds
eXBoKGNvbnN0IFNWR0dseXBoSWRlbnRpZmllciYgaWRlbnRpZmllciwgYm9vbCBpc1ZlcnRpY2Fs
VGV4dCwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHR2x5cGhJZGVudGlmaWVyOjpBcmFiaWNGb3JtPiYg
Y2hhcnMsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0aW9uKQorYm9v
bCBpc0NvbXBhdGlibGVHbHlwaChjb25zdCBTVkdHbHlwaCYgaWRlbnRpZmllciwgYm9vbCBpc1Zl
cnRpY2FsVGV4dCwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVmVjdG9yPFNWR0dseXBoOjpBcmFiaWNGb3JtPiYgY2hhcnMsIHVuc2lnbmVkIHN0
YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0aW9uKQogewogICAgIGJvb2wgdmFsaWQgPSB0
cnVlOwogCiAgICAgLy8gQ2hlY2sgd2hldGVyIG9yaWVudGF0aW9uIGlmIGdseXBoIGZpdHMgd2l0
aGluIHRoZSByZXF1ZXN0CiAgICAgc3dpdGNoIChpZGVudGlmaWVyLm9yaWVudGF0aW9uKSB7Ci0g
ICAgY2FzZSBTVkdHbHlwaElkZW50aWZpZXI6OlZlcnRpY2FsOgorICAgIGNhc2UgU1ZHR2x5cGg6
OlZlcnRpY2FsOgogICAgICAgICB2YWxpZCA9IGlzVmVydGljYWxUZXh0OwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIFNWR0dseXBoSWRlbnRpZmllcjo6SG9yaXpvbnRhbDoKKyAgICBjYXNlIFNW
R0dseXBoOjpIb3Jpem9udGFsOgogICAgICAgICB2YWxpZCA9ICFpc1ZlcnRpY2FsVGV4dDsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdHbHlwaElkZW50aWZpZXI6OkJvdGg6CisgICAgY2Fz
ZSBTVkdHbHlwaDo6Qm90aDoKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yMDksMzk3ICsx
ODYsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21wYXRpYmxlR2x5cGgoY29uCiAgICAgcmV0
dXJuIGlzQ29tcGF0aWJsZUFyYWJpY0Zvcm0oaWRlbnRpZmllciwgY2hhcnMsIHN0YXJ0UG9zaXRp
b24sIGVuZFBvc2l0aW9uKTsKIH0KIAotc3RhdGljIGlubGluZSBjb25zdCBTVkdGb250RGF0YSog
c3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YSwgU1ZHRm9udEZhY2VFbGVtZW50KiYgZm9udEZhY2UsIFNWR0ZvbnRFbGVtZW50
KiYgZm9udCkKLXsKLSAgICBBU1NFUlQoZm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKTsKLSAgICBB
U1NFUlQoZm9udERhdGEtPmlzU1ZHRm9udCgpKTsKLQotICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBz
dmdGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR0ZvbnREYXRhKj4oZm9udERhdGEtPnN2
Z0ZvbnREYXRhKCkpOwotCi0gICAgZm9udEZhY2UgPSBzdmdGb250RGF0YS0+c3ZnRm9udEZhY2VF
bGVtZW50KCk7Ci0gICAgQVNTRVJUKGZvbnRGYWNlKTsKLQotICAgIGZvbnQgPSBmb250RmFjZS0+
YXNzb2NpYXRlZEZvbnRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIHN2Z0ZvbnREYXRhOwotfQotCi0v
LyBIZWxwZXIgY2xhc3MgdG8gd2FsayBhIHRleHQgcnVuLiBMb29rdXAgYSBTVkdHbHlwaElkZW50
aWZpZXIgZm9yIGVhY2ggY2hhcmFjdGVyCi0vLyAtIGFsc28gcmVzcGVjdGluZyBwb3NzaWJseSBk
ZWZpbmVkIGxpZ2F0dXJlcyAtIGFuZCBpbnZva2UgYSBjYWxsYmFjayBmb3IgZWFjaCBmb3VuZCBn
bHlwaC4KLXRlbXBsYXRlPHR5cGVuYW1lIFNWR1RleHRSdW5EYXRhPgotc3RydWN0IFNWR1RleHRS
dW5XYWxrZXIgewotICAgIHR5cGVkZWYgYm9vbCAoKlNWR1RleHRSdW5XYWxrZXJDYWxsYmFjayko
Y29uc3QgU1ZHR2x5cGhJZGVudGlmaWVyJiwgU1ZHVGV4dFJ1bkRhdGEmKTsKLSAgICB0eXBlZGVm
IHZvaWQgKCpTVkdUZXh0UnVuV2Fsa2VyTWlzc2luZ0dseXBoQ2FsbGJhY2spKGNvbnN0IFRleHRS
dW4mLCBTVkdUZXh0UnVuRGF0YSYpOwotCi0gICAgU1ZHVGV4dFJ1bldhbGtlcihjb25zdCBTVkdG
b250RGF0YSogZm9udERhdGEsIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCwgU1ZHVGV4dFJ1
bkRhdGEmIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyQ2FsbGJh
Y2sgY2FsbGJhY2ssIFNWR1RleHRSdW5XYWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFjayBtaXNzaW5n
R2x5cGhDYWxsYmFjaykKLSAgICAgICAgOiBtX2ZvbnREYXRhKGZvbnREYXRhKQotICAgICAgICAs
IG1fZm9udEVsZW1lbnQoZm9udEVsZW1lbnQpCi0gICAgICAgICwgbV93YWxrZXJEYXRhKGRhdGEp
Ci0gICAgICAgICwgbV93YWxrZXJDYWxsYmFjayhjYWxsYmFjaykKLSAgICAgICAgLCBtX3dhbGtl
ck1pc3NpbmdHbHlwaENhbGxiYWNrKG1pc3NpbmdHbHlwaENhbGxiYWNrKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2b2lkIHdhbGsoY29uc3QgVGV4dFJ1biYgcnVuLCBib29sIGlzVmVydGljYWxUZXh0
LCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlLCBpbnQgZnJvbSwgaW50IHRvKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKDAgPD0gZnJvbSAmJiBmcm9tIDw9IHRvICYmIHRvIC0gZnJvbSA8PSBydW4ubGVu
Z3RoKCkpOwotCi0gICAgICAgIGNvbnN0IFN0cmluZyB0ZXh0ID0gRm9udDo6bm9ybWFsaXplU3Bh
Y2VzKHJ1bi5kYXRhKGZyb20pLCB0byAtIGZyb20pOwotICAgICAgICBWZWN0b3I8U1ZHR2x5cGhJ
ZGVudGlmaWVyOjpBcmFiaWNGb3JtPiBjaGFycyhjaGFyYWN0ZXJzV2l0aEFyYWJpY0Zvcm0odGV4
dCwgcnVuLnJ0bCgpKSk7Ci0KLSAgICAgICAgU1ZHR2x5cGhJZGVudGlmaWVyIGlkZW50aWZpZXI7
Ci0gICAgICAgIGJvb2wgZm91bmRHbHlwaCA9IGZhbHNlOwotICAgICAgICBpbnQgY2hhcmFjdGVy
TG9va3VwUmFuZ2U7Ci0gICAgICAgIGludCBlbmRPZlNjYW5SYW5nZSA9IHRvICsgbV93YWxrZXJE
YXRhLmV4dHJhQ2hhcnNBdmFpbGFibGU7Ci0KLSAgICAgICAgYm9vbCBoYXZlQWx0R2x5cGggPSBm
YWxzZTsKLSAgICAgICAgU1ZHR2x5cGhJZGVudGlmaWVyIGFsdEdseXBoSWRlbnRpZmllcjsKLSAg
ICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gcnVuLnJlZmVyZW5jaW5nUmVu
ZGVyT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIg
PSByZW5kZXJPYmplY3QtPnBhcmVudCgpOwotICAgICAgICAgICAgQVNTRVJUKHBhcmVudFJlbmRl
cmVyKTsKLSAgICAgICAgICAgIGlmIChwYXJlbnRSZW5kZXJlci0+bm9kZSgpICYmIHBhcmVudFJl
bmRlcmVyLT5ub2RlKCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFsdEdseXBoVGFnKSkgewotICAg
ICAgICAgICAgICAgIFNWR0dseXBoRWxlbWVudCogZ2x5cGhFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U1ZHQWx0R2x5cGhFbGVtZW50Kj4ocGFyZW50UmVuZGVyZXItPm5vZGUoKSktPmdseXBoRWxlbWVu
dCgpOwotICAgICAgICAgICAgICAgIGlmIChnbHlwaEVsZW1lbnQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaGF2ZUFsdEdseXBoID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYWx0R2x5cGhJ
ZGVudGlmaWVyID0gZ2x5cGhFbGVtZW50LT5idWlsZEdseXBoSWRlbnRpZmllcigpOwotICAgICAg
ICAgICAgICAgICAgICBhbHRHbHlwaElkZW50aWZpZXIuaXNWYWxpZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIGFsdEdseXBoSWRlbnRpZmllci5uYW1lTGVuZ3RoID0gdG8gLSBmcm9tOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZv
ciAoaW50IGkgPSBmcm9tOyBpIDwgdG87ICsraSkgewotICAgICAgICAgICAgLy8gSWYgY2hhcmFj
dGVyTG9va3VwUmFuZ2UgaXMgPiAwLCB0aGVuIHRoZSBmb250IGRlZmluZWQgbGlnYXR1cmVzIChs
ZW5ndGggb2YgdW5pY29kZSBwcm9wZXJ0eSB2YWx1ZSA+IDEpLgotICAgICAgICAgICAgLy8gV2Ug
aGF2ZSB0byBjaGVjayB3aGV0ZXIgdGhlIGN1cnJlbnQgY2hhcmFjdGVyICYgdGhlIG5leHQgY2hh
cmFjdGVyIGRlZmluZSBhIGxpZ2F0dXJlLiBUaGlzIG5lZWRzIHRvIGJlCi0gICAgICAgICAgICAv
LyBleHRlbmRlZCB0byB0aGUgbi10aCBuZXh0IGNoYXJhY3RlciAod2hlcmUgbiBpcyAnY2hhcmFj
dGVyTG9va3VwUmFuZ2UnKSwgdG8gY2hlY2sgZm9yIGFueSBwb3NzaWJsZSBsaWdhdHVyZS4KLSAg
ICAgICAgICAgIGNoYXJhY3Rlckxvb2t1cFJhbmdlID0gZW5kT2ZTY2FuUmFuZ2UgLSBpOwotCi0g
ICAgICAgICAgICBTdHJpbmcgbG9va3VwU3RyaW5nID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1
bi5kYXRhKGkpLCBjaGFyYWN0ZXJMb29rdXBSYW5nZSk7Ci0KLSAgICAgICAgICAgIFZlY3RvcjxT
VkdHbHlwaElkZW50aWZpZXI+IGdseXBoczsKLSAgICAgICAgICAgIGlmIChoYXZlQWx0R2x5cGgp
Ci0gICAgICAgICAgICAgICAgZ2x5cGhzLmFwcGVuZChhbHRHbHlwaElkZW50aWZpZXIpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZm9udEVsZW1lbnQtPmdldEdseXBoSWRl
bnRpZmllcnNGb3JTdHJpbmcobG9va3VwU3RyaW5nLCBnbHlwaHMpOwotCi0gICAgICAgICAgICBW
ZWN0b3I8U1ZHR2x5cGhJZGVudGlmaWVyPjo6aXRlcmF0b3IgaXQgPSBnbHlwaHMuYmVnaW4oKTsK
LSAgICAgICAgICAgIFZlY3RvcjxTVkdHbHlwaElkZW50aWZpZXI+OjppdGVyYXRvciBlbmQgPSBn
bHlwaHMuZW5kKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gKml0OwotICAgICAgICAgICAg
ICAgIGlmIChpZGVudGlmaWVyLmlzVmFsaWQgJiYgaXNDb21wYXRpYmxlR2x5cGgoaWRlbnRpZmll
ciwgaXNWZXJ0aWNhbFRleHQsIGxhbmd1YWdlLCBjaGFycywgaSwgaSArIGlkZW50aWZpZXIubmFt
ZUxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNoYXJhY3Rlckxvb2t1cFJh
bmdlID4gMCk7Ci0gICAgICAgICAgICAgICAgICAgIGkgKz0gaWRlbnRpZmllci5uYW1lTGVuZ3Ro
IC0gMTsKLSAgICAgICAgICAgICAgICAgICAgbV93YWxrZXJEYXRhLmNoYXJzQ29uc3VtZWQgKz0g
aWRlbnRpZmllci5uYW1lTGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBtX3dhbGtlckRhdGEu
Z2x5cGhOYW1lID0gaWRlbnRpZmllci5nbHlwaE5hbWU7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Zm91bmRHbHlwaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIFNWR0dseXBoRWxlbWVudDo6
aW5oZXJpdFVuc3BlY2lmaWVkQXR0cmlidXRlcyhpZGVudGlmaWVyLCBtX2ZvbnREYXRhKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoIWZvdW5kR2x5cGgpIHsKLSAgICAgICAgICAgICAgICArK21f
d2Fsa2VyRGF0YS5jaGFyc0NvbnN1bWVkOwotICAgICAgICAgICAgICAgIGlmIChTVkdNaXNzaW5n
R2x5cGhFbGVtZW50KiBlbGVtZW50ID0gbV9mb250RWxlbWVudC0+Zmlyc3RNaXNzaW5nR2x5cGhF
bGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gPG1pc3NpbmctZ2x5cGg+IGVsZW1l
bnQgc3VwcG9ydAotICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gU1ZHR2x5cGhFbGVt
ZW50OjpidWlsZEdlbmVyaWNHbHlwaElkZW50aWZpZXIoZWxlbWVudCk7Ci0gICAgICAgICAgICAg
ICAgICAgIFNWR0dseXBoRWxlbWVudDo6aW5oZXJpdFVuc3BlY2lmaWVkQXR0cmlidXRlcyhpZGVu
dGlmaWVyLCBtX2ZvbnREYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllci5pc1Zh
bGlkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAvLyBGYWxsYmFjayB0byBzeXN0ZW0gZm9udCBmYWxsYmFjawotICAgICAgICAgICAgICAgICAg
ICBUZXh0UnVuIHN1YlJ1bihydW4pOwotICAgICAgICAgICAgICAgICAgICBzdWJSdW4uc2V0VGV4
dChzdWJSdW4uZGF0YShpKSwgMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgKCptX3dhbGtlck1p
c3NpbmdHbHlwaENhbGxiYWNrKShzdWJSdW4sIG1fd2Fsa2VyRGF0YSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKCEoKm1fd2Fsa2VyQ2FsbGJhY2spKGlkZW50aWZpZXIsIG1fd2Fsa2VyRGF0
YSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGZvdW5kR2x5cGggPSBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBTVkdGb250RGF0
YSogbV9mb250RGF0YTsKLSAgICBTVkdGb250RWxlbWVudCogbV9mb250RWxlbWVudDsKLSAgICBT
VkdUZXh0UnVuRGF0YSYgbV93YWxrZXJEYXRhOwotICAgIFNWR1RleHRSdW5XYWxrZXJDYWxsYmFj
ayBtX3dhbGtlckNhbGxiYWNrOwotICAgIFNWR1RleHRSdW5XYWxrZXJNaXNzaW5nR2x5cGhDYWxs
YmFjayBtX3dhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNrOwotfTsKLQotLy8gQ2FsbGJhY2sgJiBk
YXRhIHN0cnVjdHVyZXMgdG8gY29tcHV0ZSB0aGUgd2lkdGggb2YgdGV4dCB1c2luZyBTVkcgRm9u
dHMKLXN0cnVjdCBTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRhIHsKLSAgICBpbnQg
YXQ7Ci0gICAgaW50IGZyb207Ci0gICAgaW50IHRvOwotICAgIGludCBleHRyYUNoYXJzQXZhaWxh
YmxlOwotICAgIGludCBjaGFyc0NvbnN1bWVkOwotICAgIFN0cmluZyBnbHlwaE5hbWU7Ci0KLSAg
ICBmbG9hdCBzY2FsZTsKLSAgICBmbG9hdCBsZW5ndGg7Ci0gICAgY29uc3QgRm9udCogZm9udDsK
LX07Ci0KLXN0YXRpYyBib29sIGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnRDYWxsYmFjayhjb25zdCBT
VkdHbHlwaElkZW50aWZpZXImIGlkZW50aWZpZXIsIFNWR1RleHRSdW5XYWxrZXJNZWFzdXJlZExl
bmd0aERhdGEmIGRhdGEpCi17Ci0gICAgaWYgKGRhdGEuYXQgPj0gZGF0YS5mcm9tICYmIGRhdGEu
YXQgPCBkYXRhLnRvKQotICAgICAgICBkYXRhLmxlbmd0aCArPSBpZGVudGlmaWVyLmhvcml6b250
YWxBZHZhbmNlWCAqIGRhdGEuc2NhbGU7Ci0KLSAgICBkYXRhLmF0Kys7Ci0gICAgcmV0dXJuIGRh
dGEuYXQgPCBkYXRhLnRvOwotfQotCi1zdGF0aWMgdm9pZCBmbG9hdFdpZHRoTWlzc2luZ0dseXBo
Q2FsbGJhY2soY29uc3QgVGV4dFJ1biYgcnVuLCBTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5n
dGhEYXRhJiBkYXRhKQotewotICAgIC8vIEhhbmRsZSBzeXN0ZW0gZm9udCBmYWxsYmFjawotICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24oZGF0YS5mb250LT5mb250RGVzY3JpcHRp
b24oKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShGb250RmFtaWx5KCkpOwotICAg
IEZvbnQgZm9udChmb250RGVzY3JpcHRpb24sIDAsIDApOyAvLyBzcGFjaW5nIGhhbmRsZWQgYnkg
U1ZHIHRleHQgY29kZS4KLSAgICBmb250LnVwZGF0ZShkYXRhLmZvbnQtPmZvbnRTZWxlY3Rvcigp
KTsKLQotICAgIGRhdGEubGVuZ3RoICs9IGZvbnQud2lkdGgocnVuKTsKLX0KLQotCi1TVkdGb250
RWxlbWVudCogRm9udDo6c3ZnRm9udCgpIGNvbnN0Ci17IAotICAgIGlmICghaXNTVkdGb250KCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50ID0g
MDsKLSAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IDA7Ci0gICAgaWYg
KHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShwcmltYXJ5Rm9udCgpLCBmb250
RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZvbnRFbGVtZW50Owot
ICAgIAotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgZmxvYXQgZmxvYXRXaWR0aE9mU3ViU3Ry
aW5nVXNpbmdTVkdGb250KGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgaW50
IGV4dHJhQ2hhcnNBdmFpbGFibGUsIGludCBmcm9tLCBpbnQgdG8sIGludCYgY2hhcnNDb25zdW1l
ZCwgU3RyaW5nJiBnbHlwaE5hbWUpCi17Ci0gICAgaW50IG5ld0Zyb20gPSB0byA+IGZyb20gPyBm
cm9tIDogdG87Ci0gICAgaW50IG5ld1RvID0gdG8gPiBmcm9tID8gdG8gOiBmcm9tOwotCi0gICAg
ZnJvbSA9IG5ld0Zyb207Ci0gICAgdG8gPSBuZXdUbzsKLQotICAgIFNWR0ZvbnRFbGVtZW50KiBm
b250RWxlbWVudCA9IDA7Ci0gICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQg
PSAwOwotCi0gICAgaWYgKGNvbnN0IFNWR0ZvbnREYXRhKiBmb250RGF0YSA9IHN2Z0ZvbnRBbmRG
b250RmFjZUVsZW1lbnRGb3JGb250RGF0YShmb250LT5wcmltYXJ5Rm9udCgpLCBmb250RmFjZUVs
ZW1lbnQsIGZvbnRFbGVtZW50KSkgewotICAgICAgICBpZiAoIWZvbnRFbGVtZW50KQotICAgICAg
ICAgICAgcmV0dXJuIDAuMGY7Ci0KLSAgICAgICAgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVu
Z3RoRGF0YSBkYXRhOwotCi0gICAgICAgIGRhdGEuZm9udCA9IGZvbnQ7Ci0gICAgICAgIGRhdGEu
YXQgPSBmcm9tOwotICAgICAgICBkYXRhLmZyb20gPSBmcm9tOwotICAgICAgICBkYXRhLnRvID0g
dG87Ci0gICAgICAgIGRhdGEuZXh0cmFDaGFyc0F2YWlsYWJsZSA9IGV4dHJhQ2hhcnNBdmFpbGFi
bGU7Ci0gICAgICAgIGRhdGEuY2hhcnNDb25zdW1lZCA9IDA7Ci0gICAgICAgIGRhdGEuc2NhbGUg
PSBjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250LT5zaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5p
dHNQZXJFbSgpLCAxLjBmKTsKLSAgICAgICAgZGF0YS5sZW5ndGggPSAwLjBmOwotCi0gICAgICAg
IFN0cmluZyBsYW5ndWFnZTsKLSAgICAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IGZhbHNlOyAv
LyBIb2xkcyB0cnVlIGZvciBIVE1MIHRleHQKLQotICAgICAgICAvLyBUT0RPOiBsYW5ndWFnZSBt
YXRjaGluZyAmIHN2ZyBnbHlwaHMgc2hvdWxkIGJlIHBvc3NpYmxlIGZvciBIVE1MIHRleHQsIHRv
by4KLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gcnVuLnJlZmVyZW5j
aW5nUmVuZGVyT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVu
ZGVyZXIgPSByZW5kZXJPYmplY3QtPnBhcmVudCgpOwotICAgICAgICAgICAgQVNTRVJUKHBhcmVu
dFJlbmRlcmVyKTsKLSAgICAgICAgICAgIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRp
bmdNb2RlKHBhcmVudFJlbmRlcmVyLT5zdHlsZSgpLT5zdmdTdHlsZSgpKTsKLQotICAgICAgICAg
ICAgaWYgKFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGFy
ZW50UmVuZGVyZXItPm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgbGFuZ3VhZ2UgPSBlbGVtZW50
LT5nZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFNWR1RleHRSdW5XYWxrZXI8U1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0YT4gcnVu
V2Fsa2VyKGZvbnREYXRhLCBmb250RWxlbWVudCwgZGF0YSwgZmxvYXRXaWR0aFVzaW5nU1ZHRm9u
dENhbGxiYWNrLCBmbG9hdFdpZHRoTWlzc2luZ0dseXBoQ2FsbGJhY2spOwotICAgICAgICBydW5X
YWxrZXIud2FsayhydW4sIGlzVmVydGljYWxUZXh0LCBsYW5ndWFnZSwgZnJvbSwgdG8pOwotICAg
ICAgICBjaGFyc0NvbnN1bWVkID0gZGF0YS5jaGFyc0NvbnN1bWVkOwotICAgICAgICBnbHlwaE5h
bWUgPSBkYXRhLmdseXBoTmFtZTsKLSAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoOwotICAgIH0K
LQotICAgIHJldHVybiAwLjBmOwotfQotCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoVXNpbmdTVkdG
b250KGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKLXsKLSAgICBpbnQgY2hhcnNDb25zdW1lZDsK
LSAgICBTdHJpbmcgZ2x5cGhOYW1lOwotICAgIHJldHVybiBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdV
c2luZ1NWR0ZvbnQodGhpcywgcnVuLCAwLCAwLCBydW4ubGVuZ3RoKCksIGNoYXJzQ29uc3VtZWQs
IGdseXBoTmFtZSk7Ci19Ci0KLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29u
c3QgVGV4dFJ1biYgcnVuLCBpbnQgZXh0cmFDaGFyc0F2YWlsYWJsZSwgaW50JiBjaGFyc0NvbnN1
bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZmxvYXRXaWR0aE9m
U3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgZXh0cmFDaGFyc0F2YWlsYWJsZSwgMCwg
cnVuLmxlbmd0aCgpLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpOwotfQotCi0vLyBDYWxsYmFj
ayAmIGRhdGEgc3RydWN0dXJlcyB0byBkcmF3IHRleHQgdXNpbmcgU1ZHIEZvbnRzCi1zdHJ1Y3Qg
U1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSB7Ci0gICAgaW50IGV4dHJhQ2hhcnNBdmFpbGFi
bGU7Ci0gICAgaW50IGNoYXJzQ29uc3VtZWQ7Ci0gICAgU3RyaW5nIGdseXBoTmFtZTsKLSAgICBW
ZWN0b3I8U1ZHR2x5cGhJZGVudGlmaWVyPiBnbHlwaElkZW50aWZpZXJzOwotICAgIFZlY3RvcjxV
Q2hhcj4gZmFsbGJhY2tDaGFyYWN0ZXJzOwotfTsKLQotc3RhdGljIGJvb2wgZHJhd1RleHRVc2lu
Z1NWR0ZvbnRDYWxsYmFjayhjb25zdCBTVkdHbHlwaElkZW50aWZpZXImIGlkZW50aWZpZXIsIFNW
R1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGEmIGRhdGEpCi17Ci0gICAgZGF0YS5nbHlwaElkZW50
aWZpZXJzLmFwcGVuZChpZGVudGlmaWVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IHZvaWQgZHJhd1RleHRNaXNzaW5nR2x5cGhDYWxsYmFjayhjb25zdCBUZXh0UnVuJiBydW4sIFNW
R1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGEmIGRhdGEpCi17Ci0gICAgQVNTRVJUKHJ1bi5sZW5n
dGgoKSA9PSAxKTsKLSAgICBkYXRhLmdseXBoSWRlbnRpZmllcnMuYXBwZW5kKFNWR0dseXBoSWRl
bnRpZmllcigpKTsKLSAgICBkYXRhLmZhbGxiYWNrQ2hhcmFjdGVycy5hcHBlbmQocnVuWzBdKTsK
LX0KLQotdm9pZCBGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewot
ICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IDA7Ci0gICAgU1ZHRm9udEZhY2VFbGVt
ZW50KiBmb250RmFjZUVsZW1lbnQgPSAwOwotCi0gICAgaWYgKGNvbnN0IFNWR0ZvbnREYXRhKiBm
b250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShwcmltYXJ5Rm9u
dCgpLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkgewotICAgICAgICBpZiAoIWZvbnRF
bGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFNWR1RleHRSdW5XYWxrZXJE
cmF3VGV4dERhdGEgZGF0YTsKLSAgICAgICAgRmxvYXRQb2ludCBjdXJyZW50UG9pbnQgPSBwb2lu
dDsKLSAgICAgICAgZmxvYXQgc2NhbGUgPSBjb252ZXJ0RW1Vbml0VG9QaXhlbChzaXplKCksIGZv
bnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpLCAxLjBmKTsKLQotICAgICAgICBSZW5kZXJTVkdS
ZXNvdXJjZSogYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSA9IHJ1bi5hY3RpdmVQYWludGluZ1Jlc291
cmNlKCk7Ci0KLSAgICAgICAgLy8gSWYgcmVuZGVyT2JqZWN0IGlzIG5vdCBzZXQsIHdlJ3JlIGRl
YWxpbmcgZm9yIEhUTUwgdGV4dCByZW5kZXJlZCB1c2luZyBTVkcgRm9udHMuCi0gICAgICAgIGlm
ICghcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCgh
YWN0aXZlUGFpbnRpbmdSZXNvdXJjZSk7Ci0KLSAgICAgICAgICAgIC8vIFRPRE86IFdlJ3JlIG9u
bHkgc3VwcG9ydGluZyBzaW1wbGUgZmlsbGVkIEhUTUwgdGV4dCBzbyBmYXIuCi0gICAgICAgICAg
ICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIHNvbGlkUGFpbnRpbmdSZXNvdXJjZSA9IFJl
bmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKLSAgICAgICAg
ICAgIHNvbGlkUGFpbnRpbmdSZXNvdXJjZS0+c2V0Q29sb3IoY29udGV4dC0+ZmlsbENvbG9yKCkp
OwotCi0gICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlID0gc29saWRQYWludGluZ1Jl
c291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKGFjdGl2ZVBhaW50aW5nUmVzb3Vy
Y2UpOwotCi0gICAgICAgIGludCBjaGFyc0NvbnN1bWVkOwotICAgICAgICBTdHJpbmcgZ2x5cGhO
YW1lOwotICAgICAgICBib29sIGlzVmVydGljYWxUZXh0ID0gZmFsc2U7Ci0gICAgICAgIGZsb2F0
IHhTdGFydE9mZnNldCA9IGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlzLCBy
dW4sIDAsIHJ1bi5ydGwoKSA/IHRvIDogMCwgcnVuLnJ0bCgpID8gcnVuLmxlbmd0aCgpIDogZnJv
bSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKLSAgICAgICAgRmxvYXRQb2ludCBnbHlwaE9y
aWdpbjsKLQotICAgICAgICBTdHJpbmcgbGFuZ3VhZ2U7Ci0KLSAgICAgICAgLy8gVE9ETzogbGFu
Z3VhZ2UgbWF0Y2hpbmcgJiBzdmcgZ2x5cGhzIHNob3VsZCBiZSBwb3NzaWJsZSBmb3IgSFRNTCB0
ZXh0LCB0b28uCi0gICAgICAgIFJlbmRlck9iamVjdCogcmVmZXJlbmNpbmdSZW5kZXJPYmplY3Qg
PSBydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBy
ZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudCA9IHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0ID8g
cmVmZXJlbmNpbmdSZW5kZXJPYmplY3QtPnBhcmVudCgpIDogMDsKLSAgICAgICAgUmVuZGVyU3R5
bGUqIHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50U3R5bGUgPSAwOwotICAgICAgICBpZiAo
cmVmZXJlbmNpbmdSZW5kZXJPYmplY3QpIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWZlcmVuY2lu
Z1JlbmRlck9iamVjdFBhcmVudCk7Ci0gICAgICAgICAgICByZWZlcmVuY2luZ1JlbmRlck9iamVj
dFBhcmVudFN0eWxlID0gcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnQtPnN0eWxlKCk7Ci0K
LSAgICAgICAgICAgIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHJlZmVy
ZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50U3R5bGUtPnN2Z1N0eWxlKCkpOyAgICAKLSAgICAgICAg
ICAgIGlmIChTVkdFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHJl
ZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50LT5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGxh
bmd1YWdlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cik7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIWlzVmVydGljYWxUZXh0KSB7Ci0gICAgICAgICAgICBnbHlw
aE9yaWdpbi5zZXRYKGZvbnREYXRhLT5ob3Jpem9udGFsT3JpZ2luWCgpICogc2NhbGUpOwotICAg
ICAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WShmb250RGF0YS0+aG9yaXpvbnRhbE9yaWdpblkoKSAq
IHNjYWxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRhdGEuZXh0cmFDaGFyc0F2YWlsYWJsZSA9
IDA7Ci0gICAgICAgIGRhdGEuY2hhcnNDb25zdW1lZCA9IDA7Ci0KLSAgICAgICAgU1ZHVGV4dFJ1
bldhbGtlcjxTVkdUZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhPiBydW5XYWxrZXIoZm9udERhdGEs
IGZvbnRFbGVtZW50LCBkYXRhLCBkcmF3VGV4dFVzaW5nU1ZHRm9udENhbGxiYWNrLCBkcmF3VGV4
dE1pc3NpbmdHbHlwaENhbGxiYWNrKTsKLSAgICAgICAgcnVuV2Fsa2VyLndhbGsocnVuLCBpc1Zl
cnRpY2FsVGV4dCwgbGFuZ3VhZ2UsIGZyb20sIHRvKTsKLQotICAgICAgICBSZW5kZXJTVkdSZXNv
dXJjZU1vZGUgcmVzb3VyY2VNb2RlID0gY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4
dE1vZGVTdHJva2UgPyBBcHBseVRvU3Ryb2tlTW9kZSA6IEFwcGx5VG9GaWxsTW9kZTsKLQotICAg
ICAgICB1bnNpZ25lZCBudW1HbHlwaHMgPSBkYXRhLmdseXBoSWRlbnRpZmllcnMuc2l6ZSgpOwot
ICAgICAgICB1bnNpZ25lZCBmYWxsYmFja0NoYXJhY3RlckluZGV4ID0gMDsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgICAgICBjb25z
dCBTVkdHbHlwaElkZW50aWZpZXImIGlkZW50aWZpZXIgPSBkYXRhLmdseXBoSWRlbnRpZmllcnNb
cnVuLnJ0bCgpID8gbnVtR2x5cGhzIC0gaSAtIDEgOiBpXTsKLSAgICAgICAgICAgIGlmIChpZGVu
dGlmaWVyLmlzVmFsaWQpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBhcmJp
dGFyeSBTVkcgY29udGVudCBhcyBnbHlwaCAoY3VycmVudGx5IGxpbWl0ZWQgdG8gPGdseXBoIGQ9
Ii4uLiI+IHNpdHVhdGlvbnMpLgotICAgICAgICAgICAgICAgIGlmICghaWRlbnRpZmllci5wYXRo
RGF0YS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2F2ZSgpOwot
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WChpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCAq
IHNjYWxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoT3JpZ2luLnNldFkoaWRlbnRp
Zmllci52ZXJ0aWNhbE9yaWdpblkgKiBzY2FsZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ2x5cGhQYXRoVHJhbnNmb3JtOwot
ICAgICAgICAgICAgICAgICAgICBnbHlwaFBhdGhUcmFuc2Zvcm0udHJhbnNsYXRlKHhTdGFydE9m
ZnNldCArIGN1cnJlbnRQb2ludC54KCkgKyBnbHlwaE9yaWdpbi54KCksIGN1cnJlbnRQb2ludC55
KCkgKyBnbHlwaE9yaWdpbi55KCkpOwotICAgICAgICAgICAgICAgICAgICBnbHlwaFBhdGhUcmFu
c2Zvcm0uc2NhbGUoc2NhbGUsIC1zY2FsZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgUGF0aCBn
bHlwaFBhdGggPSBpZGVudGlmaWVyLnBhdGhEYXRhOwotICAgICAgICAgICAgICAgICAgICBnbHlw
aFBhdGgudHJhbnNmb3JtKGdseXBoUGF0aFRyYW5zZm9ybSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UocmVmZXJlbmNpbmdS
ZW5kZXJPYmplY3RQYXJlbnQsIHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50U3R5bGUsIGNv
bnRleHQsIHJlc291cmNlTW9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZl
cmVuY2luZ1JlbmRlck9iamVjdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRl
clNWR0lubGluZVRleHQqIHRleHRSZW5kZXJlciA9IHRvUmVuZGVyU1ZHSW5saW5lVGV4dChyZWZl
cmVuY2luZ1JlbmRlck9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGNvbnRleHQtPnN0cm9rZVRoaWNrbmVzcygpICogdGV4dFJl
bmRlcmVyLT5zY2FsaW5nRmFjdG9yKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVz
b3VyY2UocmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnQsIGNvbnRleHQsIHJlc291cmNlTW9k
ZSwgJmdseXBoUGF0aCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAgICAgICAgICBjdXJyZW50UG9p
bnQubW92ZSgwLjBmLCBpZGVudGlmaWVyLnZlcnRpY2FsQWR2YW5jZVkgKiBzY2FsZSk7Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjdXJyZW50UG9pbnQubW92ZShp
ZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCAqIHNjYWxlLCAwLjBmKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gSGFuZGxlIHN5c3RlbSBmb250IGZhbGxiYWNr
Ci0gICAgICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbihtX2ZvbnRE
ZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShG
b250RmFtaWx5KCkpOwotICAgICAgICAgICAgICAgIEZvbnQgZm9udChmb250RGVzY3JpcHRpb24s
IDAsIDApOyAvLyBzcGFjaW5nIGhhbmRsZWQgYnkgU1ZHIHRleHQgY29kZS4KLSAgICAgICAgICAg
ICAgICBmb250LnVwZGF0ZShmb250U2VsZWN0b3IoKSk7Ci0KLSAgICAgICAgICAgICAgICBUZXh0
UnVuIGZhbGxiYWNrQ2hhcmFjdGVyUnVuKHJ1bik7Ci0gICAgICAgICAgICAgICAgZmFsbGJhY2tD
aGFyYWN0ZXJSdW4uc2V0VGV4dCgmZGF0YS5mYWxsYmFja0NoYXJhY3RlcnNbcnVuLnJ0bCgpID8g
ZGF0YS5mYWxsYmFja0NoYXJhY3RlcnMuc2l6ZSgpIC0gZmFsbGJhY2tDaGFyYWN0ZXJJbmRleCAt
IDEgOiBmYWxsYmFja0NoYXJhY3RlckluZGV4XSwgMSk7Ci0gICAgICAgICAgICAgICAgZm9udC5k
cmF3VGV4dChjb250ZXh0LCBmYWxsYmFja0NoYXJhY3RlclJ1biwgY3VycmVudFBvaW50KTsKLQot
ICAgICAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFBvaW50Lm1vdmUoMC4wZiwgZm9udC53aWR0aChmYWxsYmFja0NoYXJhY3RlclJ1bikp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFBvaW50
Lm1vdmUoZm9udC53aWR0aChmYWxsYmFja0NoYXJhY3RlclJ1biksIDAuMGYpOwotCi0gICAgICAg
ICAgICAgICAgZmFsbGJhY2tDaGFyYWN0ZXJJbmRleCsrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotfQotCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvclRleHRVc2lu
Z1NWR0ZvbnQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGhlaWdodCwgaW50IGZyb20sIGludCB0bykgY29uc3QKLXsKLSAgICBpbnQgY2hhcnNDb25zdW1l
ZDsKLSAgICBTdHJpbmcgZ2x5cGhOYW1lOwotCi0gICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54
KCkgKyBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQodGhpcywgcnVuLCAwLCBydW4u
cnRsKCkgPyB0byA6IDAsIHJ1bi5ydGwoKSA/IHJ1bi5sZW5ndGgoKSA6IGZyb20sIGNoYXJzQ29u
c3VtZWQsIGdseXBoTmFtZSksCi0gICAgICAgICAgICAgICAgICAgICBwb2ludC55KCksIGZsb2F0
V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlzLCBydW4sIDAsIGZyb20sIHRvLCBjaGFy
c0NvbnN1bWVkLCBnbHlwaE5hbWUpLCBoZWlnaHQpOwotfQotCi1pbnQgRm9udDo6b2Zmc2V0Rm9y
UG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mLCBmbG9hdCwgYm9vbCkg
Y29uc3QKLXsKLSAgICAvLyBUT0RPOiBGaXggdGV4dCBzZWxlY3Rpb24gd2hlbiBIVE1MIHRleHQg
aXMgZHJhd24gdXNpbmcgYSBTVkcgRm9udAotICAgIC8vIFdlIG5lZWQgdG8gaW50ZWdyYXRlIHRo
ZSBTVkcgdGV4dCBzZWxlY3Rpb24gY29kZSBpbiB0aGUgb2Zmc2V0Rm9yUG9zaXRpb24oKSBmcmFt
ZXdvcmsuCi0gICAgLy8gVGhpcyB3aWxsIGFsc28gZml4IGEgbWFqb3IgaXNzdWUsIHRoYXQgU1ZH
IFRleHQgY29kZSBjYW4ndCBzZWxlY3QgYXJhYmljIHN0cmluZ3MgcHJvcGVybHkuCi0gICAgcmV0
dXJuIDA7Ci19Ci0KIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TVkdHbHlwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NWR0dseXBoLmgJKHJldmlzaW9uIDg0NDgyKQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHR2x5cGhFbGVtZW50Lmg6ODQ0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TVkdHbHlwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBTVkdHbHlwaEVsZW1lbnRfaAorI2RlZmluZSBTVkdHbHlwaEVsZW1lbnRfaAorCisjaWYgRU5B
QkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkRWxl
bWVudC5oIgorCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU1ZHRm9udERhdGE7CisKKy8vIERlc2NyaWJl
IGEgU1ZHIDxnbHlwaD4gZWxlbWVudAorc3RydWN0IFNWR0dseXBoSWRlbnRpZmllciB7CisgICAg
ZW51bSBPcmllbnRhdGlvbiB7CisgICAgICAgIFZlcnRpY2FsLAorICAgICAgICBIb3Jpem9udGFs
LAorICAgICAgICBCb3RoCisgICAgfTsKKworICAgIC8vIFNWRyBGb250IGRlcGVuZHMgb24gZXhh
Y3RseSB0aGlzIG9yZGVyLgorICAgIGVudW0gQXJhYmljRm9ybSB7CisgICAgICAgIE5vbmUgPSAw
LAorICAgICAgICBJc29sYXRlZCwKKyAgICAgICAgVGVybWluYWwsCisgICAgICAgIEluaXRpYWws
CisgICAgICAgIE1lZGlhbAorICAgIH07CisKKyAgICBTVkdHbHlwaElkZW50aWZpZXIoKQorICAg
ICAgICA6IGlzVmFsaWQoZmFsc2UpCisgICAgICAgICwgb3JpZW50YXRpb24oQm90aCkKKyAgICAg
ICAgLCBhcmFiaWNGb3JtKE5vbmUpCisgICAgICAgICwgcHJpb3JpdHkoMCkKKyAgICAgICAgLCBu
YW1lTGVuZ3RoKDApCisgICAgICAgICwgaG9yaXpvbnRhbEFkdmFuY2VYKDAuMGYpCisgICAgICAg
ICwgdmVydGljYWxPcmlnaW5YKDAuMGYpCisgICAgICAgICwgdmVydGljYWxPcmlnaW5ZKDAuMGYp
CisgICAgICAgICwgdmVydGljYWxBZHZhbmNlWSgwLjBmKQorICAgIHsKKyAgICB9CisKKyAgICAv
LyBVc2VkIHRvIG1hcmsgb3VyIGZsb2F0IHByb3BlcnRpZXMgYXMgInRvIGJlIGluaGVyaXRlZCBm
cm9tIFNWR0ZvbnREYXRhIgorICAgIHN0YXRpYyBmbG9hdCBpbmhlcml0ZWRWYWx1ZSgpCisgICAg
eworICAgICAgICBzdGF0aWMgZmxvYXQgc19pbmhlcml0ZWRWYWx1ZSA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpOworICAgICAgICByZXR1cm4gc19pbmhlcml0ZWRWYWx1
ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU1ZHR2x5cGhJZGVudGlmaWVy
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1ZhbGlkID09IG90aGVyLmlz
VmFsaWQKKyAgICAgICAgICAgICYmIG9yaWVudGF0aW9uID09IG90aGVyLm9yaWVudGF0aW9uCisg
ICAgICAgICAgICAmJiBhcmFiaWNGb3JtID09IG90aGVyLmFyYWJpY0Zvcm0KKyAgICAgICAgICAg
ICYmIGdseXBoTmFtZSA9PSBvdGhlci5nbHlwaE5hbWUKKyAgICAgICAgICAgICYmIGhvcml6b250
YWxBZHZhbmNlWCA9PSBvdGhlci5ob3Jpem9udGFsQWR2YW5jZVgKKyAgICAgICAgICAgICYmIHZl
cnRpY2FsT3JpZ2luWCA9PSBvdGhlci52ZXJ0aWNhbE9yaWdpblgKKyAgICAgICAgICAgICYmIHZl
cnRpY2FsT3JpZ2luWSA9PSBvdGhlci52ZXJ0aWNhbE9yaWdpblkKKyAgICAgICAgICAgICYmIHZl
cnRpY2FsQWR2YW5jZVkgPT0gb3RoZXIudmVydGljYWxBZHZhbmNlWQorICAgICAgICAgICAgJiYg
bGFuZ3VhZ2VzID09IG90aGVyLmxhbmd1YWdlczsKKyAgICB9CisKKyAgICBib29sIGlzVmFsaWQg
OiAxOworCisgICAgdW5zaWduZWQgb3JpZW50YXRpb24gOiAyOyAvLyBPcmllbnRhdGlvbgorICAg
IHVuc2lnbmVkIGFyYWJpY0Zvcm0gOiAzOyAvLyBBcmFiaWNGb3JtCisgICAgaW50IHByaW9yaXR5
OworICAgIHNpemVfdCBuYW1lTGVuZ3RoOworICAgIFN0cmluZyBnbHlwaE5hbWU7CisKKyAgICBm
bG9hdCBob3Jpem9udGFsQWR2YW5jZVg7CisgICAgZmxvYXQgdmVydGljYWxPcmlnaW5YOworICAg
IGZsb2F0IHZlcnRpY2FsT3JpZ2luWTsKKyAgICBmbG9hdCB2ZXJ0aWNhbEFkdmFuY2VZOworCisg
ICAgUGF0aCBwYXRoRGF0YTsKKyAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7Cit9OworCitj
bGFzcyBTVkdHbHlwaEVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkRWxlbWVudCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHR2x5cGhFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAgICBTVkdHbHlwaElkZW50aWZpZXIgYnVpbGRH
bHlwaElkZW50aWZpZXIoKSBjb25zdDsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5
IFNWR0ZvbnQKKyAgICBzdGF0aWMgdm9pZCBpbmhlcml0VW5zcGVjaWZpZWRBdHRyaWJ1dGVzKFNW
R0dseXBoSWRlbnRpZmllciYsIGNvbnN0IFNWR0ZvbnREYXRhKik7CisgICAgc3RhdGljIFN0cmlu
ZyBxdWVyeVNWR0ZvbnRMYW5ndWFnZShjb25zdCBTVkdFbGVtZW50Kik7CisKKyAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gc2hhcmVkIGJldHdlZW4gU1ZHR2x5cGhFbGVtZW50ICYgU1ZHTWlzc2luZ0ds
eXBoRWxlbWVudAorICAgIHN0YXRpYyBTVkdHbHlwaElkZW50aWZpZXIgYnVpbGRHZW5lcmljR2x5
cGhJZGVudGlmaWVyKGNvbnN0IFNWR0VsZW1lbnQqKTsKKworcHJpdmF0ZToKKyAgICBTVkdHbHlw
aEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lk
IGZpbGxBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCgpOworICAgIHZpcnR1YWwgQXR0cmlidXRl
VG9Qcm9wZXJ0eVR5cGVNYXAmIGF0dHJpYnV0ZVRvUHJvcGVydHlUeXBlTWFwKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlZEZyb21Eb2N1bWVudCgpOworCisgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQo
UmVuZGVyU3R5bGUqKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdm9pZCBpbnZhbGlkYXRlR2x5
cGhDYWNoZSgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFNWR19GT05UUykKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU1ZHR2x5cGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TVkdHbHlwaC5oCShyZXZpc2lvbiA4NDQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NWR0dseXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAqIENvcHlyaWdodCAoQykgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOSwyMiArMjAsMjAgQEAKICAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgU1ZHR2x5cGhFbGVtZW50X2gK
LSNkZWZpbmUgU1ZHR2x5cGhFbGVtZW50X2gKKyNpZm5kZWYgU1ZHR2x5cGhfaAorI2RlZmluZSBT
VkdHbHlwaF9oCiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogI2luY2x1ZGUgIlBhdGguaCIKLSNp
bmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAKICNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU1ZHRm9u
dERhdGE7Ci0KLS8vIERlc2NyaWJlIGEgU1ZHIDxnbHlwaD4gZWxlbWVudAotc3RydWN0IFNWR0ds
eXBoSWRlbnRpZmllciB7CisvLyBEZXNjcmliZSBhIGdseXBoIGZyb20gYSBTVkcgRm9udC4KK3N0
cnVjdCBTVkdHbHlwaCB7CiAgICAgZW51bSBPcmllbnRhdGlvbiB7CiAgICAgICAgIFZlcnRpY2Fs
LAogICAgICAgICBIb3Jpem9udGFsLApAQCAtNTAsMTYgKzQ5LDE2IEBAIHN0cnVjdCBTVkdHbHlw
aElkZW50aWZpZXIgewogICAgICAgICBNZWRpYWwKICAgICB9OwogCi0gICAgU1ZHR2x5cGhJZGVu
dGlmaWVyKCkKKyAgICBTVkdHbHlwaCgpCiAgICAgICAgIDogaXNWYWxpZChmYWxzZSkKICAgICAg
ICAgLCBvcmllbnRhdGlvbihCb3RoKQogICAgICAgICAsIGFyYWJpY0Zvcm0oTm9uZSkKICAgICAg
ICAgLCBwcmlvcml0eSgwKQotICAgICAgICAsIG5hbWVMZW5ndGgoMCkKLSAgICAgICAgLCBob3Jp
em9udGFsQWR2YW5jZVgoMC4wZikKLSAgICAgICAgLCB2ZXJ0aWNhbE9yaWdpblgoMC4wZikKLSAg
ICAgICAgLCB2ZXJ0aWNhbE9yaWdpblkoMC4wZikKLSAgICAgICAgLCB2ZXJ0aWNhbEFkdmFuY2VZ
KDAuMGYpCisgICAgICAgICwgdW5pY29kZVN0cmluZ0xlbmd0aCgwKQorICAgICAgICAsIGhvcml6
b250YWxBZHZhbmNlWCgwKQorICAgICAgICAsIHZlcnRpY2FsT3JpZ2luWCgwKQorICAgICAgICAs
IHZlcnRpY2FsT3JpZ2luWSgwKQorICAgICAgICAsIHZlcnRpY2FsQWR2YW5jZVkoMCkKICAgICB7
CiAgICAgfQogCkBAIC03MCwxMSArNjksMTIgQEAgc3RydWN0IFNWR0dseXBoSWRlbnRpZmllciB7
CiAgICAgICAgIHJldHVybiBzX2luaGVyaXRlZFZhbHVlOwogICAgIH0KIAotICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBTVkdHbHlwaElkZW50aWZpZXImIG90aGVyKSBjb25zdAorICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBTVkdHbHlwaCYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gaXNWYWxpZCA9PSBvdGhlci5pc1ZhbGlkCiAgICAgICAgICAgICAmJiBvcmllbnRhdGlv
biA9PSBvdGhlci5vcmllbnRhdGlvbgogICAgICAgICAgICAgJiYgYXJhYmljRm9ybSA9PSBvdGhl
ci5hcmFiaWNGb3JtCisgICAgICAgICAgICAmJiB1bmljb2RlU3RyaW5nTGVuZ3RoID09IG90aGVy
LnVuaWNvZGVTdHJpbmdMZW5ndGgKICAgICAgICAgICAgICYmIGdseXBoTmFtZSA9PSBvdGhlci5n
bHlwaE5hbWUKICAgICAgICAgICAgICYmIGhvcml6b250YWxBZHZhbmNlWCA9PSBvdGhlci5ob3Jp
em9udGFsQWR2YW5jZVgKICAgICAgICAgICAgICYmIHZlcnRpY2FsT3JpZ2luWCA9PSBvdGhlci52
ZXJ0aWNhbE9yaWdpblgKQEAgLTg4LDcgKzg4LDcgQEAgc3RydWN0IFNWR0dseXBoSWRlbnRpZmll
ciB7CiAgICAgdW5zaWduZWQgb3JpZW50YXRpb24gOiAyOyAvLyBPcmllbnRhdGlvbgogICAgIHVu
c2lnbmVkIGFyYWJpY0Zvcm0gOiAzOyAvLyBBcmFiaWNGb3JtCiAgICAgaW50IHByaW9yaXR5Owot
ICAgIHNpemVfdCBuYW1lTGVuZ3RoOworICAgIHNpemVfdCB1bmljb2RlU3RyaW5nTGVuZ3RoOwog
ICAgIFN0cmluZyBnbHlwaE5hbWU7CiAKICAgICBmbG9hdCBob3Jpem9udGFsQWR2YW5jZVg7CkBA
IC0xMDAsMzMgKzEwMCw4IEBAIHN0cnVjdCBTVkdHbHlwaElkZW50aWZpZXIgewogICAgIFZlY3Rv
cjxTdHJpbmc+IGxhbmd1YWdlczsKIH07CiAKLWNsYXNzIFNWR0dseXBoRWxlbWVudCA6IHB1Ymxp
YyBTVkdTdHlsZWRFbGVtZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdH
bHlwaEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLQot
ICAgIFNWR0dseXBoSWRlbnRpZmllciBidWlsZEdseXBoSWRlbnRpZmllcigpIGNvbnN0OwotCi0g
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgU1ZHRm9udAotICAgIHN0YXRpYyB2b2lkIGlu
aGVyaXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMoU1ZHR2x5cGhJZGVudGlmaWVyJiwgY29uc3QgU1ZH
Rm9udERhdGEqKTsKLSAgICBzdGF0aWMgU3RyaW5nIHF1ZXJ5U1ZHRm9udExhbmd1YWdlKGNvbnN0
IFNWR0VsZW1lbnQqKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBzaGFyZWQgYmV0d2VlbiBT
VkdHbHlwaEVsZW1lbnQgJiBTVkdNaXNzaW5nR2x5cGhFbGVtZW50Ci0gICAgc3RhdGljIFNWR0ds
eXBoSWRlbnRpZmllciBidWlsZEdlbmVyaWNHbHlwaElkZW50aWZpZXIoY29uc3QgU1ZHRWxlbWVu
dCopOwotCi1wcml2YXRlOgotICAgIFNWR0dseXBoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShB
dHRyaWJ1dGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbEF0dHJpYnV0ZVRvUHJvcGVydHlUeXBl
TWFwKCk7Ci0gICAgdmlydHVhbCBBdHRyaWJ1dGVUb1Byb3BlcnR5VHlwZU1hcCYgYXR0cmlidXRl
VG9Qcm9wZXJ0eVR5cGVNYXAoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1
bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopIHsgcmV0dXJuIGZhbHNl
OyB9Ci0KLSAgICB2b2lkIGludmFsaWRhdGVHbHlwaENhY2hlKCk7Ci19OworVmVjdG9yPFNWR0ds
eXBoOjpBcmFiaWNGb3JtPiBjaGFyYWN0ZXJzV2l0aEFyYWJpY0Zvcm0oY29uc3QgU3RyaW5nJiBp
bnB1dCwgYm9vbCBydGwpOworYm9vbCBpc0NvbXBhdGlibGVHbHlwaChjb25zdCBTVkdHbHlwaCYs
IGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UsIGNvbnN0IFZlY3Rv
cjxTVkdHbHlwaDo6QXJhYmljRm9ybT4mLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25l
ZCBlbmRQb3NpdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAko
cmV2aXNpb24gODQ0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgU2ltcGxlRm9u
dERhdGE6OlNpbXBsZUZvbnREYXRhKFBhc3NPd25QdAogICAgIFNWR0ZvbnRFbGVtZW50KiBhc3Nv
Y2lhdGVkRm9udEVsZW1lbnQgPSBzdmdGb250RmFjZUVsZW1lbnQtPmFzc29jaWF0ZWRGb250RWxl
bWVudCgpOwogICAgIGlmICgheEhlaWdodCkgeyAgICAKICAgICAgICAgLy8gRmFsbGJhY2sgaWYg
eF9oZWlnaHRBdHRyIGlzIG5vdCBzcGVjaWZpZWQgZm9yIHRoZSBmb250IGVsZW1lbnQuCi0gICAg
ICAgIFZlY3RvcjxTVkdHbHlwaElkZW50aWZpZXI+IGxldHRlclhHbHlwaHM7CisgICAgICAgIFZl
Y3RvcjxTVkdHbHlwaD4gbGV0dGVyWEdseXBoczsKICAgICAgICAgYXNzb2NpYXRlZEZvbnRFbGVt
ZW50LT5nZXRHbHlwaElkZW50aWZpZXJzRm9yU3RyaW5nKFN0cmluZygieCIsIDEpLCBsZXR0ZXJY
R2x5cGhzKTsKICAgICAgICAgeEhlaWdodCA9IGxldHRlclhHbHlwaHMuaXNFbXB0eSgpID8gMiAq
IGFzY2VudCAvIDMgOiBsZXR0ZXJYR2x5cGhzLmZpcnN0KCkuaG9yaXpvbnRhbEFkdmFuY2VYICog
c2NhbGU7CiAgICAgfQpAQCAtMTAxLDE5ICsxMDEsMTkgQEAgU2ltcGxlRm9udERhdGE6OlNpbXBs
ZUZvbnREYXRhKFBhc3NPd25QdAogICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcocm91
bmRmKGFzY2VudCkgKyByb3VuZGYoZGVzY2VudCkgKyByb3VuZGYobGluZUdhcCkpOwogICAgIG1f
Zm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKIAotICAgIFZlY3RvcjxTVkdHbHlwaElk
ZW50aWZpZXI+IHNwYWNlR2x5cGhzOworICAgIFZlY3RvcjxTVkdHbHlwaD4gc3BhY2VHbHlwaHM7
CiAgICAgYXNzb2NpYXRlZEZvbnRFbGVtZW50LT5nZXRHbHlwaElkZW50aWZpZXJzRm9yU3RyaW5n
KFN0cmluZygiICIsIDEpLCBzcGFjZUdseXBocyk7CiAgICAgbV9zcGFjZVdpZHRoID0gc3BhY2VH
bHlwaHMuaXNFbXB0eSgpID8geEhlaWdodCA6IHNwYWNlR2x5cGhzLmZpcnN0KCkuaG9yaXpvbnRh
bEFkdmFuY2VYICogc2NhbGU7CiAKLSAgICBWZWN0b3I8U1ZHR2x5cGhJZGVudGlmaWVyPiBudW1l
cmFsWmVyb0dseXBoczsKKyAgICBWZWN0b3I8U1ZHR2x5cGg+IG51bWVyYWxaZXJvR2x5cGhzOwog
ICAgIGFzc29jaWF0ZWRGb250RWxlbWVudC0+Z2V0R2x5cGhJZGVudGlmaWVyc0ZvclN0cmluZyhT
dHJpbmcoIjAiLCAxKSwgbnVtZXJhbFplcm9HbHlwaHMpOwogICAgIG1fYXZnQ2hhcldpZHRoID0g
bnVtZXJhbFplcm9HbHlwaHMuaXNFbXB0eSgpID8gbV9zcGFjZVdpZHRoIDogbnVtZXJhbFplcm9H
bHlwaHMuZmlyc3QoKS5ob3Jpem9udGFsQWR2YW5jZVggKiBzY2FsZTsKIAotICAgIFZlY3RvcjxT
VkdHbHlwaElkZW50aWZpZXI+IGxldHRlcldHbHlwaHM7CisgICAgVmVjdG9yPFNWR0dseXBoPiBs
ZXR0ZXJXR2x5cGhzOwogICAgIGFzc29jaWF0ZWRGb250RWxlbWVudC0+Z2V0R2x5cGhJZGVudGlm
aWVyc0ZvclN0cmluZyhTdHJpbmcoIlciLCAxKSwgbGV0dGVyV0dseXBocyk7CiAgICAgbV9tYXhD
aGFyV2lkdGggPSBsZXR0ZXJXR2x5cGhzLmlzRW1wdHkoKSA/IGFzY2VudCA6IGxldHRlcldHbHlw
aHMuZmlyc3QoKS5ob3Jpem9udGFsQWR2YW5jZVggKiBzY2FsZTsKIAotICAgIC8vIEZJWE1FOiBp
cyB0aGVyZSBhIHdheSB3ZSBjYW4gZ2V0IHRoZSBzcGFjZSBnbHlwaCBmcm9tIHRoZSBTVkdHbHlw
aElkZW50aWZpZXIgYWJvdmU/CisgICAgLy8gRklYTUU6IGlzIHRoZXJlIGEgd2F5IHdlIGNhbiBn
ZXQgdGhlIHNwYWNlIGdseXBoIGZyb20gdGhlIFNWR0dseXBoIGFib3ZlPwogICAgIG1fc3BhY2VH
bHlwaCA9IDA7CiAgICAgbV96ZXJvV2lkdGhTcGFjZUdseXBoID0gMDsKICAgICBkZXRlcm1pbmVQ
aXRjaCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250LmNwcAkocmV2aXNpb24gODQ0ODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDE1OCAr
NTcsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNWZXJ0aWNhbFdyaXRpbmdNb2RlCiAgICAgcmV0
dXJuIHN0eWxlLT53cml0aW5nTW9kZSgpID09IFdNX1RCUkwgfHwgc3R5bGUtPndyaXRpbmdNb2Rl
KCkgPT0gV01fVEI7IAogfQogCi0vLyBIZWxwZXIgZnVuY3Rpb25zIHRvIGRldGVybWluZSB0aGUg
YXJhYmljIGNoYXJhY3RlciBmb3JtcyAoaW5pdGlhbCwgbWVkaWFsLCB0ZXJtaW5hbCwgaXNvbGF0
ZWQpCi1lbnVtIEFyYWJpY0NoYXJTaGFwaW5nTW9kZSB7Ci0gICAgU05vbmUgPSAwLAotICAgIFNS
aWdodCA9IDEsCi0gICAgU0R1YWwgPSAyCi19OwotCi1zdGF0aWMgY29uc3QgQXJhYmljQ2hhclNo
YXBpbmdNb2RlIHNfYXJhYmljQ2hhclNoYXBpbmdNb2RlWzIyMl0gPSB7Ci0gICAgU1JpZ2h0LCBT
UmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBTRHVhbCAsIFNSaWdodCwgU0R1YWwgLCBTUmlnaHQsIFNE
dWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTUmlnaHQsICAgICAgICAgICAg
ICAgICAvKiAweDA2MjIgLSAweDA2MkYgKi8KLSAgICBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBT
RHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNE
dWFsICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIC8qIDB4MDYzMCAt
IDB4MDYzRiAqLwotICAgIFNOb25lICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBT
RHVhbCAsIFNEdWFsICwgU1JpZ2h0LCBTRHVhbCAsIFNEdWFsICwgU05vbmUgLCBTTm9uZSAsIFNO
b25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgLyogMHgwNjQwIC0gMHgwNjRGICovCi0gICAg
U05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBT
Tm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNO
b25lICwgU05vbmUgLCAvKiAweDA2NTAgLSAweDA2NUYgKi8KLSAgICBTTm9uZSAsIFNOb25lICwg
U05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBT
Tm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIC8q
IDB4MDY2MCAtIDB4MDY2RiAqLwotICAgIFNOb25lICwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwg
U05vbmUgLCBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBT
RHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgLyogMHgwNjcwIC0gMHgwNjdG
ICovCi0gICAgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwg
U0R1YWwgLCBTRHVhbCAsIFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBT
UmlnaHQsIFNSaWdodCwgU1JpZ2h0LCAvKiAweDA2ODAgLSAweDA2OEYgKi8KLSAgICBTUmlnaHQs
IFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwg
U1JpZ2h0LCBTUmlnaHQsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBT
RHVhbCAsIC8qIDB4MDY5MCAtIDB4MDY5RiAqLwotICAgIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAs
IFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwg
U0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgLyogMHgwNkEw
IC0gMHgwNkFGICovCi0gICAgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAs
IFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAsIFNEdWFsICwg
U0R1YWwgLCBTRHVhbCAsIFNEdWFsICwgU0R1YWwgLCAvKiAweDA2QjAgLSAweDA2QkYgKi8KLSAg
ICBTUmlnaHQsIFNEdWFsICwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQs
IFNSaWdodCwgU1JpZ2h0LCBTUmlnaHQsIFNSaWdodCwgU1JpZ2h0LCBTRHVhbCAsIFNSaWdodCwg
U0R1YWwgLCBTUmlnaHQsIC8qIDB4MDZDMCAtIDB4MDZDRiAqLwotICAgIFNEdWFsICwgU0R1YWwg
LCBTUmlnaHQsIFNSaWdodCwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAs
IFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwg
LyogMHgwNkQwIC0gMHgwNkRGICovCi0gICAgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUg
LCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAs
IFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCAvKiAweDA2RTAgLSAweDA2
RUYgKi8KLSAgICBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNOb25lICwgU05vbmUg
LCBTTm9uZSAsIFNOb25lICwgU05vbmUgLCBTTm9uZSAsIFNEdWFsICwgU0R1YWwgLCBTRHVhbCAs
IFNOb25lICwgU05vbmUgLCBTTm9uZSAgIC8qIDB4MDZGMCAtIDB4MDZGRiAqLwotfTsKLQotc3Rh
dGljIGlubGluZSBTVkdHbHlwaElkZW50aWZpZXI6OkFyYWJpY0Zvcm0gcHJvY2Vzc0FyYWJpY0Zv
cm1EZXRlY3Rpb24oY29uc3QgVUNoYXImIGN1ckNoYXIsIGJvb2wmIGxhc3RDaGFyU2hhcGVzUmln
aHQsIFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmljRm9ybSogcHJldkZvcm0pCi17Ci0gICAgU1ZH
R2x5cGhJZGVudGlmaWVyOjpBcmFiaWNGb3JtIGN1ckZvcm07Ci0KLSAgICBBcmFiaWNDaGFyU2hh
cGluZ01vZGUgc2hhcGluZ01vZGUgPSBTTm9uZTsKLSAgICBpZiAoY3VyQ2hhciA+PSAweDA2MjIg
JiYgY3VyQ2hhciA8PSAweDA2RkYpCi0gICAgICAgIHNoYXBpbmdNb2RlID0gc19hcmFiaWNDaGFy
U2hhcGluZ01vZGVbY3VyQ2hhciAtIDB4MDYyMl07Ci0KLSAgICAvLyBVc2UgYSBzaW1wbGUgc3Rh
dGUgbWFjaGluZSB0byBpZGVudGlmeSB0aGUgYWN0dWFsIGFyYWJpYyBmb3JtCi0gICAgLy8gSXQg
ZGVwZW5kcyBvbiB0aGUgb3JkZXIgb2YgdGhlIGFyYWJpYyBmb3JtIGVudW06Ci0gICAgLy8gZW51
bSBBcmFiaWNGb3JtIHsgTm9uZSA9IDAsIElzb2xhdGVkLCBUZXJtaW5hbCwgSW5pdGlhbCwgTWVk
aWFsIH07Ci0KLSAgICBpZiAobGFzdENoYXJTaGFwZXNSaWdodCAmJiBzaGFwaW5nTW9kZSA9PSBT
RHVhbCkgewotICAgICAgICBpZiAocHJldkZvcm0pIHsKLSAgICAgICAgICAgIGludCBjb3JyZWN0
ZWRGb3JtID0gKGludCkgKnByZXZGb3JtICsgMTsKLSAgICAgICAgICAgIEFTU0VSVChjb3JyZWN0
ZWRGb3JtID49IFNWR0dseXBoSWRlbnRpZmllcjo6Tm9uZSAmJiBjb3JyZWN0ZWRGb3JtIDw9IFNW
R0dseXBoSWRlbnRpZmllcjo6TWVkaWFsKTsKLSAgICAgICAgICAgICpwcmV2Rm9ybSA9IHN0YXRp
Y19jYXN0PFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmljRm9ybT4oY29ycmVjdGVkRm9ybSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjdXJGb3JtID0gU1ZHR2x5cGhJZGVudGlmaWVyOjpJbml0aWFs
OwotICAgIH0gZWxzZQotICAgICAgICBjdXJGb3JtID0gc2hhcGluZ01vZGUgPT0gU05vbmUgPyBT
VkdHbHlwaElkZW50aWZpZXI6Ok5vbmUgOiBTVkdHbHlwaElkZW50aWZpZXI6Oklzb2xhdGVkOwot
Ci0gICAgbGFzdENoYXJTaGFwZXNSaWdodCA9IHNoYXBpbmdNb2RlICE9IFNOb25lOwotICAgIHJl
dHVybiBjdXJGb3JtOwotfQotCi1zdGF0aWMgVmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcjo6QXJh
YmljRm9ybT4gY2hhcmFjdGVyc1dpdGhBcmFiaWNGb3JtKGNvbnN0IFN0cmluZyYgaW5wdXQsIGJv
b2wgcnRsKQotewotICAgIFZlY3RvcjxTVkdHbHlwaElkZW50aWZpZXI6OkFyYWJpY0Zvcm0+IGZv
cm1zOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOwotCi0gICAgYm9vbCBj
b250YWluc0FyYWJpYyA9IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewotICAgICAgICBpZiAoaXNBcmFiaWNDaGFyKGlucHV0W2ldKSkgewotICAgICAg
ICAgICAgY29udGFpbnNBcmFiaWMgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoIWNvbnRhaW5zQXJhYmljKQotICAgICAgICByZXR1cm4gZm9y
bXM7Ci0KLSAgICBib29sIGxhc3RDaGFyU2hhcGVzUmlnaHQgPSBmYWxzZTsKLQotICAgIC8vIFN0
YXJ0IGlkZW50aWZ5aW5nIGFyYWJpYyBmb3JtcwotICAgIGlmIChydGwpIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IGxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKQotICAgICAgICAgICAgZm9ybXMucHJl
cGVuZChwcm9jZXNzQXJhYmljRm9ybURldGVjdGlvbihpbnB1dFtpXSwgbGFzdENoYXJTaGFwZXNS
aWdodCwgZm9ybXMuaXNFbXB0eSgpID8gMCA6ICZmb3Jtcy5maXJzdCgpKSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgZm9ybXMuYXBwZW5kKHByb2Nlc3NBcmFiaWNGb3JtRGV0ZWN0aW9uKGlucHV0W2ldLCBs
YXN0Q2hhclNoYXBlc1JpZ2h0LCBmb3Jtcy5pc0VtcHR5KCkgPyAwIDogJmZvcm1zLmxhc3QoKSkp
OwotICAgIH0KLQotICAgIHJldHVybiBmb3JtczsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlz
Q29tcGF0aWJsZUFyYWJpY0Zvcm0oY29uc3QgU1ZHR2x5cGhJZGVudGlmaWVyJiBpZGVudGlmaWVy
LCBjb25zdCBWZWN0b3I8U1ZHR2x5cGhJZGVudGlmaWVyOjpBcmFiaWNGb3JtPiYgY2hhcnMsIHVu
c2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0aW9uKQotewotICAgIGlmIChj
aGFycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgVmVjdG9yPFNWR0ds
eXBoSWRlbnRpZmllcjo6QXJhYmljRm9ybT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hhcnMuYmVn
aW4oKSArIHN0YXJ0UG9zaXRpb247Ci0gICAgVmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcjo6QXJh
YmljRm9ybT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNoYXJzLmJlZ2luKCkgKyBlbmRQb3NpdGlv
bjsKLQotICAgIEFTU0VSVChlbmQgPD0gY2hhcnMuZW5kKCkpOwotICAgIGZvciAoOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCppdCAhPSBzdGF0aWNfY2FzdDxTVkdHbHlwaElkZW50
aWZpZXI6OkFyYWJpY0Zvcm0+KGlkZW50aWZpZXIuYXJhYmljRm9ybSkgJiYgKml0ICE9IFNWR0ds
eXBoSWRlbnRpZmllcjo6Tm9uZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzQ29tcGF0aWJsZUds
eXBoKGNvbnN0IFNWR0dseXBoSWRlbnRpZmllciYgaWRlbnRpZmllciwgYm9vbCBpc1ZlcnRpY2Fs
VGV4dCwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHR2x5cGhJZGVudGlmaWVyOjpBcmFiaWNGb3JtPiYg
Y2hhcnMsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0aW9uKQotewot
ICAgIGJvb2wgdmFsaWQgPSB0cnVlOwotCi0gICAgLy8gQ2hlY2sgd2hldGVyIG9yaWVudGF0aW9u
IGlmIGdseXBoIGZpdHMgd2l0aGluIHRoZSByZXF1ZXN0Ci0gICAgc3dpdGNoIChpZGVudGlmaWVy
Lm9yaWVudGF0aW9uKSB7Ci0gICAgY2FzZSBTVkdHbHlwaElkZW50aWZpZXI6OlZlcnRpY2FsOgot
ICAgICAgICB2YWxpZCA9IGlzVmVydGljYWxUZXh0OwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFNWR0dseXBoSWRlbnRpZmllcjo6SG9yaXpvbnRhbDoKLSAgICAgICAgdmFsaWQgPSAhaXNWZXJ0
aWNhbFRleHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHR2x5cGhJZGVudGlmaWVyOjpC
b3RoOgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDaGVjayB3aGV0ZXIgbGFuZ3VhZ2VzIGFyZSBjb21wYXRp
YmxlCi0gICAgaWYgKCFpZGVudGlmaWVyLmxhbmd1YWdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
Ly8gVGhpcyBnbHlwaCBleGlzdHMgb25seSBpbiBjZXJ0YWluIGxhbmd1YWdlcywgaWYgd2UncmUg
bm90IHNwZWNpZnlpbmcgYQotICAgICAgICAvLyBsYW5ndWFnZSBvbiB0aGUgcmVmZXJlbmNpbmcg
ZWxlbWVudCB3ZSdyZSB1bmFibGUgdG8gdXNlIHRoaXMgZ2x5cGguCi0gICAgICAgIGlmIChsYW5n
dWFnZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8g
U3BsaXQgc3ViY29kZSBmcm9tIGxhbmd1YWdlLCBpZiBleGlzdGFudC4KLSAgICAgICAgU3RyaW5n
IGxhbmd1YWdlUHJlZml4OwotCi0gICAgICAgIHNpemVfdCBzdWJDb2RlU2VwYXJhdG9yID0gbGFu
Z3VhZ2UuZmluZCgnLScpOwotICAgICAgICBpZiAoc3ViQ29kZVNlcGFyYXRvciAhPSBub3RGb3Vu
ZCkKLSAgICAgICAgICAgIGxhbmd1YWdlUHJlZml4ID0gbGFuZ3VhZ2UubGVmdChzdWJDb2RlU2Vw
YXJhdG9yKTsKLQotICAgICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBp
ZGVudGlmaWVyLmxhbmd1YWdlcy5iZWdpbigpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gaWRlbnRpZmllci5sYW5ndWFnZXMuZW5kKCk7Ci0KLSAgICAgICAg
Ym9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIGN1ciA9ICppdDsKLSAgICAgICAgICAgIGlmIChjdXIg
PT0gbGFuZ3VhZ2UgfHwgY3VyID09IGxhbmd1YWdlUHJlZml4KSB7Ci0gICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICAvLyBDaGVjayB3aGV0ZXIgYXJhYmljIGZvcm0gaXMgY29tcGF0aWJsZQot
ICAgIHJldHVybiBpc0NvbXBhdGlibGVBcmFiaWNGb3JtKGlkZW50aWZpZXIsIGNoYXJzLCBzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgY29uc3QgU1ZHRm9u
dERhdGEqIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGEsIFNWR0ZvbnRGYWNlRWxlbWVudComIGZvbnRGYWNlLCBTVkdGb250
RWxlbWVudComIGZvbnQpCiB7CiAgICAgQVNTRVJUKGZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7
CkBAIC0yMjMsMTEgKzcxLDExIEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgU1ZHRm9udERhdGEqIHN2
Z0ZvbnQKICAgICByZXR1cm4gc3ZnRm9udERhdGE7CiB9CiAKLS8vIEhlbHBlciBjbGFzcyB0byB3
YWxrIGEgdGV4dCBydW4uIExvb2t1cCBhIFNWR0dseXBoSWRlbnRpZmllciBmb3IgZWFjaCBjaGFy
YWN0ZXIKKy8vIEhlbHBlciBjbGFzcyB0byB3YWxrIGEgdGV4dCBydW4uIExvb2t1cCBhIFNWR0ds
eXBoIGZvciBlYWNoIGNoYXJhY3RlcgogLy8gLSBhbHNvIHJlc3BlY3RpbmcgcG9zc2libHkgZGVm
aW5lZCBsaWdhdHVyZXMgLSBhbmQgaW52b2tlIGEgY2FsbGJhY2sgZm9yIGVhY2ggZm91bmQgZ2x5
cGguCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTVkdUZXh0UnVuRGF0YT4KIHN0cnVjdCBTVkdUZXh0UnVu
V2Fsa2VyIHsKLSAgICB0eXBlZGVmIGJvb2wgKCpTVkdUZXh0UnVuV2Fsa2VyQ2FsbGJhY2spKGNv
bnN0IFNWR0dseXBoSWRlbnRpZmllciYsIFNWR1RleHRSdW5EYXRhJik7CisgICAgdHlwZWRlZiBi
b29sICgqU1ZHVGV4dFJ1bldhbGtlckNhbGxiYWNrKShjb25zdCBTVkdHbHlwaCYsIFNWR1RleHRS
dW5EYXRhJik7CiAgICAgdHlwZWRlZiB2b2lkICgqU1ZHVGV4dFJ1bldhbGtlck1pc3NpbmdHbHlw
aENhbGxiYWNrKShjb25zdCBUZXh0UnVuJiwgU1ZHVGV4dFJ1bkRhdGEmKTsKIAogICAgIFNWR1Rl
eHRSdW5XYWxrZXIoY29uc3QgU1ZHRm9udERhdGEqIGZvbnREYXRhLCBTVkdGb250RWxlbWVudCog
Zm9udEVsZW1lbnQsIFNWR1RleHRSdW5EYXRhJiBkYXRhLApAQCAtMjQ1LDE1ICs5MywxNSBAQCBz
dHJ1Y3QgU1ZHVGV4dFJ1bldhbGtlciB7CiAgICAgICAgIEFTU0VSVCgwIDw9IGZyb20gJiYgZnJv
bSA8PSB0byAmJiB0byAtIGZyb20gPD0gcnVuLmxlbmd0aCgpKTsKIAogICAgICAgICBjb25zdCBT
dHJpbmcgdGV4dCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uZGF0YShmcm9tKSwgdG8gLSBm
cm9tKTsKLSAgICAgICAgVmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmljRm9ybT4gY2hh
cnMoY2hhcmFjdGVyc1dpdGhBcmFiaWNGb3JtKHRleHQsIHJ1bi5ydGwoKSkpOworICAgICAgICBW
ZWN0b3I8U1ZHR2x5cGg6OkFyYWJpY0Zvcm0+IGNoYXJzKGNoYXJhY3RlcnNXaXRoQXJhYmljRm9y
bSh0ZXh0LCBydW4ucnRsKCkpKTsKIAotICAgICAgICBTVkdHbHlwaElkZW50aWZpZXIgaWRlbnRp
ZmllcjsKKyAgICAgICAgU1ZHR2x5cGggaWRlbnRpZmllcjsKICAgICAgICAgYm9vbCBmb3VuZEds
eXBoID0gZmFsc2U7CiAgICAgICAgIGludCBjaGFyYWN0ZXJMb29rdXBSYW5nZTsKICAgICAgICAg
aW50IGVuZE9mU2NhblJhbmdlID0gdG8gKyBtX3dhbGtlckRhdGEuZXh0cmFDaGFyc0F2YWlsYWJs
ZTsKIAogICAgICAgICBib29sIGhhdmVBbHRHbHlwaCA9IGZhbHNlOwotICAgICAgICBTVkdHbHlw
aElkZW50aWZpZXIgYWx0R2x5cGhJZGVudGlmaWVyOworICAgICAgICBTVkdHbHlwaCBhbHRHbHlw
aElkZW50aWZpZXI7CiAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCA9IHJ1
bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpKSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3Qq
IHBhcmVudFJlbmRlcmVyID0gcmVuZGVyT2JqZWN0LT5wYXJlbnQoKTsKICAgICAgICAgICAgIEFT
U0VSVChwYXJlbnRSZW5kZXJlcik7CkBAIC0yNjMsNyArMTExLDcgQEAgc3RydWN0IFNWR1RleHRS
dW5XYWxrZXIgewogICAgICAgICAgICAgICAgICAgICBoYXZlQWx0R2x5cGggPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICBhbHRHbHlwaElkZW50aWZpZXIgPSBnbHlwaEVsZW1lbnQtPmJ1aWxk
R2x5cGhJZGVudGlmaWVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGFsdEdseXBoSWRlbnRpZmll
ci5pc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYWx0R2x5cGhJZGVudGlmaWVy
Lm5hbWVMZW5ndGggPSB0byAtIGZyb207CisgICAgICAgICAgICAgICAgICAgIGFsdEdseXBoSWRl
bnRpZmllci51bmljb2RlU3RyaW5nTGVuZ3RoID0gdG8gLSBmcm9tOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjc2LDIxICsxMjQsMjEgQEAgc3RydWN0
IFNWR1RleHRSdW5XYWxrZXIgewogCiAgICAgICAgICAgICBTdHJpbmcgbG9va3VwU3RyaW5nID0g
Rm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5kYXRhKGkpLCBjaGFyYWN0ZXJMb29rdXBSYW5nZSk7
CiAKLSAgICAgICAgICAgIFZlY3RvcjxTVkdHbHlwaElkZW50aWZpZXI+IGdseXBoczsKKyAgICAg
ICAgICAgIFZlY3RvcjxTVkdHbHlwaD4gZ2x5cGhzOwogICAgICAgICAgICAgaWYgKGhhdmVBbHRH
bHlwaCkKICAgICAgICAgICAgICAgICBnbHlwaHMuYXBwZW5kKGFsdEdseXBoSWRlbnRpZmllcik7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbV9mb250RWxlbWVudC0+Z2V0R2x5
cGhJZGVudGlmaWVyc0ZvclN0cmluZyhsb29rdXBTdHJpbmcsIGdseXBocyk7CiAKLSAgICAgICAg
ICAgIFZlY3RvcjxTVkdHbHlwaElkZW50aWZpZXI+OjppdGVyYXRvciBpdCA9IGdseXBocy5iZWdp
bigpOwotICAgICAgICAgICAgVmVjdG9yPFNWR0dseXBoSWRlbnRpZmllcj46Oml0ZXJhdG9yIGVu
ZCA9IGdseXBocy5lbmQoKTsKKyAgICAgICAgICAgIFZlY3RvcjxTVkdHbHlwaD46Oml0ZXJhdG9y
IGl0ID0gZ2x5cGhzLmJlZ2luKCk7CisgICAgICAgICAgICBWZWN0b3I8U1ZHR2x5cGg+OjppdGVy
YXRvciBlbmQgPSBnbHlwaHMuZW5kKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAo
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gKml0Owot
ICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzVmFsaWQgJiYgaXNDb21wYXRpYmxlR2x5
cGgoaWRlbnRpZmllciwgaXNWZXJ0aWNhbFRleHQsIGxhbmd1YWdlLCBjaGFycywgaSwgaSArIGlk
ZW50aWZpZXIubmFtZUxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5p
c1ZhbGlkICYmIGlzQ29tcGF0aWJsZUdseXBoKGlkZW50aWZpZXIsIGlzVmVydGljYWxUZXh0LCBs
YW5ndWFnZSwgY2hhcnMsIGksIGkgKyBpZGVudGlmaWVyLnVuaWNvZGVTdHJpbmdMZW5ndGgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjaGFyYWN0ZXJMb29rdXBSYW5nZSA+IDApOwot
ICAgICAgICAgICAgICAgICAgICBpICs9IGlkZW50aWZpZXIubmFtZUxlbmd0aCAtIDE7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fd2Fsa2VyRGF0YS5jaGFyc0NvbnN1bWVkICs9IGlkZW50aWZpZXIu
bmFtZUxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBpZGVudGlmaWVyLnVuaWNvZGVT
dHJpbmdMZW5ndGggLSAxOworICAgICAgICAgICAgICAgICAgICBtX3dhbGtlckRhdGEuY2hhcnND
b25zdW1lZCArPSBpZGVudGlmaWVyLnVuaWNvZGVTdHJpbmdMZW5ndGg7CiAgICAgICAgICAgICAg
ICAgICAgIG1fd2Fsa2VyRGF0YS5nbHlwaE5hbWUgPSBpZGVudGlmaWVyLmdseXBoTmFtZTsKIAog
ICAgICAgICAgICAgICAgICAgICBmb3VuZEdseXBoID0gdHJ1ZTsKQEAgLTM0NSw3ICsxOTMsNyBA
QCBzdHJ1Y3QgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0CiAgICAgY29uc3QgRm9u
dCogZm9udDsKIH07CiAKLXN0YXRpYyBib29sIGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnRDYWxsYmFj
ayhjb25zdCBTVkdHbHlwaElkZW50aWZpZXImIGlkZW50aWZpZXIsIFNWR1RleHRSdW5XYWxrZXJN
ZWFzdXJlZExlbmd0aERhdGEmIGRhdGEpCitzdGF0aWMgYm9vbCBmbG9hdFdpZHRoVXNpbmdTVkdG
b250Q2FsbGJhY2soY29uc3QgU1ZHR2x5cGgmIGlkZW50aWZpZXIsIFNWR1RleHRSdW5XYWxrZXJN
ZWFzdXJlZExlbmd0aERhdGEmIGRhdGEpCiB7CiAgICAgaWYgKGRhdGEuYXQgPj0gZGF0YS5mcm9t
ICYmIGRhdGEuYXQgPCBkYXRhLnRvKQogICAgICAgICBkYXRhLmxlbmd0aCArPSBpZGVudGlmaWVy
Lmhvcml6b250YWxBZHZhbmNlWCAqIGRhdGEuc2NhbGU7CkBAIC00NDUsMTEgKzI5MywxMSBAQCBz
dHJ1Y3QgU1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSB7CiAgICAgaW50IGV4dHJhQ2hhcnNB
dmFpbGFibGU7CiAgICAgaW50IGNoYXJzQ29uc3VtZWQ7CiAgICAgU3RyaW5nIGdseXBoTmFtZTsK
LSAgICBWZWN0b3I8U1ZHR2x5cGhJZGVudGlmaWVyPiBnbHlwaElkZW50aWZpZXJzOworICAgIFZl
Y3RvcjxTVkdHbHlwaD4gZ2x5cGhJZGVudGlmaWVyczsKICAgICBWZWN0b3I8VUNoYXI+IGZhbGxi
YWNrQ2hhcmFjdGVyczsKIH07CiAKLXN0YXRpYyBib29sIGRyYXdUZXh0VXNpbmdTVkdGb250Q2Fs
bGJhY2soY29uc3QgU1ZHR2x5cGhJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBTVkdUZXh0UnVuV2Fs
a2VyRHJhd1RleHREYXRhJiBkYXRhKQorc3RhdGljIGJvb2wgZHJhd1RleHRVc2luZ1NWR0ZvbnRD
YWxsYmFjayhjb25zdCBTVkdHbHlwaCYgaWRlbnRpZmllciwgU1ZHVGV4dFJ1bldhbGtlckRyYXdU
ZXh0RGF0YSYgZGF0YSkKIHsKICAgICBkYXRhLmdseXBoSWRlbnRpZmllcnMuYXBwZW5kKGlkZW50
aWZpZXIpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDU4LDcgKzMwNiw3IEBAIHN0YXRpYyBib29s
IGRyYXdUZXh0VXNpbmdTVkdGb250Q2FsbGJhY2sKIHN0YXRpYyB2b2lkIGRyYXdUZXh0TWlzc2lu
Z0dseXBoQ2FsbGJhY2soY29uc3QgVGV4dFJ1biYgcnVuLCBTVkdUZXh0UnVuV2Fsa2VyRHJhd1Rl
eHREYXRhJiBkYXRhKQogewogICAgIEFTU0VSVChydW4ubGVuZ3RoKCkgPT0gMSk7Ci0gICAgZGF0
YS5nbHlwaElkZW50aWZpZXJzLmFwcGVuZChTVkdHbHlwaElkZW50aWZpZXIoKSk7CisgICAgZGF0
YS5nbHlwaElkZW50aWZpZXJzLmFwcGVuZChTVkdHbHlwaCgpKTsKICAgICBkYXRhLmZhbGxiYWNr
Q2hhcmFjdGVycy5hcHBlbmQocnVuWzBdKTsKIH0KIApAQCAtNTI4LDcgKzM3Niw3IEBAIHZvaWQg
Rm9udDo6ZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3MKICAgICAgICAgdW5zaWduZWQgbnVt
R2x5cGhzID0gZGF0YS5nbHlwaElkZW50aWZpZXJzLnNpemUoKTsKICAgICAgICAgdW5zaWduZWQg
ZmFsbGJhY2tDaGFyYWN0ZXJJbmRleCA9IDA7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICAgICAgY29uc3QgU1ZHR2x5cGhJZGVudGlm
aWVyJiBpZGVudGlmaWVyID0gZGF0YS5nbHlwaElkZW50aWZpZXJzW3J1bi5ydGwoKSA/IG51bUds
eXBocyAtIGkgLSAxIDogaV07CisgICAgICAgICAgICBjb25zdCBTVkdHbHlwaCYgaWRlbnRpZmll
ciA9IGRhdGEuZ2x5cGhJZGVudGlmaWVyc1tydW4ucnRsKCkgPyBudW1HbHlwaHMgLSBpIC0gMSA6
IGldOwogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNWYWxpZCkgewogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBTdXBwb3J0IGFyYml0YXJ5IFNWRyBjb250ZW50IGFzIGdseXBoIChjdXJy
ZW50bHkgbGltaXRlZCB0byA8Z2x5cGggZD0iLi4uIj4gc2l0dWF0aW9ucykuCiAgICAgICAgICAg
ICAgICAgaWYgKCFpZGVudGlmaWVyLnBhdGhEYXRhLmlzRW1wdHkoKSkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NDQ4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsx
NzMsNyBAQCBmbG9hdCBTVkdGb250RWxlbWVudDo6dmVydGljYWxLZXJuaW5nRm9yCiAgICAgcmV0
dXJuIGtlcm5pbmdGb3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzKG1fdmVydGljYWxLZXJuaW5nUGFp
cnMsIHUxLCBnMSwgdTIsIGcyKTsKIH0KIAotdm9pZCBTVkdGb250RWxlbWVudDo6Z2V0R2x5cGhJ
ZGVudGlmaWVyc0ZvclN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgVmVjdG9yPFNWR0dseXBo
SWRlbnRpZmllcj4mIGdseXBocykgY29uc3QKK3ZvaWQgU1ZHRm9udEVsZW1lbnQ6OmdldEdseXBo
SWRlbnRpZmllcnNGb3JTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIFZlY3RvcjxTVkdHbHlw
aD4mIGdseXBocykgY29uc3QKIHsKICAgICBlbnN1cmVHbHlwaENhY2hlKCk7CiAgICAgbV9nbHlw
aE1hcC5nZXQoc3RyaW5nLCBnbHlwaHMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zv
bnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVt
ZW50LmgJKHJldmlzaW9uIDg0NDgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBpbnZhbGlkYXRlR2x5cGhDYWNoZSgpOwogCi0gICAgdm9pZCBnZXRHbHlwaElkZW50aWZpZXJz
Rm9yU3RyaW5nKGNvbnN0IFN0cmluZyYsIFZlY3RvcjxTVkdHbHlwaElkZW50aWZpZXI+JikgY29u
c3Q7CisgICAgdm9pZCBnZXRHbHlwaElkZW50aWZpZXJzRm9yU3RyaW5nKGNvbnN0IFN0cmluZyYs
IFZlY3RvcjxTVkdHbHlwaD4mKSBjb25zdDsKIAogICAgIGZsb2F0IGhvcml6b250YWxLZXJuaW5n
Rm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhjb25zdCBTdHJpbmcmIHUxLCBjb25zdCBTdHJpbmcm
IGcxLCBjb25zdCBTdHJpbmcmIHUyLCBjb25zdCBTdHJpbmcmIGcyKSBjb25zdDsKICAgICBmbG9h
dCB2ZXJ0aWNhbEtlcm5pbmdGb3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzKGNvbnN0IFN0cmluZyYg
dTEsIGNvbnN0IFN0cmluZyYgZzEsIGNvbnN0IFN0cmluZyYgdTIsIGNvbnN0IFN0cmluZyYgZzIp
IGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAJKHJldmlz
aW9uIDg0NDgyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDI4ICs3NiwyOCBAQCB2b2lkIFNWR0dseXBoRWxlbWVudDo6cmVt
b3ZlZEZyb21Eb2N1bWVuCiAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVu
dCgpOwogfQogCi1zdGF0aWMgaW5saW5lIFNWR0dseXBoSWRlbnRpZmllcjo6QXJhYmljRm9ybSBw
YXJzZUFyYWJpY0Zvcm0oY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUg
U1ZHR2x5cGg6OkFyYWJpY0Zvcm0gcGFyc2VBcmFiaWNGb3JtKGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlID09ICJtZWRpYWwiKQotICAgICAgICByZXR1cm4gU1ZH
R2x5cGhJZGVudGlmaWVyOjpNZWRpYWw7CisgICAgICAgIHJldHVybiBTVkdHbHlwaDo6TWVkaWFs
OwogICAgIGlmICh2YWx1ZSA9PSAidGVybWluYWwiKQotICAgICAgICByZXR1cm4gU1ZHR2x5cGhJ
ZGVudGlmaWVyOjpUZXJtaW5hbDsKKyAgICAgICAgcmV0dXJuIFNWR0dseXBoOjpUZXJtaW5hbDsK
ICAgICBpZiAodmFsdWUgPT0gImlzb2xhdGVkIikKLSAgICAgICAgcmV0dXJuIFNWR0dseXBoSWRl
bnRpZmllcjo6SXNvbGF0ZWQ7CisgICAgICAgIHJldHVybiBTVkdHbHlwaDo6SXNvbGF0ZWQ7CiAg
ICAgaWYgKHZhbHVlID09ICJpbml0aWFsIikKLSAgICAgICAgcmV0dXJuIFNWR0dseXBoSWRlbnRp
Zmllcjo6SW5pdGlhbDsKKyAgICAgICAgcmV0dXJuIFNWR0dseXBoOjpJbml0aWFsOwogCi0gICAg
cmV0dXJuIFNWR0dseXBoSWRlbnRpZmllcjo6Tm9uZTsKKyAgICByZXR1cm4gU1ZHR2x5cGg6Ok5v
bmU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgU1ZHR2x5cGhJZGVudGlmaWVyOjpPcmllbnRhdGlvbiBw
YXJzZU9yaWVudGF0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCitzdGF0aWMgaW5saW5l
IFNWR0dseXBoOjpPcmllbnRhdGlvbiBwYXJzZU9yaWVudGF0aW9uKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlID09ICJoIikKLSAgICAgICAgcmV0dXJuIFNWR0ds
eXBoSWRlbnRpZmllcjo6SG9yaXpvbnRhbDsKKyAgICAgICAgcmV0dXJuIFNWR0dseXBoOjpIb3Jp
em9udGFsOwogICAgIGlmICh2YWx1ZSA9PSAidiIpCi0gICAgICAgIHJldHVybiBTVkdHbHlwaElk
ZW50aWZpZXI6OlZlcnRpY2FsOworICAgICAgICByZXR1cm4gU1ZHR2x5cGg6OlZlcnRpY2FsOwog
Ci0gICAgcmV0dXJuIFNWR0dseXBoSWRlbnRpZmllcjo6Qm90aDsKKyAgICByZXR1cm4gU1ZHR2x5
cGg6OkJvdGg7CiB9CiAKIHN0YXRpYyBpbmxpbmUgUGF0aCBwYXJzZVBhdGhEYXRhKGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUpCkBAIC0xMDgsMTggKzEwOCwxOCBAQCBzdGF0aWMgaW5saW5lIFBh
dGggcGFyc2VQYXRoRGF0YShjb25zdCBBCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBT
VkdHbHlwaEVsZW1lbnQ6OmluaGVyaXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMoU1ZHR2x5cGhJZGVu
dGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEpCit2b2lk
IFNWR0dseXBoRWxlbWVudDo6aW5oZXJpdFVuc3BlY2lmaWVkQXR0cmlidXRlcyhTVkdHbHlwaCYg
aWRlbnRpZmllciwgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhKQogewotICAgIGlmIChp
ZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCA9PSBTVkdHbHlwaElkZW50aWZpZXI6OmluaGVy
aXRlZFZhbHVlKCkpCisgICAgaWYgKGlkZW50aWZpZXIuaG9yaXpvbnRhbEFkdmFuY2VYID09IFNW
R0dseXBoOjppbmhlcml0ZWRWYWx1ZSgpKQogICAgICAgICBpZGVudGlmaWVyLmhvcml6b250YWxB
ZHZhbmNlWCA9IHN2Z0ZvbnREYXRhLT5ob3Jpem9udGFsQWR2YW5jZVgoKTsKIAotICAgIGlmIChp
ZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCA9PSBTVkdHbHlwaElkZW50aWZpZXI6OmluaGVyaXRl
ZFZhbHVlKCkpCisgICAgaWYgKGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5YID09IFNWR0dseXBo
Ojppbmhlcml0ZWRWYWx1ZSgpKQogICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCA9
IHN2Z0ZvbnREYXRhLT52ZXJ0aWNhbE9yaWdpblgoKTsKIAotICAgIGlmIChpZGVudGlmaWVyLnZl
cnRpY2FsT3JpZ2luWSA9PSBTVkdHbHlwaElkZW50aWZpZXI6OmluaGVyaXRlZFZhbHVlKCkpCisg
ICAgaWYgKGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5ZID09IFNWR0dseXBoOjppbmhlcml0ZWRW
YWx1ZSgpKQogICAgICAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWSA9IHN2Z0ZvbnREYXRh
LT52ZXJ0aWNhbE9yaWdpblkoKTsKIAotICAgIGlmIChpZGVudGlmaWVyLnZlcnRpY2FsQWR2YW5j
ZVkgPT0gU1ZHR2x5cGhJZGVudGlmaWVyOjppbmhlcml0ZWRWYWx1ZSgpKQorICAgIGlmIChpZGVu
dGlmaWVyLnZlcnRpY2FsQWR2YW5jZVkgPT0gU1ZHR2x5cGg6OmluaGVyaXRlZFZhbHVlKCkpCiAg
ICAgICAgIGlkZW50aWZpZXIudmVydGljYWxBZHZhbmNlWSA9IHN2Z0ZvbnREYXRhLT52ZXJ0aWNh
bEFkdmFuY2VZKCk7CiB9CiAKQEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgaW5saW5lIGZsb2F0
IHBhcnNlU1ZHR2x5cGhBdHRyaWJ1CiB7CiAgICAgQXRvbWljU3RyaW5nIHZhbHVlKGVsZW1lbnQt
PmdldEF0dHJpYnV0ZShuYW1lKSk7CiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIFNWR0dseXBoSWRlbnRpZmllcjo6aW5oZXJpdGVkVmFsdWUoKTsKKyAgICAgICAgcmV0
dXJuIFNWR0dseXBoOjppbmhlcml0ZWRWYWx1ZSgpOwogCiAgICAgcmV0dXJuIHZhbHVlLnRvRmxv
YXQoKTsKIH0KQEAgLTE0Niw5ICsxNDYsOSBAQCB2b2lkIFNWR0dseXBoRWxlbWVudDo6ZmlsbEF0
dHJpYnV0ZVRvUHJvCiAgICAgYXR0cmlidXRlVG9Qcm9wZXJ0eVR5cGVNYXAuc2V0KFNWR05hbWVz
OjpkQXR0ciwgQW5pbWF0ZWRQYXRoKTsKIH0KIAotU1ZHR2x5cGhJZGVudGlmaWVyIFNWR0dseXBo
RWxlbWVudDo6YnVpbGRHZW5lcmljR2x5cGhJZGVudGlmaWVyKGNvbnN0IFNWR0VsZW1lbnQqIGVs
ZW1lbnQpCitTVkdHbHlwaCBTVkdHbHlwaEVsZW1lbnQ6OmJ1aWxkR2VuZXJpY0dseXBoSWRlbnRp
Zmllcihjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50KQogewotICAgIFNWR0dseXBoSWRlbnRpZmll
ciBpZGVudGlmaWVyOworICAgIFNWR0dseXBoIGlkZW50aWZpZXI7CiAgICAgaWRlbnRpZmllci5w
YXRoRGF0YSA9IHBhcnNlUGF0aERhdGEoZWxlbWVudC0+Z2V0QXR0cmlidXRlKGRBdHRyKSk7CiAg
CiAgICAgLy8gU3BlYzogVGhlIGhvcml6b250YWwgYWR2YW5jZSBhZnRlciByZW5kZXJpbmcgdGhl
IGdseXBoIGluIGhvcml6b250YWwgb3JpZW50YXRpb24uCkBAIC0xNzUsOSArMTc1LDkgQEAgU1ZH
R2x5cGhJZGVudGlmaWVyIFNWR0dseXBoRWxlbWVudDo6YnVpbAogICAgIHJldHVybiBpZGVudGlm
aWVyOwogfQogCi1TVkdHbHlwaElkZW50aWZpZXIgU1ZHR2x5cGhFbGVtZW50OjpidWlsZEdseXBo
SWRlbnRpZmllcigpIGNvbnN0CitTVkdHbHlwaCBTVkdHbHlwaEVsZW1lbnQ6OmJ1aWxkR2x5cGhJ
ZGVudGlmaWVyKCkgY29uc3QKIHsKLSAgICBTVkdHbHlwaElkZW50aWZpZXIgaWRlbnRpZmllcihi
dWlsZEdlbmVyaWNHbHlwaElkZW50aWZpZXIodGhpcykpOworICAgIFNWR0dseXBoIGlkZW50aWZp
ZXIoYnVpbGRHZW5lcmljR2x5cGhJZGVudGlmaWVyKHRoaXMpKTsKICAgICBpZGVudGlmaWVyLmds
eXBoTmFtZSA9IGdldEF0dHJpYnV0ZShnbHlwaF9uYW1lQXR0cik7CiAgICAgaWRlbnRpZmllci5v
cmllbnRhdGlvbiA9IHBhcnNlT3JpZW50YXRpb24oZ2V0QXR0cmlidXRlKG9yaWVudGF0aW9uQXR0
cikpOwogICAgIGlkZW50aWZpZXIuYXJhYmljRm9ybSA9IHBhcnNlQXJhYmljRm9ybShnZXRBdHRy
aWJ1dGUoYXJhYmljX2Zvcm1BdHRyKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR2x5
cGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoRWxl
bWVudC5oCShyZXZpc2lvbiA4NDQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlwaEVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOTUgKzIzLDI1IEBACiAjZGVmaW5lIFNWR0ds
eXBoRWxlbWVudF9oCiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotI2luY2x1ZGUgIlBhdGguaCIK
KyNpbmNsdWRlICJTVkdHbHlwaC5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKIAot
I2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFNWR0ZvbnREYXRhOwogCi0vLyBEZXNjcmliZSBhIFNWRyA8Z2x5
cGg+IGVsZW1lbnQKLXN0cnVjdCBTVkdHbHlwaElkZW50aWZpZXIgewotICAgIGVudW0gT3JpZW50
YXRpb24gewotICAgICAgICBWZXJ0aWNhbCwKLSAgICAgICAgSG9yaXpvbnRhbCwKLSAgICAgICAg
Qm90aAotICAgIH07Ci0KLSAgICAvLyBTVkcgRm9udCBkZXBlbmRzIG9uIGV4YWN0bHkgdGhpcyBv
cmRlci4KLSAgICBlbnVtIEFyYWJpY0Zvcm0gewotICAgICAgICBOb25lID0gMCwKLSAgICAgICAg
SXNvbGF0ZWQsCi0gICAgICAgIFRlcm1pbmFsLAotICAgICAgICBJbml0aWFsLAotICAgICAgICBN
ZWRpYWwKLSAgICB9OwotCi0gICAgU1ZHR2x5cGhJZGVudGlmaWVyKCkKLSAgICAgICAgOiBpc1Zh
bGlkKGZhbHNlKQotICAgICAgICAsIG9yaWVudGF0aW9uKEJvdGgpCi0gICAgICAgICwgYXJhYmlj
Rm9ybShOb25lKQotICAgICAgICAsIHByaW9yaXR5KDApCi0gICAgICAgICwgbmFtZUxlbmd0aCgw
KQotICAgICAgICAsIGhvcml6b250YWxBZHZhbmNlWCgwLjBmKQotICAgICAgICAsIHZlcnRpY2Fs
T3JpZ2luWCgwLjBmKQotICAgICAgICAsIHZlcnRpY2FsT3JpZ2luWSgwLjBmKQotICAgICAgICAs
IHZlcnRpY2FsQWR2YW5jZVkoMC4wZikKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gVXNlZCB0byBt
YXJrIG91ciBmbG9hdCBwcm9wZXJ0aWVzIGFzICJ0byBiZSBpbmhlcml0ZWQgZnJvbSBTVkdGb250
RGF0YSIKLSAgICBzdGF0aWMgZmxvYXQgaW5oZXJpdGVkVmFsdWUoKQotICAgIHsKLSAgICAgICAg
c3RhdGljIGZsb2F0IHNfaW5oZXJpdGVkVmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6aW5maW5pdHkoKTsKLSAgICAgICAgcmV0dXJuIHNfaW5oZXJpdGVkVmFsdWU7Ci0gICAgfQot
Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNWR0dseXBoSWRlbnRpZmllciYgb3RoZXIpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaXNWYWxpZCA9PSBvdGhlci5pc1ZhbGlkCi0gICAg
ICAgICAgICAmJiBvcmllbnRhdGlvbiA9PSBvdGhlci5vcmllbnRhdGlvbgotICAgICAgICAgICAg
JiYgYXJhYmljRm9ybSA9PSBvdGhlci5hcmFiaWNGb3JtCi0gICAgICAgICAgICAmJiBnbHlwaE5h
bWUgPT0gb3RoZXIuZ2x5cGhOYW1lCi0gICAgICAgICAgICAmJiBob3Jpem9udGFsQWR2YW5jZVgg
PT0gb3RoZXIuaG9yaXpvbnRhbEFkdmFuY2VYCi0gICAgICAgICAgICAmJiB2ZXJ0aWNhbE9yaWdp
blggPT0gb3RoZXIudmVydGljYWxPcmlnaW5YCi0gICAgICAgICAgICAmJiB2ZXJ0aWNhbE9yaWdp
blkgPT0gb3RoZXIudmVydGljYWxPcmlnaW5ZCi0gICAgICAgICAgICAmJiB2ZXJ0aWNhbEFkdmFu
Y2VZID09IG90aGVyLnZlcnRpY2FsQWR2YW5jZVkKLSAgICAgICAgICAgICYmIGxhbmd1YWdlcyA9
PSBvdGhlci5sYW5ndWFnZXM7Ci0gICAgfQotCi0gICAgYm9vbCBpc1ZhbGlkIDogMTsKLQotICAg
IHVuc2lnbmVkIG9yaWVudGF0aW9uIDogMjsgLy8gT3JpZW50YXRpb24KLSAgICB1bnNpZ25lZCBh
cmFiaWNGb3JtIDogMzsgLy8gQXJhYmljRm9ybQotICAgIGludCBwcmlvcml0eTsKLSAgICBzaXpl
X3QgbmFtZUxlbmd0aDsKLSAgICBTdHJpbmcgZ2x5cGhOYW1lOwotCi0gICAgZmxvYXQgaG9yaXpv
bnRhbEFkdmFuY2VYOwotICAgIGZsb2F0IHZlcnRpY2FsT3JpZ2luWDsKLSAgICBmbG9hdCB2ZXJ0
aWNhbE9yaWdpblk7Ci0gICAgZmxvYXQgdmVydGljYWxBZHZhbmNlWTsKLQotICAgIFBhdGggcGF0
aERhdGE7Ci0gICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzOwotfTsKLQogY2xhc3MgU1ZHR2x5
cGhFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQgewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNWR0dseXBoRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwogCi0gICAgU1ZHR2x5cGhJZGVudGlmaWVyIGJ1aWxkR2x5cGhJZGVudGlm
aWVyKCkgY29uc3Q7CisgICAgU1ZHR2x5cGggYnVpbGRHbHlwaElkZW50aWZpZXIoKSBjb25zdDsK
IAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IFNWR0ZvbnQKLSAgICBzdGF0aWMgdm9p
ZCBpbmhlcml0VW5zcGVjaWZpZWRBdHRyaWJ1dGVzKFNWR0dseXBoSWRlbnRpZmllciYsIGNvbnN0
IFNWR0ZvbnREYXRhKik7CisgICAgc3RhdGljIHZvaWQgaW5oZXJpdFVuc3BlY2lmaWVkQXR0cmli
dXRlcyhTVkdHbHlwaCYsIGNvbnN0IFNWR0ZvbnREYXRhKik7CiAgICAgc3RhdGljIFN0cmluZyBx
dWVyeVNWR0ZvbnRMYW5ndWFnZShjb25zdCBTVkdFbGVtZW50Kik7CiAKICAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gc2hhcmVkIGJldHdlZW4gU1ZHR2x5cGhFbGVtZW50ICYgU1ZHTWlzc2luZ0dseXBo
RWxlbWVudAotICAgIHN0YXRpYyBTVkdHbHlwaElkZW50aWZpZXIgYnVpbGRHZW5lcmljR2x5cGhJ
ZGVudGlmaWVyKGNvbnN0IFNWR0VsZW1lbnQqKTsKKyAgICBzdGF0aWMgU1ZHR2x5cGggYnVpbGRH
ZW5lcmljR2x5cGhJZGVudGlmaWVyKGNvbnN0IFNWR0VsZW1lbnQqKTsKIAogcHJpdmF0ZToKICAg
ICBTVkdHbHlwaEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR2x5cGhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHR2x5cGhNYXAuaAkocmV2aXNpb24gODQ0ODIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHR2x5cGhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBw
cml2YXRlOgogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBoTWFwTm9kZT4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEdseXBoTWFwTm9kZSk7IH0KIAotICAgIFZlY3Rv
cjxTVkdHbHlwaElkZW50aWZpZXI+IGdseXBoczsKKyAgICBWZWN0b3I8U1ZHR2x5cGg+IGdseXBo
czsKIAogICAgIEdseXBoTWFwTGF5ZXIgY2hpbGRyZW47CiB9OwpAQCAtNDUsNyArNDUsNyBAQCBj
bGFzcyBTVkdHbHlwaE1hcCB7CiBwdWJsaWM6CiAgICAgU1ZHR2x5cGhNYXAoKSA6IG1fY3VycmVu
dFByaW9yaXR5KDApIHsgfQogCi0gICAgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNv
bnN0IFNWR0dseXBoSWRlbnRpZmllciYgZ2x5cGgpIAorICAgIHZvaWQgYWRkKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBTVkdHbHlwaCYgZ2x5cGgpIAogICAgIHsKICAgICAgICAgc2l6ZV90
IGxlbiA9IHN0cmluZy5sZW5ndGgoKTsKICAgICAgICAgR2x5cGhNYXBMYXllciogY3VycmVudExh
eWVyID0gJm1fcm9vdExheWVyOwpAQCAtNjQsMTcgKzY0LDE3IEBAIHB1YmxpYzoKICAgICAgICAg
aWYgKG5vZGUpIHsKICAgICAgICAgICAgIG5vZGUtPmdseXBocy5hcHBlbmQoZ2x5cGgpOwogICAg
ICAgICAgICAgbm9kZS0+Z2x5cGhzLmxhc3QoKS5wcmlvcml0eSA9IG1fY3VycmVudFByaW9yaXR5
Kys7Ci0gICAgICAgICAgICBub2RlLT5nbHlwaHMubGFzdCgpLm5hbWVMZW5ndGggPSBsZW47Cisg
ICAgICAgICAgICBub2RlLT5nbHlwaHMubGFzdCgpLnVuaWNvZGVTdHJpbmdMZW5ndGggPSBsZW47
CiAgICAgICAgICAgICBub2RlLT5nbHlwaHMubGFzdCgpLmlzVmFsaWQgPSB0cnVlOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVHbHlwaFByaW9yaXR5
KGNvbnN0IFNWR0dseXBoSWRlbnRpZmllciYgZmlyc3QsIGNvbnN0IFNWR0dseXBoSWRlbnRpZmll
ciYgc2Vjb25kKQorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlR2x5cGhQcmlvcml0eShj
b25zdCBTVkdHbHlwaCYgZmlyc3QsIGNvbnN0IFNWR0dseXBoJiBzZWNvbmQpCiAgICAgewogICAg
ICAgICByZXR1cm4gZmlyc3QucHJpb3JpdHkgPCBzZWNvbmQucHJpb3JpdHk7CiAgICAgfQogCi0g
ICAgdm9pZCBnZXQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIFZlY3RvcjxTVkdHbHlwaElkZW50aWZp
ZXI+JiBnbHlwaHMpCisgICAgdm9pZCBnZXQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIFZlY3RvcjxT
VkdHbHlwaD4mIGdseXBocykKICAgICB7CiAgICAgICAgIEdseXBoTWFwTGF5ZXIqIGN1cnJlbnRM
YXllciA9ICZtX3Jvb3RMYXllcjsKIAo=
</data>
<flag name="review"
          id="83291"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>