<?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>114014</bug_id>
          
          <creation_ts>2013-04-05 02:42:59 -0700</creation_ts>
          <short_desc>Remove Chromium code from WebCore/platform</short_desc>
          <delta_ts>2013-04-05 12:22:29 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>869663</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-05 02:42:59 -0700</bug_when>
    <thetext>Remove Chromium code from WebCore/platform</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869664</commentid>
    <comment_count>1</comment_count>
      <attachid>196604</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-05 02:43:34 -0700</bug_when>
    <thetext>Created attachment 196604
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869946</commentid>
    <comment_count>2</comment_count>
      <attachid>196604</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-05 12:22:27 -0700</bug_when>
    <thetext>Comment on attachment 196604
Cleanup

Clearing flags on attachment: 196604

Committed r147775: &lt;http://trac.webkit.org/changeset/147775&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869947</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-05 12:22:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196604</attachid>
            <date>2013-04-05 02:43:34 -0700</date>
            <delta_ts>2013-04-05 12:22:27 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-114014-20130405024320.patch</filename>
            <type>text/plain</type>
            <size>636060</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOCBAQAorMjAxMy0wNC0wNSAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgQ2hyb21pdW0gY29k
ZSBmcm9tIFdlYkNvcmUvcGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExNDAxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlbW92ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jaHJv
bWl1bTogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jaHJvbWl1bS9BdWRpb0J1
c0Nocm9taXVtLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jaHJvbWl1
bS9BdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW0uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL2Nocm9taXVtL0F1ZGlvRGVzdGluYXRpb25DaHJvbWl1bS5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2Nocm9taXVtL0ZGVEZyYW1lT3Blbk1BWERMQW5kcm9p
ZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3Jt
RGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9u
VXRpbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
QW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5
ZXJNYW5hZ2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0Nyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRp
bmcubW06IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVm
ZXJyZWRJbWFnZURlY29kZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGlzY2FyZGFibGVQaXhlbFJlZi5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGlzY2FyZGFibGVQaXhl
bFJlZi5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Ry
YXdpbmdCdWZmZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0uaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVBbmRyb2lkLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1
bUxpbnV4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhLmg6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNo
cm9taXVtV2luLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UmVuZGVyU3R5bGUuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0
aWxzQ2hyb21pdW1XaW4uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9kZUNocm9taXVtV2luLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNz
TGF5ZXJDaHJvbWl1bS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ljb25DaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSWNvbkNocm9taXVtQW5kcm9pZC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW0u
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
RGVjb2RpbmdTdG9yZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUGFp
bnRlckNocm9taXVtLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hy
b21pdW0uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdh
dGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09w
YXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1JY29uLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVk
SW1hZ2VGcmFnbWVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrU2l6ZUhhc2guaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlVXBsb2FkZXIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaHJlYWRTYWZlRGF0YVRy
YW5zcG9ydC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGhyZWFkU2FmZURhdGFUcmFuc3BvcnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc2Zvcm1Ta01hdHJpeDQ0Q29udmVyc2lvbnMuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zZm9ybVNr
TWF0cml4NDRDb252ZXJzaW9ucy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxw
ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Vbmlz
Y3JpYmVIZWxwZXJUZXh0UnVuLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVkRNWFBhcnNlci5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVkRNWFBhcnNlci5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRH
cmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0Nv
bnRleHQzREltcGw6OmdldE9yQ3JlYXRlQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vY2hyb21pdW06IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJl
YW0vY2hyb21pdW0vTWVkaWFTdHJlYW1DZW50ZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vTWVkaWFTdHJlYW1DZW50ZXJDaHJv
bWl1bS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVt
L1JUQ0RUTUZTZW5kZXJIYW5kbGVyQ2hyb21pdW0uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1JUQ0RUTUZTZW5kZXJIYW5kbGVyQ2hyb21pdW0u
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9SVENE
YXRhQ2hhbm5lbEhhbmRsZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2hyb21pdW0uaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9SVENQZWVy
Q29ubmVjdGlvbkhhbmRsZXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW0u
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ2hyb21pdW0uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQmxvYlJlZ2lzdHJ5UHJveHkuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQmxvYlJlZ2lzdHJ5UHJveHkuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNo
cm9taXVtLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVt
L0ROU0Nocm9taXVtLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2No
cm9taXVtL1Jlc291cmNlRXJyb3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2Nocm9taXVtL1Jlc291cmNlSGFuZGxlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVxdWVzdC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJl
cXVlc3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jl
c291cmNlUmVzcG9uc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y2hyb21pdW0vUmVzb3VyY2VSZXNwb25zZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY2hyb21pdW0vU29ja2V0U3RyZWFtRXJyb3IuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1NvY2tldFN0cmVhbUhhbmRsZS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Tb2NrZXRTdHJlYW1IYW5k
bGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1NvY2tl
dFN0cmVhbUhhbmRsZUludGVybmFsLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vc3Fs
L2Nocm9taXVtOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxp
dGVGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3Nx
bC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1Qb3NpeC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdp
bi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9jaHJvbWl1bTogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2Nocm9taXVtL0h5cGhlbmF0aW9uLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2Nocm9taXVtL1RleHRCcmVha0l0ZXJhdG9y
SW50ZXJuYWxJQ1VDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisKIDIwMTMtMDQtMDUgIFNlb2tqdSBL
d29uICA8c2Vva2p1Lmt3b25AZ21haWwuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGNy
YXNoIGluIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdodFF1YWQgYWZ0ZXIgcjE0NzU2
NgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY2hyb21pdW0vQXVkaW9CdXND
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
Y2hyb21pdW0vQXVkaW9CdXNDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2Nocm9taXVtL0F1ZGlvQnVzQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIK
LQotI2luY2x1ZGUgIkF1ZGlvRmlsZVJlYWRlci5oIgotI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9y
bS5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJBdWRpb0J1cy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc093blB0cjxBdWRpb0J1cz4g
ZGVjb2RlQXVkaW9GaWxlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSwgZG91Ymxl
IHNhbXBsZVJhdGUpCi17Ci0gICAgV2ViS2l0OjpXZWJBdWRpb0J1cyB3ZWJBdWRpb0J1czsKLSAg
ICBpZiAoV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5sb2FkQXVkaW9SZXNvdXJjZSgmd2Vi
QXVkaW9CdXMsIGRhdGEsIHNpemUsIHNhbXBsZVJhdGUpKQotICAgICAgICByZXR1cm4gd2ViQXVk
aW9CdXMucmVsZWFzZSgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1QYXNzT3duUHRyPEF1
ZGlvQnVzPiBBdWRpb0J1czo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSwg
ZmxvYXQgc2FtcGxlUmF0ZSkKLXsKLSAgICBjb25zdCBXZWJLaXQ6OldlYkRhdGEmIHJlc291cmNl
ID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5sb2FkUmVzb3VyY2UobmFtZSk7Ci0gICAg
aWYgKHJlc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAv
LyBGSVhNRTogdGhlIHNhbXBsZVJhdGUgcGFyYW1ldGVyIGlzIGlnbm9yZWQuIEl0IHNob3VsZCBi
ZSByZW1vdmVkIGZyb20gdGhlIEFQSS4KLSAgICBPd25QdHI8QXVkaW9CdXM+IGF1ZGlvQnVzID0g
ZGVjb2RlQXVkaW9GaWxlRGF0YShyZXNvdXJjZS5kYXRhKCksIHJlc291cmNlLnNpemUoKSwgc2Ft
cGxlUmF0ZSk7Ci0KLSAgICBpZiAoIWF1ZGlvQnVzLmdldCgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIC8vIElmIHRoZSBidXMgaXMgYWxyZWFkeSBhdCB0aGUgcmVxdWVzdGVkIHNh
bXBsZS1yYXRlIHRoZW4gcmV0dXJuIGFzIGlzLgotICAgIGlmIChhdWRpb0J1cy0+c2FtcGxlUmF0
ZSgpID09IHNhbXBsZVJhdGUpCi0gICAgICAgIHJldHVybiBhdWRpb0J1cy5yZWxlYXNlKCk7Ci0K
LSAgICByZXR1cm4gQXVkaW9CdXM6OmNyZWF0ZUJ5U2FtcGxlUmF0ZUNvbnZlcnRpbmcoYXVkaW9C
dXMuZ2V0KCksIGZhbHNlLCBzYW1wbGVSYXRlKTsKLX0KLQotUGFzc093blB0cjxBdWRpb0J1cz4g
Y3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBk
YXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCi17Ci0gICAgLy8gRklY
TUU6IHRoZSBzYW1wbGVSYXRlIHBhcmFtZXRlciBpcyBpZ25vcmVkLiBJdCBzaG91bGQgYmUgcmVt
b3ZlZCBmcm9tIHRoZSBBUEkuCi0gICAgT3duUHRyPEF1ZGlvQnVzPiBhdWRpb0J1cyA9IGRlY29k
ZUF1ZGlvRmlsZURhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBkYXRhU2l6ZSwg
c2FtcGxlUmF0ZSk7Ci0gICAgaWYgKCFhdWRpb0J1cy5nZXQoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAvLyBJZiB0aGUgYnVzIG5lZWRzIG5vIGNvbnZlcnNpb24gdGhlbiByZXR1
cm4gYXMgaXMuCi0gICAgaWYgKCghbWl4VG9Nb25vIHx8IGF1ZGlvQnVzLT5udW1iZXJPZkNoYW5u
ZWxzKCkgPT0gMSkgJiYgYXVkaW9CdXMtPnNhbXBsZVJhdGUoKSA9PSBzYW1wbGVSYXRlKQotICAg
ICAgICByZXR1cm4gYXVkaW9CdXMucmVsZWFzZSgpOwotCi0gICAgcmV0dXJuIEF1ZGlvQnVzOjpj
cmVhdGVCeVNhbXBsZVJhdGVDb252ZXJ0aW5nKGF1ZGlvQnVzLmdldCgpLCBtaXhUb01vbm8sIHNh
bXBsZVJhdGUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY2hyb21p
dW0vQXVkaW9EZXN0aW5hdGlvbkNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9jaHJvbWl1bS9BdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jaHJv
bWl1bS9BdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykK
LQotI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25DaHJvbWl1bS5oIgotCi0jaW5jbHVkZSAiQXVk
aW9GSUZPLmgiCi0jaW5jbHVkZSAiQXVkaW9QdWxsRklGTy5oIgotI2luY2x1ZGUgPHB1YmxpYy9Q
bGF0Zm9ybS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEJ1ZmZlciBzaXplIGF0IHdo
aWNoIHRoZSB3ZWIgYXVkaW8gZW5naW5lIHdpbGwgcmVuZGVyLgotY29uc3QgdW5zaWduZWQgcmVu
ZGVyQnVmZmVyU2l6ZSA9IDEyODsKLQotLy8gU2l6ZSBvZiB0aGUgRklGTwotY29uc3Qgc2l6ZV90
IGZpZm9TaXplID0gODE5MjsKLQotLy8gRmFjdG9yeSBtZXRob2Q6IENocm9taXVtLWltcGxlbWVu
dGF0aW9uCi1QYXNzT3duUHRyPEF1ZGlvRGVzdGluYXRpb24+IEF1ZGlvRGVzdGluYXRpb246OmNy
ZWF0ZShBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBjb25zdCBTdHJpbmcmIGlucHV0RGV2aWNl
SWQsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRDaGFubmVscywgdW5zaWduZWQgbnVtYmVyT2ZPdXRw
dXRDaGFubmVscywgZmxvYXQgc2FtcGxlUmF0ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEF1ZGlvRGVzdGluYXRpb25DaHJvbWl1bShjYWxsYmFjaywgaW5wdXREZXZpY2VJZCwgbnVtYmVy
T2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBzYW1wbGVSYXRlKSk7Ci19
Ci0KLUF1ZGlvRGVzdGluYXRpb25DaHJvbWl1bTo6QXVkaW9EZXN0aW5hdGlvbkNocm9taXVtKEF1
ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgaW5wdXREZXZpY2VJZCwgdW5z
aWduZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1dENoYW5u
ZWxzLCBmbG9hdCBzYW1wbGVSYXRlKQotICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykKLSAgICAs
IG1fbnVtYmVyT2ZPdXRwdXRDaGFubmVscyhudW1iZXJPZk91dHB1dENoYW5uZWxzKQotICAgICwg
bV9pbnB1dEJ1cyhudW1iZXJPZklucHV0Q2hhbm5lbHMsIHJlbmRlckJ1ZmZlclNpemUpCi0gICAg
LCBtX3JlbmRlckJ1cyhudW1iZXJPZk91dHB1dENoYW5uZWxzLCByZW5kZXJCdWZmZXJTaXplLCBm
YWxzZSkKLSAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQotICAgICwgbV9pc1BsYXlpbmco
ZmFsc2UpCi17Ci0gICAgLy8gVXNlIHRoZSBvcHRpbWFsIGJ1ZmZlciBzaXplIHJlY29tbWVuZGVk
IGJ5IHRoZSBhdWRpbyBiYWNrZW5kLgotICAgIG1fY2FsbGJhY2tCdWZmZXJTaXplID0gV2ViS2l0
OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5hdWRpb0hhcmR3YXJlQnVmZmVyU2l6ZSgpOwotCi0gICAg
Ly8gUXVpY2sgZXhpdCBpZiB0aGUgcmVxdWVzdGVkIHNpemUgaXMgdG9vIGxhcmdlLgotICAgIEFT
U0VSVChtX2NhbGxiYWNrQnVmZmVyU2l6ZSArIHJlbmRlckJ1ZmZlclNpemUgPD0gZmlmb1NpemUp
OwotICAgIGlmIChtX2NhbGxiYWNrQnVmZmVyU2l6ZSArIHJlbmRlckJ1ZmZlclNpemUgPiBmaWZv
U2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9hdWRpb0RldmljZSA9IGFkb3B0UHRyKFdl
YktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3JlYXRlQXVkaW9EZXZpY2UobV9jYWxsYmFja0J1
ZmZlclNpemUsIG51bWJlck9mSW5wdXRDaGFubmVscywgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywg
c2FtcGxlUmF0ZSwgdGhpcywgaW5wdXREZXZpY2VJZCkpOwotICAgIEFTU0VSVChtX2F1ZGlvRGV2
aWNlKTsKLQotICAgIC8vIENyZWF0ZSBhIEZJRk8gdG8gaGFuZGxlIHRoZSBwb3NzaWJpbGl0eSBv
ZiB0aGUgY2FsbGJhY2sgc2l6ZQotICAgIC8vIG5vdCBiZWluZyBhIG11bHRpcGxlIG9mIHRoZSBy
ZW5kZXIgc2l6ZS4gSWYgdGhlIEZJRk8gYWxyZWFkeQotICAgIC8vIGNvbnRhaW5zIGVub3VnaCBk
YXRhLCB0aGUgZGF0YSB3aWxsIGJlIHByb3ZpZGVkIGRpcmVjdGx5LgotICAgIC8vIE90aGVyd2lz
ZSwgdGhlIEZJRk8gd2lsbCBjYWxsIHRoZSBwcm92aWRlciBlbm91Z2ggdGltZXMgdG8KLSAgICAv
LyBzYXRpc2Z5IHRoZSByZXF1ZXN0IGZvciBkYXRhLgotICAgIG1fZmlmbyA9IGFkb3B0UHRyKG5l
dyBBdWRpb1B1bGxGSUZPKCp0aGlzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBmaWZvU2l6ZSwg
cmVuZGVyQnVmZmVyU2l6ZSkpOwotCi0gICAgLy8gSW5wdXQgYnVmZmVyaW5nLgotICAgIG1faW5w
dXRGaWZvID0gYWRvcHRQdHIobmV3IEF1ZGlvRklGTyhudW1iZXJPZklucHV0Q2hhbm5lbHMsIGZp
Zm9TaXplKSk7Ci0KLSAgICAvLyBJZiB0aGUgY2FsbGJhY2sgc2l6ZSBkb2VzIG5vdCBtYXRjaCB0
aGUgcmVuZGVyIHNpemUsIHRoZW4gd2UgbmVlZCB0byBidWZmZXIgc29tZQotICAgIC8vIGV4dHJh
IHNpbGVuY2UgZm9yIHRoZSBpbnB1dC4gT3RoZXJ3aXNlLCB3ZSBjYW4gb3Zlci1jb25zdW1lIHRo
ZSBpbnB1dCBGSUZPLgotICAgIGlmIChtX2NhbGxiYWNrQnVmZmVyU2l6ZSAhPSByZW5kZXJCdWZm
ZXJTaXplKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgbXVsdGktY2hhbm5lbCBpbnB1dCBh
bmQgZG9uJ3QgaGFyZC1jb2RlIHRvIHN0ZXJlby4KLSAgICAgICAgQXVkaW9CdXMgc2lsZW5jZSgy
LCByZW5kZXJCdWZmZXJTaXplKTsKLSAgICAgICAgbV9pbnB1dEZpZm8tPnB1c2goJnNpbGVuY2Up
OwotICAgIH0KLX0KLQotQXVkaW9EZXN0aW5hdGlvbkNocm9taXVtOjp+QXVkaW9EZXN0aW5hdGlv
bkNocm9taXVtKCkKLXsKLSAgICBzdG9wKCk7Ci19Ci0KLXZvaWQgQXVkaW9EZXN0aW5hdGlvbkNo
cm9taXVtOjpzdGFydCgpCi17Ci0gICAgaWYgKCFtX2lzUGxheWluZyAmJiBtX2F1ZGlvRGV2aWNl
KSB7Ci0gICAgICAgIG1fYXVkaW9EZXZpY2UtPnN0YXJ0KCk7Ci0gICAgICAgIG1faXNQbGF5aW5n
ID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9EZXN0aW5hdGlvbkNocm9taXVtOjpzdG9w
KCkKLXsKLSAgICBpZiAobV9pc1BsYXlpbmcgJiYgbV9hdWRpb0RldmljZSkgewotICAgICAgICBt
X2F1ZGlvRGV2aWNlLT5zdG9wKCk7Ci0gICAgICAgIG1faXNQbGF5aW5nID0gZmFsc2U7Ci0gICAg
fQotfQotCi1mbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKQotewot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgp
LT5hdWRpb0hhcmR3YXJlU2FtcGxlUmF0ZSgpKTsKLX0KLQotdW5zaWduZWQgbG9uZyBBdWRpb0Rl
c3RpbmF0aW9uOjptYXhDaGFubmVsQ291bnQoKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4oV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5hdWRpb0hhcmR3YXJlT3V0cHV0Q2hh
bm5lbHMoKSk7Ci19Ci0KLXZvaWQgQXVkaW9EZXN0aW5hdGlvbkNocm9taXVtOjpyZW5kZXIoY29u
c3QgV2ViS2l0OjpXZWJWZWN0b3I8ZmxvYXQqPiYgc291cmNlRGF0YSwgY29uc3QgV2ViS2l0OjpX
ZWJWZWN0b3I8ZmxvYXQqPiYgYXVkaW9EYXRhLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCi17Ci0g
ICAgYm9vbCBpc051bWJlck9mQ2hhbm5lbHNHb29kID0gYXVkaW9EYXRhLnNpemUoKSA9PSBtX251
bWJlck9mT3V0cHV0Q2hhbm5lbHM7Ci0gICAgaWYgKCFpc051bWJlck9mQ2hhbm5lbHNHb29kKSB7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgYm9vbCBpc0J1ZmZlclNpemVHb29kID0gbnVtYmVyT2ZGcmFtZXMgPT0gbV9jYWxsYmFj
a0J1ZmZlclNpemU7Ci0gICAgaWYgKCFpc0J1ZmZlclNpemVHb29kKSB7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQnVmZmVy
IG9wdGlvbmFsIGxpdmUgaW5wdXQuCi0gICAgaWYgKHNvdXJjZURhdGEuc2l6ZSgpID49IDIpIHsK
LSAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBtdWx0aS1jaGFubmVsIGlucHV0IGFuZCBkb24ndCBo
YXJkLWNvZGUgdG8gc3RlcmVvLgotICAgICAgICBBdWRpb0J1cyB3cmFwcGVyQnVzKDIsIG51bWJl
ck9mRnJhbWVzLCBmYWxzZSk7Ci0gICAgICAgIHdyYXBwZXJCdXMuc2V0Q2hhbm5lbE1lbW9yeSgw
LCBzb3VyY2VEYXRhWzBdLCBudW1iZXJPZkZyYW1lcyk7Ci0gICAgICAgIHdyYXBwZXJCdXMuc2V0
Q2hhbm5lbE1lbW9yeSgxLCBzb3VyY2VEYXRhWzFdLCBudW1iZXJPZkZyYW1lcyk7Ci0gICAgICAg
IG1faW5wdXRGaWZvLT5wdXNoKCZ3cmFwcGVyQnVzKTsKLSAgICB9Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9udW1iZXJPZk91dHB1dENoYW5uZWxzOyArK2kpCi0gICAgICAgIG1f
cmVuZGVyQnVzLnNldENoYW5uZWxNZW1vcnkoaSwgYXVkaW9EYXRhW2ldLCBudW1iZXJPZkZyYW1l
cyk7Ci0KLSAgICBtX2ZpZm8tPmNvbnN1bWUoJm1fcmVuZGVyQnVzLCBudW1iZXJPZkZyYW1lcyk7
Ci19Ci0KLXZvaWQgQXVkaW9EZXN0aW5hdGlvbkNocm9taXVtOjpwcm92aWRlSW5wdXQoQXVkaW9C
dXMqIGJ1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKLXsKLSAgICBBdWRpb0J1cyogc291cmNl
QnVzID0gMDsKLSAgICBpZiAobV9pbnB1dEZpZm8tPmZyYW1lc0luRmlmbygpID49IGZyYW1lc1Rv
UHJvY2VzcykgewotICAgICAgICBtX2lucHV0Rmlmby0+Y29uc3VtZSgmbV9pbnB1dEJ1cywgZnJh
bWVzVG9Qcm9jZXNzKTsKLSAgICAgICAgc291cmNlQnVzID0gJm1faW5wdXRCdXM7Ci0gICAgfQot
Ci0gICAgbV9jYWxsYmFjay5yZW5kZXIoc291cmNlQnVzLCBidXMsIGZyYW1lc1RvUHJvY2Vzcyk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVE
SU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jaHJvbWl1bS9BdWRpb0Rl
c3RpbmF0aW9uQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9jaHJvbWl1bS9BdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW0uaAkocmV2aXNpb24gMTQ3
NzMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY2hyb21pdW0vQXVkaW9EZXN0
aW5hdGlvbkNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgQXVkaW9EZXN0aW5hdGlvbkNocm9taXVtX2gKLSNkZWZpbmUgQXVkaW9EZXN0aW5hdGlvbkNo
cm9taXVtX2gKLQotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5h
dGlvbi5oIgotI2luY2x1ZGUgIkF1ZGlvSU9DYWxsYmFjay5oIgotI2luY2x1ZGUgIkF1ZGlvU291
cmNlUHJvdmlkZXIuaCIKLSNpbmNsdWRlIDxwdWJsaWMvV2ViQXVkaW9EZXZpY2UuaD4KLSNpbmNs
dWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsgCi0KLWNsYXNz
IEF1ZGlvRklGTzsKLWNsYXNzIEF1ZGlvUHVsbEZJRk87Ci0KLS8vIEFuIEF1ZGlvRGVzdGluYXRp
b24gdXNpbmcgQ2hyb21pdW0ncyBhdWRpbyBzeXN0ZW0KLQotY2xhc3MgQXVkaW9EZXN0aW5hdGlv
bkNocm9taXVtIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb24sIHB1YmxpYyBXZWJLaXQ6OldlYkF1
ZGlvRGV2aWNlOjpSZW5kZXJDYWxsYmFjaywgcHVibGljIEF1ZGlvU291cmNlUHJvdmlkZXIgewot
cHVibGljOgotICAgIEF1ZGlvRGVzdGluYXRpb25DaHJvbWl1bShBdWRpb0lPQ2FsbGJhY2smLCBj
b25zdCBTdHJpbmcmIGlucHV0RGV2aWNlSWQsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRDaGFubmVs
cywgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgZmxvYXQgc2FtcGxlUmF0ZSk7Ci0g
ICAgdmlydHVhbCB+QXVkaW9EZXN0aW5hdGlvbkNocm9taXVtKCk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc3RhcnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwotICAgIGJvb2wgaXNQbGF5aW5n
KCkgeyByZXR1cm4gbV9pc1BsYXlpbmc7IH0KLQotICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25z
dCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KLQotICAgIC8vIFdlYktpdDo6V2ViQXVkaW9EZXZp
Y2U6OlJlbmRlckNhbGxiYWNrCi0gICAgdmlydHVhbCB2b2lkIHJlbmRlcihjb25zdCBXZWJLaXQ6
OldlYlZlY3RvcjxmbG9hdCo+JiBzb3VyY2VEYXRhLCBjb25zdCBXZWJLaXQ6OldlYlZlY3Rvcjxm
bG9hdCo+JiBhdWRpb0RhdGEsIHNpemVfdCBudW1iZXJPZkZyYW1lcyk7Ci0KLSAgICAvLyBXZWJD
b3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyCi0gICAgdmlydHVhbCB2b2lkIHByb3ZpZGVJbnB1dChB
dWRpb0J1cyosIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwotCi1wcml2YXRlOgotICAgIEF1ZGlv
SU9DYWxsYmFjayYgbV9jYWxsYmFjazsKLSAgICB1bnNpZ25lZCBtX251bWJlck9mT3V0cHV0Q2hh
bm5lbHM7Ci0gICAgQXVkaW9CdXMgbV9pbnB1dEJ1czsKLSAgICBBdWRpb0J1cyBtX3JlbmRlckJ1
czsKLSAgICBmbG9hdCBtX3NhbXBsZVJhdGU7Ci0gICAgYm9vbCBtX2lzUGxheWluZzsKLSAgICBP
d25QdHI8V2ViS2l0OjpXZWJBdWRpb0RldmljZT4gbV9hdWRpb0RldmljZTsKLSAgICBzaXplX3Qg
bV9jYWxsYmFja0J1ZmZlclNpemU7Ci0KLSAgICBPd25QdHI8QXVkaW9GSUZPPiBtX2lucHV0Rmlm
bzsKLSAgICBPd25QdHI8QXVkaW9QdWxsRklGTz4gbV9maWZvOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQXVkaW9EZXN0aW5hdGlvbkNocm9taXVtX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2Nocm9taXVtL0ZGVEZyYW1lT3Blbk1BWERM
QW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
Y2hyb21pdW0vRkZURnJhbWVPcGVuTUFYRExBbmRyb2lkLmNwcAkocmV2aXNpb24gMTQ3NzMyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY2hyb21pdW0vRkZURnJhbWVPcGVuTUFY
RExBbmRyb2lkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDIgKzAsMCBAQAotLyogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2lmIE9TKEFORFJPSUQp
ICYmIFVTRShXRUJBVURJT19PUEVOTUFYX0RMX0ZGVCkKLQotI2luY2x1ZGUgIkZGVEZyYW1lLmgi
Ci0KLSNpbmNsdWRlICJBdWRpb0FycmF5LmgiCi0jaW5jbHVkZSAiVmVjdG9yTWF0aC5oIgotI2lu
Y2x1ZGUgImRsL3NwL2FwaS9hcm1TUC5oIgotI2luY2x1ZGUgImRsL3NwL2FwaS9vbXhTUC5oIgot
Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
b25zdCBpbnQga01heEZGVFBvdzJTaXplID0gMTU7Ci0KLS8vIE5vcm1hbCBjb25zdHJ1Y3Rvcjog
YWxsb2NhdGVzIGZvciBhIGdpdmVuIGZmdFNpemUuCi1GRlRGcmFtZTo6RkZURnJhbWUodW5zaWdu
ZWQgZmZ0U2l6ZSkKLSAgICA6IG1fRkZUU2l6ZShmZnRTaXplKQotICAgICwgbV9sb2cyRkZUU2l6
ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9nMihmZnRTaXplKSkpCi0gICAgLCBtX2ZvcndhcmRD
b250ZXh0KDApCi0gICAgLCBtX2ludmVyc2VDb250ZXh0KDApCi0gICAgLCBtX2NvbXBsZXhEYXRh
KGZmdFNpemUpCi0gICAgLCBtX3JlYWxEYXRhKGZmdFNpemUgLyAyKQotICAgICwgbV9pbWFnRGF0
YShmZnRTaXplIC8gMikKLXsKLSAgICAvLyBXZSBvbmx5IGFsbG93IHBvd2VyIG9mIHR3by4KLSAg
ICBBU1NFUlQoMVVMIDw8IG1fbG9nMkZGVFNpemUgPT0gbV9GRlRTaXplKTsKLQotICAgIG1fZm9y
d2FyZENvbnRleHQgPSBjb250ZXh0Rm9yU2l6ZShtX2xvZzJGRlRTaXplKTsKLSAgICBtX2ludmVy
c2VDb250ZXh0ID0gY29udGV4dEZvclNpemUobV9sb2cyRkZUU2l6ZSk7Ci19Ci0KLS8vIENyZWF0
ZXMgYSBibGFuay9lbXB0eSBmcmFtZSAoaW50ZXJwb2xhdGUoKSBtdXN0IGxhdGVyIGJlIGNhbGxl
ZCkuCi1GRlRGcmFtZTo6RkZURnJhbWUoKQotICAgIDogbV9GRlRTaXplKDApCi0gICAgLCBtX2xv
ZzJGRlRTaXplKDApCi0gICAgLCBtX2ZvcndhcmRDb250ZXh0KDApCi0gICAgLCBtX2ludmVyc2VD
b250ZXh0KDApCi17Ci19Ci0KLS8vIENvcHkgY29uc3RydWN0b3IuCi1GRlRGcmFtZTo6RkZURnJh
bWUoY29uc3QgRkZURnJhbWUmIGZyYW1lKQotICAgIDogbV9GRlRTaXplKGZyYW1lLm1fRkZUU2l6
ZSkKLSAgICAsIG1fbG9nMkZGVFNpemUoZnJhbWUubV9sb2cyRkZUU2l6ZSkKLSAgICAsIG1fZm9y
d2FyZENvbnRleHQoMCkKLSAgICAsIG1faW52ZXJzZUNvbnRleHQoMCkKLSAgICAsIG1fY29tcGxl
eERhdGEoZnJhbWUubV9GRlRTaXplKQotICAgICwgbV9yZWFsRGF0YShmcmFtZS5tX0ZGVFNpemUg
LyAyKQotICAgICwgbV9pbWFnRGF0YShmcmFtZS5tX0ZGVFNpemUgLyAyKQotewotICAgIG1fZm9y
d2FyZENvbnRleHQgPSBjb250ZXh0Rm9yU2l6ZShtX2xvZzJGRlRTaXplKTsKLSAgICBtX2ludmVy
c2VDb250ZXh0ID0gY29udGV4dEZvclNpemUobV9sb2cyRkZUU2l6ZSk7Ci0KLSAgICAvLyBDb3B5
L3NldHVwIGZyYW1lIGRhdGEuCi0gICAgdW5zaWduZWQgbmJ5dGVzID0gc2l6ZW9mKGZsb2F0KSAq
IChtX0ZGVFNpemUgLyAyKTsKLSAgICBtZW1jcHkocmVhbERhdGEoKSwgZnJhbWUucmVhbERhdGEo
KSwgbmJ5dGVzKTsKLSAgICBtZW1jcHkoaW1hZ0RhdGEoKSwgZnJhbWUuaW1hZ0RhdGEoKSwgbmJ5
dGVzKTsKLX0KLQotdm9pZCBGRlRGcmFtZTo6aW5pdGlhbGl6ZSgpCi17Ci19Ci0KLXZvaWQgRkZU
RnJhbWU6OmNsZWFudXAoKQotewotfQotCi1GRlRGcmFtZTo6fkZGVEZyYW1lKCkKLXsKLSAgICBp
ZiAobV9mb3J3YXJkQ29udGV4dCkKLSAgICAgICAgZnJlZShtX2ZvcndhcmRDb250ZXh0KTsKLSAg
ICBpZiAobV9pbnZlcnNlQ29udGV4dCkKLSAgICAgICAgZnJlZShtX2ludmVyc2VDb250ZXh0KTsK
LX0KLQotdm9pZCBGRlRGcmFtZTo6bXVsdGlwbHkoY29uc3QgRkZURnJhbWUmIGZyYW1lKQotewot
ICAgIEZGVEZyYW1lJiBmcmFtZTEgPSAqdGhpczsKLSAgICBGRlRGcmFtZSYgZnJhbWUyID0gY29u
c3RfY2FzdDxGRlRGcmFtZSY+KGZyYW1lKTsKLQotICAgIGZsb2F0KiByZWFsUDEgPSBmcmFtZTEu
cmVhbERhdGEoKTsKLSAgICBmbG9hdCogaW1hZ1AxID0gZnJhbWUxLmltYWdEYXRhKCk7Ci0gICAg
Y29uc3QgZmxvYXQqIHJlYWxQMiA9IGZyYW1lMi5yZWFsRGF0YSgpOwotICAgIGNvbnN0IGZsb2F0
KiBpbWFnUDIgPSBmcmFtZTIuaW1hZ0RhdGEoKTsKLQotICAgIHVuc2lnbmVkIGhhbGZTaXplID0g
ZmZ0U2l6ZSgpIC8gMjsKLSAgICBmbG9hdCByZWFsMCA9IHJlYWxQMVswXTsKLSAgICBmbG9hdCBp
bWFnMCA9IGltYWdQMVswXTsKLQotICAgIFZlY3Rvck1hdGg6Onp2bXVsKHJlYWxQMSwgaW1hZ1Ax
LCByZWFsUDIsIGltYWdQMiwgcmVhbFAxLCBpbWFnUDEsIGhhbGZTaXplKTsgCi0KLSAgICAvLyBN
dWx0aXBseSB0aGUgcGFja2VkIERDL255cXVpc3QgY29tcG9uZW50Ci0gICAgcmVhbFAxWzBdID0g
cmVhbDAgKiByZWFsUDJbMF07Ci0gICAgaW1hZ1AxWzBdID0gaW1hZzAgKiBpbWFnUDJbMF07Ci19
Ci0KLXZvaWQgRkZURnJhbWU6OmRvRkZUKGNvbnN0IGZsb2F0KiBkYXRhKQotewotICAgIEFTU0VS
VChtX2ZvcndhcmRDb250ZXh0KTsKLQotICAgIGlmIChtX2ZvcndhcmRDb250ZXh0KSB7Ci0gICAg
ICAgIEF1ZGlvRmxvYXRBcnJheSBjb21wbGV4RkZUKG1fRkZUU2l6ZSArIDIpOwotCi0gICAgICAg
IG9teFNQX0ZGVEZ3ZF9SVG9DQ1NfRjMyX1NmcyhkYXRhLCBjb21wbGV4RkZULmRhdGEoKSwgbV9m
b3J3YXJkQ29udGV4dCk7Ci0KLSAgICAgICAgdW5zaWduZWQgbGVuID0gbV9GRlRTaXplIC8gMjsK
LQotICAgICAgICAvLyBTcGxpdCBGRlQgZGF0YSBpbnRvIHJlYWwgYW5kIGltYWdpbmFyeSBhcnJh
eXMuCi0gICAgICAgIGZvciAodW5zaWduZWQgayA9IDE7IGsgPCBsZW47ICsraykgewotICAgICAg
ICAgICAgaW50IGluZGV4ID0gMiAqIGs7Ci0gICAgICAgICAgICBtX3JlYWxEYXRhW2tdID0gY29t
cGxleEZGVFtpbmRleF07Ci0gICAgICAgICAgICBtX2ltYWdEYXRhW2tdID0gY29tcGxleEZGVFtp
bmRleCArIDFdOwotICAgICAgICB9Ci0gICAgICAgIG1fcmVhbERhdGFbMF0gPSBjb21wbGV4RkZU
WzBdOwotICAgICAgICBtX2ltYWdEYXRhWzBdID0gY29tcGxleEZGVFttX0ZGVFNpemVdOwotICAg
IH0KLX0KLQotdm9pZCBGRlRGcmFtZTo6ZG9JbnZlcnNlRkZUKGZsb2F0KiBkYXRhKQotewotICAg
IEFTU0VSVChtX2ludmVyc2VDb250ZXh0KTsKLQotICAgIGlmIChtX2ludmVyc2VDb250ZXh0KSB7
Ci0gICAgICAgIEF1ZGlvRmxvYXRBcnJheSBmZnREYXRhKG1fRkZUU2l6ZSArIDIpOwotCi0gICAg
ICAgIHVuc2lnbmVkIGxlbiA9IG1fRkZUU2l6ZSAvIDI7Ci0KLSAgICAgICAgLy8gUGFjayB0aGUg
cmVhbCBhbmQgaW1hZ2luYXJ5IGRhdGEgaW50byB0aGUgY29tcGxleCBhcnJheSBmb3JtYXQKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBrID0gMTsgayA8IGxlbjsgKytrKSB7Ci0gICAgICAgICAgICBp
bnQgaW5kZXggPSAyICogazsKLSAgICAgICAgICAgIGZmdERhdGFbaW5kZXhdID0gbV9yZWFsRGF0
YVtrXTsKLSAgICAgICAgICAgIGZmdERhdGFbaW5kZXggKyAxXSA9IG1faW1hZ0RhdGFba107Ci0g
ICAgICAgIH0KLSAgICAgICAgZmZ0RGF0YVswXSA9IG1fcmVhbERhdGFbMF07Ci0gICAgICAgIGZm
dERhdGFbMV0gPSAwOwotICAgICAgICBmZnREYXRhW21fRkZUU2l6ZV0gPSBtX2ltYWdEYXRhWzBd
OwotICAgICAgICBmZnREYXRhW21fRkZUU2l6ZSArIDFdID0gMDsKLSAgICAKLSAgICAgICAgb214
U1BfRkZUSW52X0NDU1RvUl9GMzJfU2ZzKGZmdERhdGEuZGF0YSgpLCBkYXRhLCBtX2ludmVyc2VD
b250ZXh0KTsKLSAgICB9Ci19Ci0KLWZsb2F0KiBGRlRGcmFtZTo6cmVhbERhdGEoKSBjb25zdAot
ewotICAgIHJldHVybiBjb25zdF9jYXN0PGZsb2F0Kj4obV9yZWFsRGF0YS5kYXRhKCkpOwotfQot
Ci1mbG9hdCogRkZURnJhbWU6OmltYWdEYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29uc3Rf
Y2FzdDxmbG9hdCo+KG1faW1hZ0RhdGEuZGF0YSgpKTsKLX0KLQotT01YRkZUU3BlY19SX0YzMiog
RkZURnJhbWU6OmNvbnRleHRGb3JTaXplKHVuc2lnbmVkIGxvZzJGRlRTaXplKQotewotICAgIEFT
U0VSVChsb2cyRkZUU2l6ZSk7Ci0gICAgQVNTRVJUKGxvZzJGRlRTaXplIDwga01heEZGVFBvdzJT
aXplKTsKLSAgICBpbnQgYnVmU2l6ZTsKLSAgICBPTVhSZXN1bHQgc3RhdHVzID0gb214U1BfRkZU
R2V0QnVmU2l6ZV9SX0YzMihsb2cyRkZUU2l6ZSwgJmJ1ZlNpemUpOwotCi0gICAgaWYgKHN0YXR1
cyA9PSBPTVhfU3RzX05vRXJyKSB7Ci0gICAgICAgIE9NWEZGVFNwZWNfUl9GMzIqIGNvbnRleHQg
PSBzdGF0aWNfY2FzdDxPTVhGRlRTcGVjX1JfRjMyKj4obWFsbG9jKGJ1ZlNpemUpKTsKLSAgICAg
ICAgb214U1BfRkZUSW5pdF9SX0YzMihjb250ZXh0LCBsb2cyRkZUU2l6ZSk7Ci0gICAgICAgIHJl
dHVybiBjb250ZXh0OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyAjaWYgT1MoQU5EUk9JRCkgJiYgIVVTRShXRUJBVURJT19P
UEVOTUFYX0RMX0ZGVCkKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5o
CShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqLwog
CiAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkgdW50aWwgYWxsIHBvcnRzIHN3aXRjaCB0byB1
c2luZyB0aGlzIGZpbGUuCi0jaWYgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiAhT1MoREFSV0lOKSkg
fHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSNpbmNsdWRlICJjaHJvbWl1bS9Gb250UGxhdGZvcm1E
YXRhLmgiCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNpbmNsdWRlICJoYXJmYnV6ei9Gb250
UGxhdGZvcm1EYXRhSGFyZkJ1enouaCIKICNlbGlmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgInF0
L0ZvbnRQbGF0Zm9ybURhdGEuaCIKICNlbGlmIFBMQVRGT1JNKFdJTikgJiYgT1MoV0lOQ0UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25U
cmFuc2xhdGlvblV0aWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHAJKHJldmlzaW9u
IDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Fu
aW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjk0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkFuaW1h
dGlvblRyYW5zbGF0aW9uVXRpbC5oIgotCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIklkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9u
LmgiCi0jaW5jbHVkZSAiTGVuZ3RoLmgiCi0jaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCi0j
aW5jbHVkZSAiTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJNYXRyaXhU
cmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJh
dGlvbi5oIgotI2luY2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUg
IlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiU2tNYXRyaXg0NC5oIgotI2lu
Y2x1ZGUgIlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1PcGVy
YXRpb25zLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtU2tNYXRyaXg0NENvbnZlcnNpb25zLmgiCi0j
aW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0KLSNpbmNsdWRlIDxwdWJs
aWMvUGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViQW5pbWF0aW9uLmg+Ci0jaW5jbHVk
ZSA8cHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYkNvbXBv
c2l0b3JTdXBwb3J0Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUu
aD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuaD4KLSNpbmNs
dWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oPgotCi0jaW5jbHVkZSA8d3RmL093
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
UGFzc093blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25zPiB0b1dlYlRyYW5zZm9ybU9wZXJhdGlv
bnMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnNmb3JtT3BlcmF0aW9ucywgY29uc3Qg
RmxvYXRTaXplJiBib3hTaXplKQotewotICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBkZWVwIGNvcHkg
dGhlIHRyYW5zZm9ybU9wZXJhdGlvbnMgbWF5IGNvbnRhaW4gcmVmIHBvaW50ZXJzIHRvIFRyYW5z
Zm9ybU9wZXJhdGlvbiBvYmplY3RzLgotICAgIE93blB0cjxXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
PiB3ZWJUcmFuc2Zvcm1PcGVyYXRpb25zID0gYWRvcHRQdHIoUGxhdGZvcm06OmN1cnJlbnQoKS0+
Y29tcG9zaXRvclN1cHBvcnQoKS0+Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucygpKTsKLSAgICBp
ZiAoIXdlYlRyYW5zZm9ybU9wZXJhdGlvbnMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IGZvciAoc2l6ZV90IGogPSAwOyBqIDwgdHJhbnNmb3JtT3BlcmF0aW9ucy5zaXplKCk7ICsraikg
ewotICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlw
ZSA9IHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLT5nZXRPcGVyYXRpb25UeXBl
KCk7Ci0gICAgICAgIHN3aXRjaCAob3BlcmF0aW9uVHlwZSkgewotICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0NBTEVfWDoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlNDQUxFX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOgotICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q6Ci0gICAgICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpTQ0FMRTogewotICAgICAgICAgICAgU2NhbGVUcmFuc2Zvcm1PcGVy
YXRpb24qIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4o
dHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAg
d2ViVHJhbnNmb3JtT3BlcmF0aW9ucy0+YXBwZW5kU2NhbGUodHJhbnNmb3JtLT54KCksIHRyYW5z
Zm9ybS0+eSgpLCB0cmFuc2Zvcm0tPnooKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6Ci0gICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWToKLSAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6VFJBTlNMQVRFXzNEOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJB
TlNMQVRFOiB7Ci0gICAgICAgICAgICBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5z
Zm9ybSA9IHN0YXRpY19jYXN0PFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9y
bU9wZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIHdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMtPmFwcGVuZFRyYW5zbGF0ZShmbG9hdFZhbHVlRm9yTGVuZ3RoKHRyYW5z
Zm9ybS0+eCgpLCBib3hTaXplLndpZHRoKCkpLCBmbG9hdFZhbHVlRm9yTGVuZ3RoKHRyYW5zZm9y
bS0+eSgpLCBib3hTaXplLmhlaWdodCgpKSwgZmxvYXRWYWx1ZUZvckxlbmd0aCh0cmFuc2Zvcm0t
PnooKSwgMSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6Uk9UQVRFX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVf
M0Q6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEU6IHsKLSAgICAgICAg
ICAgIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8Um90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4odHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKClb
al0uZ2V0KCkpOwotICAgICAgICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy0+YXBwZW5kUm90
YXRlKHRyYW5zZm9ybS0+eCgpLCB0cmFuc2Zvcm0tPnkoKSwgdHJhbnNmb3JtLT56KCksIHRyYW5z
Zm9ybS0+YW5nbGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19YOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6U0tFV19ZOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzog
ewotICAgICAgICAgICAgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGlj
X2Nhc3Q8U2tld1RyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0
aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMtPmFw
cGVuZFNrZXcodHJhbnNmb3JtLT5hbmdsZVgoKSwgdHJhbnNmb3JtLT5hbmdsZVkoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6TUFUUklYOiB7Ci0gICAgICAgICAgICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5z
Zm9ybSA9IHN0YXRpY19jYXN0PE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KHRyYW5zZm9ybU9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpW2pdLmdldCgpKTsKLSAgICAgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG0gPSB0cmFuc2Zvcm0tPm1hdHJpeCgpOwotICAgICAgICAgICAgd2ViVHJhbnNm
b3JtT3BlcmF0aW9ucy0+YXBwZW5kTWF0cml4KFRyYW5zZm9ybVNrTWF0cml4NDRDb252ZXJzaW9u
czo6Y29udmVydChtKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOiB7Ci0gICAgICAgICAgICBNYXRyaXgz
RFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8TWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb24qPih0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5nZXQo
KSk7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtID0gdHJhbnNmb3JtLT5tYXRy
aXgoKTsKLSAgICAgICAgICAgIHdlYlRyYW5zZm9ybU9wZXJhdGlvbnMtPmFwcGVuZE1hdHJpeChU
cmFuc2Zvcm1Ta01hdHJpeDQ0Q29udmVyc2lvbnM6OmNvbnZlcnQobSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlBFUlNQ
RUNUSVZFOiB7Ci0gICAgICAgICAgICBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJh
bnNmb3JtID0gc3RhdGljX2Nhc3Q8UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24qPih0cmFu
c2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtqXS5nZXQoKSk7Ci0gICAgICAgICAgICB3ZWJU
cmFuc2Zvcm1PcGVyYXRpb25zLT5hcHBlbmRQZXJzcGVjdGl2ZShmbG9hdFZhbHVlRm9yTGVuZ3Ro
KHRyYW5zZm9ybS0+cGVyc3BlY3RpdmUoKSwgMCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OklERU5USVRZOgotICAgICAg
ICAgICAgd2ViVHJhbnNmb3JtT3BlcmF0aW9ucy0+YXBwZW5kSWRlbnRpdHkoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKLSAgICAg
ICAgICAgIC8vIERvIG5vdGhpbmcuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAvLyBz
d2l0Y2gKLSAgICB9IC8vIGZvciBlYWNoIG9wZXJhdGlvbgotCi0gICAgcmV0dXJuIHdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMucmVsZWFzZSgpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVmFsdWUsIGNs
YXNzIEtleWZyYW1lLCBjbGFzcyBDdXJ2ZT4KLWJvb2wgYXBwZW5kS2V5ZnJhbWVXaXRoU3RhbmRh
cmRUaW1pbmdGdW5jdGlvbihDdXJ2ZSogY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBWYWx1
ZSogdmFsdWUsIGNvbnN0IFZhbHVlKiBsYXN0VmFsdWUsIFdlYktpdDo6V2ViQW5pbWF0aW9uQ3Vy
dmU6OlRpbWluZ0Z1bmN0aW9uVHlwZSB0aW1pbmdGdW5jdGlvblR5cGUsIGNvbnN0IEZsb2F0U2l6
ZSYpCi17Ci0gICAgY3VydmUtPmFkZChLZXlmcmFtZShrZXlUaW1lLCB2YWx1ZS0+dmFsdWUoKSks
IHRpbWluZ0Z1bmN0aW9uVHlwZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBWYWx1ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgotYm9vbCBhcHBlbmRLZXlm
cmFtZVdpdGhDdXN0b21CZXppZXJUaW1pbmdGdW5jdGlvbihDdXJ2ZSogY3VydmUsIGRvdWJsZSBr
ZXlUaW1lLCBjb25zdCBWYWx1ZSogdmFsdWUsIGNvbnN0IFZhbHVlKiBsYXN0VmFsdWUsIGRvdWJs
ZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgY29uc3QgRmxvYXRTaXplJikK
LXsKLSAgICBjdXJ2ZS0+YWRkKEtleWZyYW1lKGtleVRpbWUsIHZhbHVlLT52YWx1ZSgpKSwgeDEs
IHkxLCB4MiwgeTIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIGlzUm90YXRpb25UeXBl
KFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0cmFuc2Zvcm1UeXBlKQotewotICAg
IHJldHVybiB0cmFuc2Zvcm1UeXBlID09IFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFCi0gICAg
ICAgIHx8IHRyYW5zZm9ybVR5cGUgPT0gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWAotICAg
ICAgICB8fCB0cmFuc2Zvcm1UeXBlID09IFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1kKLSAg
ICAgICAgfHwgdHJhbnNmb3JtVHlwZSA9PSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9aCi0g
ICAgICAgIHx8IHRyYW5zZm9ybVR5cGUgPT0gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfM0Q7
Ci19Ci0KLXRlbXBsYXRlIDw+Ci1ib29sIGFwcGVuZEtleWZyYW1lV2l0aFN0YW5kYXJkVGltaW5n
RnVuY3Rpb248VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUsIFdlYlRyYW5zZm9ybUtleWZyYW1lLCBX
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4oV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1
cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVl
LCBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogbGFzdFZhbHVlLCBXZWJLaXQ6OldlYkFu
aW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGUgdGltaW5nRnVuY3Rpb25UeXBlLCBjb25z
dCBGbG9hdFNpemUmIGJveFNpemUpCi17Ci0gICAgYm9vbCBjYW5CbGVuZCA9ICFsYXN0VmFsdWU7
Ci0gICAgT3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+IG9wZXJhdGlvbnModG9XZWJUcmFu
c2Zvcm1PcGVyYXRpb25zKCp2YWx1ZS0+dmFsdWUoKSwgYm94U2l6ZSkpOwotICAgIGlmICghb3Bl
cmF0aW9ucykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghY2FuQmxlbmQpIHsKLSAg
ICAgICAgT3duUHRyPFdlYlRyYW5zZm9ybU9wZXJhdGlvbnM+IGxhc3RPcGVyYXRpb25zKHRvV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucygqbGFzdFZhbHVlLT52YWx1ZSgpLCBib3hTaXplKSk7Ci0gICAg
ICAgIGlmICghbGFzdE9wZXJhdGlvbnMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGNhbkJsZW5kID0gbGFzdE9wZXJhdGlvbnMtPmNhbkJsZW5kV2l0aCgqb3BlcmF0aW9ucyk7
Ci0gICAgfQotICAgIGlmIChjYW5CbGVuZCkgewotICAgICAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5z
Zm9ybUtleWZyYW1lKGtleVRpbWUsIG9wZXJhdGlvbnMubGVha1B0cigpKSwgdGltaW5nRnVuY3Rp
b25UeXBlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdGVtcGxhdGUgPD4KLWJvb2wgYXBwZW5kS2V5ZnJhbWVXaXRoQ3VzdG9tQmV6aWVyVGlt
aW5nRnVuY3Rpb248VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUsIFdlYlRyYW5zZm9ybUtleWZyYW1l
LCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4oV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUq
IGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZh
bHVlLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogbGFzdFZhbHVlLCBkb3VibGUgeDEs
IGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6
ZSkKLXsKLSAgICBib29sIGNhbkJsZW5kID0gIWxhc3RWYWx1ZTsKLSAgICBPd25QdHI8V2ViVHJh
bnNmb3JtT3BlcmF0aW9ucz4gb3BlcmF0aW9ucyh0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKnZh
bHVlLT52YWx1ZSgpLCBib3hTaXplKSk7Ci0gICAgaWYgKCFvcGVyYXRpb25zKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFjYW5CbGVuZCkgewotICAgICAgICBPd25QdHI8V2ViVHJh
bnNmb3JtT3BlcmF0aW9ucz4gbGFzdE9wZXJhdGlvbnModG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25z
KCpsYXN0VmFsdWUtPnZhbHVlKCksIGJveFNpemUpKTsKLSAgICAgICAgaWYgKCFsYXN0T3BlcmF0
aW9ucykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FuQmxlbmQgPSBsYXN0
T3BlcmF0aW9ucy0+Y2FuQmxlbmRXaXRoKCpvcGVyYXRpb25zKTsKLSAgICB9Ci0gICAgaWYgKGNh
bkJsZW5kKSB7Ci0gICAgICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoa2V5VGlt
ZSwgb3BlcmF0aW9ucy5sZWFrUHRyKCkpLCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBW
YWx1ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgotUGFzc093blB0cjxXZWJLaXQ6Oldl
YkFuaW1hdGlvbj4gY3JlYXRlV2ViQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2
YWx1ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBpbnQgYW5pbWF0aW9uSWQsIGRv
dWJsZSB0aW1lT2Zmc2V0LCBDdXJ2ZSogY3VydmUsIFdlYktpdDo6V2ViQW5pbWF0aW9uOjpUYXJn
ZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSwgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQotewot
ICAgIGJvb2wgYWx0ZXJuYXRlID0gZmFsc2U7Ci0gICAgYm9vbCByZXZlcnNlID0gZmFsc2U7Ci0g
ICAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24tPmlzRGlyZWN0aW9uU2V0KCkpIHsKLSAgICAg
ICAgQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gYW5pbWF0aW9uLT5k
aXJlY3Rpb24oKTsKLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlv
bkRpcmVjdGlvbkFsdGVybmF0ZSB8fCBkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25E
aXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNlKQotICAgICAgICAgICAgYWx0ZXJuYXRlID0gdHJ1ZTsK
LSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvblJl
dmVyc2UgfHwgZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJu
YXRlUmV2ZXJzZSkKLSAgICAgICAgICAgIHJldmVyc2UgPSB0cnVlOwotICAgIH0KLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVMaXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHNp
emVfdCBpbmRleCA9IHJldmVyc2UgPyB2YWx1ZUxpc3Quc2l6ZSgpIC0gaSAtIDEgOiBpOwotICAg
ICAgICBjb25zdCBWYWx1ZSogb3JpZ2luYWxWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IFZhbHVl
Kj4odmFsdWVMaXN0LmF0KGluZGV4KSk7Ci0gICAgICAgIGNvbnN0IFZhbHVlKiBsYXN0T3JpZ2lu
YWxWYWx1ZSA9IDA7Ci0gICAgICAgIGlmICh2YWx1ZUxpc3Quc2l6ZSgpID4gMSAmJiAoKHJldmVy
c2UgJiYgaW5kZXggKyAxIDwgdmFsdWVMaXN0LnNpemUoKSkgfHwgKCFyZXZlcnNlICYmIGluZGV4
ID4gMCkpKQotICAgICAgICAgICAgbGFzdE9yaWdpbmFsVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25z
dCBWYWx1ZSo+KHZhbHVlTGlzdC5hdChyZXZlcnNlID8gaW5kZXggKyAxIDogaW5kZXggLSAxKSk7
Ci0KLSAgICAgICAgY29uc3QgVGltaW5nRnVuY3Rpb24qIG9yaWdpbmFsVGltaW5nRnVuY3Rpb24g
PSBvcmlnaW5hbFZhbHVlLT50aW1pbmdGdW5jdGlvbigpOwotCi0gICAgICAgIC8vIElmIHRoZXJl
IGhhc24ndCBiZWVuIGEgdGltaW5nIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleWZy
YW1lLCB1c2UgdGhlCi0gICAgICAgIC8vIGFuaW1hdGlvbidzIHRpbWluZyBmdW5jdGlvbiwgaWYg
d2UgaGF2ZSBvbmUuCi0gICAgICAgIGlmICghb3JpZ2luYWxUaW1pbmdGdW5jdGlvbiAmJiBhbmlt
YXRpb24tPmlzVGltaW5nRnVuY3Rpb25TZXQoKSkKLSAgICAgICAgICAgIG9yaWdpbmFsVGltaW5n
RnVuY3Rpb24gPSBhbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCk7Ci0KLSAgICAgICAg
Ly8gRWFzZSBpcyB0aGUgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24uCi0gICAgICAgIFdlYktpdDo6
V2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZSB0aW1pbmdGdW5jdGlvblR5cGUg
PSBXZWJLaXQ6OldlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlOwotCi0g
ICAgICAgIGJvb2wgaXNVc2luZ0N1c3RvbUJlemllclRpbWluZ0Z1bmN0aW9uID0gZmFsc2U7Ci0g
ICAgICAgIGRvdWJsZSB4MSA9IDA7Ci0gICAgICAgIGRvdWJsZSB5MSA9IDA7Ci0gICAgICAgIGRv
dWJsZSB4MiA9IDE7Ci0gICAgICAgIGRvdWJsZSB5MiA9IDE7Ci0KLSAgICAgICAgaWYgKG9yaWdp
bmFsVGltaW5nRnVuY3Rpb24pIHsKLSAgICAgICAgICAgIHN3aXRjaCAob3JpZ2luYWxUaW1pbmdG
dW5jdGlvbi0+dHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVw
c0Z1bmN0aW9uOgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3Igc3Rl
cHMgdGltaW5nIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb246Ci0gICAgICAgICAg
ICAgICAgdGltaW5nRnVuY3Rpb25UeXBlID0gV2ViS2l0OjpXZWJBbmltYXRpb25DdXJ2ZTo6VGlt
aW5nRnVuY3Rpb25UeXBlTGluZWFyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5jdGlvbjoKLSAgICAgICAgICAg
ICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBvcmlnaW5hbEJlemllclRpbWlu
Z0Z1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbio+
KG9yaWdpbmFsVGltaW5nRnVuY3Rpb24pOwotICAgICAgICAgICAgICAgIGlzVXNpbmdDdXN0b21C
ZXppZXJUaW1pbmdGdW5jdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgeDEgPSBvcmlnaW5h
bEJlemllclRpbWluZ0Z1bmN0aW9uLT54MSgpOwotICAgICAgICAgICAgICAgIHkxID0gb3JpZ2lu
YWxCZXppZXJUaW1pbmdGdW5jdGlvbi0+eTEoKTsKLSAgICAgICAgICAgICAgICB4MiA9IG9yaWdp
bmFsQmV6aWVyVGltaW5nRnVuY3Rpb24tPngyKCk7Ci0gICAgICAgICAgICAgICAgeTIgPSBvcmln
aW5hbEJlemllclRpbWluZ0Z1bmN0aW9uLT55MigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfSAvLyBzd2l0Y2gKLSAgICAgICAgfQotCi0gICAgICAgIGRvdWJsZSBkdXJh
dGlvbiA9IChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0R1cmF0aW9uU2V0KCkpID8gYW5pbWF0
aW9uLT5kdXJhdGlvbigpIDogMTsKLSAgICAgICAgZG91YmxlIGtleVRpbWUgPSBvcmlnaW5hbFZh
bHVlLT5rZXlUaW1lKCkgKiBkdXJhdGlvbjsKLQotICAgICAgICBpZiAocmV2ZXJzZSkKLSAgICAg
ICAgICAgIGtleVRpbWUgPSBkdXJhdGlvbiAtIGtleVRpbWU7Ci0KLSAgICAgICAgYm9vbCBhZGRl
ZEtleWZyYW1lID0gZmFsc2U7Ci0gICAgICAgIGlmIChpc1VzaW5nQ3VzdG9tQmV6aWVyVGltaW5n
RnVuY3Rpb24pCi0gICAgICAgICAgICBhZGRlZEtleWZyYW1lID0gYXBwZW5kS2V5ZnJhbWVXaXRo
Q3VzdG9tQmV6aWVyVGltaW5nRnVuY3Rpb248VmFsdWUsIEtleWZyYW1lLCBDdXJ2ZT4oY3VydmUs
IGtleVRpbWUsIG9yaWdpbmFsVmFsdWUsIGxhc3RPcmlnaW5hbFZhbHVlLCB4MSwgeTEsIHgyLCB5
MiwgYm94U2l6ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZGVkS2V5ZnJhbWUgPSBh
cHBlbmRLZXlmcmFtZVdpdGhTdGFuZGFyZFRpbWluZ0Z1bmN0aW9uPFZhbHVlLCBLZXlmcmFtZSwg
Q3VydmU+KGN1cnZlLCBrZXlUaW1lLCBvcmlnaW5hbFZhbHVlLCBsYXN0T3JpZ2luYWxWYWx1ZSwg
dGltaW5nRnVuY3Rpb25UeXBlLCBib3hTaXplKTsKLSAgICAgICAgaWYgKCFhZGRlZEtleWZyYW1l
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgT3duUHRyPFdlYktp
dDo6V2ViQW5pbWF0aW9uPiB3ZWJBbmltYXRpb24gPSBhZG9wdFB0cihQbGF0Zm9ybTo6Y3VycmVu
dCgpLT5jb21wb3NpdG9yU3VwcG9ydCgpLT5jcmVhdGVBbmltYXRpb24oKmN1cnZlLCB0YXJnZXRQ
cm9wZXJ0eSwgYW5pbWF0aW9uSWQpKTsKLQotICAgIGludCBpdGVyYXRpb25zID0gKGFuaW1hdGlv
biAmJiBhbmltYXRpb24tPmlzSXRlcmF0aW9uQ291bnRTZXQoKSkgPyBhbmltYXRpb24tPml0ZXJh
dGlvbkNvdW50KCkgOiAxOwotICAgIHdlYkFuaW1hdGlvbi0+c2V0SXRlcmF0aW9ucyhpdGVyYXRp
b25zKTsKLSAgICB3ZWJBbmltYXRpb24tPnNldEFsdGVybmF0ZXNEaXJlY3Rpb24oYWx0ZXJuYXRl
KTsKLQotICAgIC8vIElmIHRpbWVPZmZzZXQgPiAwLCB0aGVuIHRoZSBhbmltYXRpb24gaGFzIHN0
YXJ0ZWQgaW4gdGhlIHBhc3QuCi0gICAgd2ViQW5pbWF0aW9uLT5zZXRUaW1lT2Zmc2V0KHRpbWVP
ZmZzZXQpOwotCi0gICAgcmV0dXJuIHdlYkFuaW1hdGlvbi5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NP
d25QdHI8V2ViS2l0OjpXZWJBbmltYXRpb24+IGNyZWF0ZVdlYkFuaW1hdGlvbihjb25zdCBLZXlm
cmFtZVZhbHVlTGlzdCYgdmFsdWVzLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgaW50IGFu
aW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCwgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQot
ewotCi0KLSAgICBpZiAodmFsdWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybSkgewotICAgICAgICBPd25QdHI8V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+
IGN1cnZlID0gYWRvcHRQdHIoUGxhdGZvcm06OmN1cnJlbnQoKS0+Y29tcG9zaXRvclN1cHBvcnQo
KS0+Y3JlYXRlVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSk7Ci0gICAgICAgIHJldHVybiBjcmVh
dGVXZWJBbmltYXRpb248VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUsIFdlYlRyYW5zZm9ybUtleWZy
YW1lLCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4odmFsdWVzLCBhbmltYXRpb24sIGFuaW1h
dGlvbklkLCB0aW1lT2Zmc2V0LCBjdXJ2ZS5nZXQoKSwgV2ViS2l0OjpXZWJBbmltYXRpb246OlRh
cmdldFByb3BlcnR5VHJhbnNmb3JtLCBGbG9hdFNpemUoYm94U2l6ZSkpOwotICAgIH0KLQotICAg
IGlmICh2YWx1ZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkgewotICAg
ICAgICBPd25QdHI8V2ViRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihQbGF0
Zm9ybTo6Y3VycmVudCgpLT5jb21wb3NpdG9yU3VwcG9ydCgpLT5jcmVhdGVGbG9hdEFuaW1hdGlv
bkN1cnZlKCkpOwotICAgICAgICByZXR1cm4gY3JlYXRlV2ViQW5pbWF0aW9uPEZsb2F0QW5pbWF0
aW9uVmFsdWUsIFdlYkZsb2F0S2V5ZnJhbWUsIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU+KHZhbHVl
cywgYW5pbWF0aW9uLCBhbmltYXRpb25JZCwgdGltZU9mZnNldCwgY3VydmUuZ2V0KCksIFdlYktp
dDo6V2ViQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eU9wYWNpdHksIEZsb2F0U2l6ZSgpKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9u
VHJhbnNsYXRpb25VdGlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmgJKHJldmlzaW9uIDE0
NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1h
dGlvblRyYW5zbGF0aW9uVXRpbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIEFuaW1hdGlvblRyYW5zbGF0aW9uVXRpbF9oCi0jZGVmaW5lIEFuaW1hdGlvblRyYW5zbGF0
aW9uVXRpbF9oCi0KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLWNsYXNzIFdlYkFuaW1hdGlvbjsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBLZXlmcmFtZVZhbHVlTGlzdDsKLWNsYXNzIEFuaW1hdGlvbjsKLWNsYXNzIEZsb2F0U2l6
ZTsKLQotCi0vLyBUcmFuc2xhdGVzIFdlYkNvcmUgYW5pbWF0aW9uIGRhdGEgaW50byBhIFdlYkFu
aW1hdGlvbi4gSWYgd2UgYXJlIHVuYWJsZQotLy8gdG8gcGVyZm9ybSB0aGlzIHRyYW5zbGF0aW9u
LCB3ZSByZXR1cm4gbnVsbHB0ci4gVGhpcyBjYW4gaGFwcGVuIGlmCi0vLyAgIC0gYSBzdGVwcyB0
aW1pbmcgZnVuY3Rpb24gaXMgdXNlZCwKLS8vICAgLSBhIHByb3BlcnR5IG90aGVyIHRoYW4gQW5p
bWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwgb3IgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkg
aXMgYW5pbWF0ZWQsIG9yCi0vLyAgIC0gYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIGludm9sdmVzIGEg
bm9uLWludmVydGFibGUgdHJhbnNmb3JtLgotUGFzc093blB0cjxXZWJLaXQ6OldlYkFuaW1hdGlv
bj4gY3JlYXRlV2ViQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgQW5p
bWF0aW9uKiwgaW50IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZU9mZnNldCwgY29uc3QgRmxvYXRT
aXplJiBib3hTaXplKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQW5p
bWF0aW9uVHJhbnNsYXRpb25VdGlsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlk
Z2UuY3BwCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwxODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkNh
bnZhczJETGF5ZXJCcmlkZ2UuaCIKLQotI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJNYW5hZ2VyLmgi
Ci0jaW5jbHVkZSAiR3JDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0xheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJTa0RldmljZS5oIgotI2luY2x1ZGUgIlRyYWNl
RXZlbnQuaCIKLSNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxwdWJsaWMv
V2ViQ29tcG9zaXRvclN1cHBvcnQuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViR3JhcGhpY3NDb250
ZXh0M0QuaD4KLQotdXNpbmcgV2ViS2l0OjpXZWJFeHRlcm5hbFRleHR1cmVMYXllcjsKLXVzaW5n
IFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q7Ci11c2luZyBXZWJLaXQ6OldlYlRleHR1cmVV
cGRhdGVyOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNhbnZhczJETGF5ZXJCcmlkZ2U6OkNh
bnZhczJETGF5ZXJCcmlkZ2UoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgVGhyZWFkTW9kZSB0aHJlYWRNb2RlLCB1bnNpZ25lZCB0ZXh0
dXJlSWQpCi0gICAgOiBtX2JhY2tCdWZmZXJUZXh0dXJlKHRleHR1cmVJZCkKLSAgICAsIG1fc2l6
ZShzaXplKQotICAgICwgbV9jYW52YXMoMCkKLSAgICAsIG1fY29udGV4dChjb250ZXh0KQotICAg
ICwgbV9ieXRlc0FsbG9jYXRlZCgwKQotICAgICwgbV9kaWRSZWNvcmREcmF3Q29tbWFuZChmYWxz
ZSkKLSAgICAsIG1fZnJhbWVzUGVuZGluZygwKQotICAgICwgbV9uZXh0KDApCi0gICAgLCBtX3By
ZXYoMCkKLXsKLSAgICAvLyBVc2VkIGJ5IGJyb3dzZXIgdGVzdHMgdG8gZGV0ZWN0IHRoZSB1c2Ug
b2YgYSBDYW52YXMyRExheWVyQnJpZGdlLgotICAgIFRSQUNFX0VWRU5UX0lOU1RBTlQwKCJ0ZXN0
X2dwdSIsICJDYW52YXMyRExheWVyQnJpZGdlQ3JlYXRpb24iKTsKLQotICAgIG1fbGF5ZXIgPSBh
ZG9wdFB0cihXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNvbXBvc2l0b3JTdXBwb3J0KCkt
PmNyZWF0ZUV4dGVybmFsVGV4dHVyZUxheWVyKHRoaXMpKTsKLSAgICBtX2xheWVyLT5zZXRUZXh0
dXJlSWQodGV4dHVyZUlkKTsKLSAgICBtX2xheWVyLT5zZXRSYXRlTGltaXRDb250ZXh0KHRocmVh
ZE1vZGUgPT0gU2luZ2xlVGhyZWFkKTsKLSAgICBHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlZ2lz
dGVyQ29udGVudHNMYXllcihtX2xheWVyLT5sYXllcigpKTsKLX0KLQotQ2FudmFzMkRMYXllckJy
aWRnZTo6fkNhbnZhczJETGF5ZXJCcmlkZ2UoKQotewotICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6dW5yZWdpc3RlckNvbnRlbnRzTGF5ZXIobV9sYXllci0+bGF5ZXIoKSk7Ci0gICAgQ2FudmFz
MkRMYXllck1hbmFnZXI6OmdldCgpLmxheWVyVG9CZURlc3Ryb3llZCh0aGlzKTsKLSAgICBpZiAo
bV9jYW52YXMpCi0gICAgICAgIG1fY2FudmFzLT5zZXROb3RpZmljYXRpb25DbGllbnQoMCk7Ci0g
ICAgbV9sYXllci0+c2V0VGV4dHVyZUlkKDApOwotfQotCi12b2lkIENhbnZhczJETGF5ZXJCcmlk
Z2U6OmxpbWl0UGVuZGluZ0ZyYW1lcygpCi17Ci0gICAgaWYgKG1fZGlkUmVjb3JkRHJhd0NvbW1h
bmQpIHsKLSAgICAgICAgbV9mcmFtZXNQZW5kaW5nKys7Ci0gICAgICAgIG1fZGlkUmVjb3JkRHJh
d0NvbW1hbmQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1fZnJhbWVzUGVuZGluZyA+IDEpCi0gICAg
ICAgICAgICBmbHVzaCgpOwotICAgIH0KLX0KLQotdm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpw
cmVwYXJlRm9yRHJhdygpCi17Ci0gICAgbV9sYXllci0+d2lsbE1vZGlmeVRleHR1cmUoKTsKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotfQotCi12b2lkIENhbnZhczJETGF5
ZXJCcmlkZ2U6OnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKHNpemVfdCBieXRl
c0FsbG9jYXRlZCkKLXsKLSAgICBpbnRwdHJfdCBkZWx0YSA9IChpbnRwdHJfdClieXRlc0FsbG9j
YXRlZCAtIChpbnRwdHJfdCltX2J5dGVzQWxsb2NhdGVkOwotICAgIG1fYnl0ZXNBbGxvY2F0ZWQg
PSBieXRlc0FsbG9jYXRlZDsKLSAgICBDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubGF5ZXJB
bGxvY2F0ZWRTdG9yYWdlQ2hhbmdlZCh0aGlzLCBkZWx0YSk7Ci19Ci0KLXNpemVfdCBDYW52YXMy
RExheWVyQnJpZGdlOjpzdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nKCkKLXsKLSAgICByZXR1
cm4gbV9jYW52YXMgPyBtX2NhbnZhcy0+c3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZygpIDog
MDsKLX0KLQotdm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpmbHVzaGVkRHJhd0NvbW1hbmRzKCkK
LXsKLSAgICBzdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nQ2hhbmdlZChzdG9yYWdlQWxsb2Nh
dGVkRm9yUmVjb3JkaW5nKCkpOwotICAgIG1fZnJhbWVzUGVuZGluZyA9IDA7Ci19Ci0KLXZvaWQg
Q2FudmFzMkRMYXllckJyaWRnZTo6c2tpcHBlZFBlbmRpbmdEcmF3Q29tbWFuZHMoKQotewotICAg
IGZsdXNoZWREcmF3Q29tbWFuZHMoKTsKLX0KLQotc2l6ZV90IENhbnZhczJETGF5ZXJCcmlkZ2U6
OmZyZWVNZW1vcnlJZlBvc3NpYmxlKHNpemVfdCBieXRlc1RvRnJlZSkKLXsKLSAgICBzaXplX3Qg
Ynl0ZXNGcmVlZCA9IG1fY2FudmFzID8gbV9jYW52YXMtPmZyZWVNZW1vcnlJZlBvc3NpYmxlKGJ5
dGVzVG9GcmVlKSA6IDA7Ci0gICAgaWYgKGJ5dGVzRnJlZWQpCi0gICAgICAgIENhbnZhczJETGF5
ZXJNYW5hZ2VyOjpnZXQoKS5sYXllckFsbG9jYXRlZFN0b3JhZ2VDaGFuZ2VkKHRoaXMsIC0oKGlu
dHB0cl90KWJ5dGVzRnJlZWQpKTsKLSAgICBtX2J5dGVzQWxsb2NhdGVkIC09IGJ5dGVzRnJlZWQ7
Ci0gICAgcmV0dXJuIGJ5dGVzRnJlZWQ7Ci19Ci0KLXZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6
Zmx1c2goKQotewotICAgIGlmIChtX2NhbnZhcyAmJiBtX2NhbnZhcy0+aGFzUGVuZGluZ0NvbW1h
bmRzKCkpCi0gICAgICAgIG1fY2FudmFzLT5mbHVzaCgpOwotfQotCi1Ta0NhbnZhcyogQ2FudmFz
MkRMYXllckJyaWRnZTo6c2tDYW52YXMoU2tEZXZpY2UqIGRldmljZSkKLXsKLSAgICBBU1NFUlQo
IW1fY2FudmFzKTsKLSAgICBtX2NhbnZhcyA9IG5ldyBTa0RlZmVycmVkQ2FudmFzKGRldmljZSk7
Ci0gICAgbV9jYW52YXMtPnNldE5vdGlmaWNhdGlvbkNsaWVudCh0aGlzKTsKLSAgICByZXR1cm4g
bV9jYW52YXM7Ci19Ci0KLQotdW5zaWduZWQgQ2FudmFzMkRMYXllckJyaWRnZTo6cHJlcGFyZVRl
eHR1cmUoV2ViVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIpCi17Ci0gICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChtX2NhbnZhcykgewotICAgICAgICBUUkFDRV9F
VkVOVDAoImNjIiwgIkNhbnZhczJETGF5ZXJCcmlkZ2U6OlNrQ2FudmFzOjpmbHVzaCIpOwotICAg
ICAgICBtX2NhbnZhcy0+Zmx1c2goKTsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPmZsdXNoKCk7
Ci0KLSAgICBpZiAobV9jYW52YXMpIHsKLSAgICAgICAgLy8gTm90aWZ5IHNraWEgdGhhdCB0aGUg
c3RhdGUgb2YgdGhlIGJhY2tpbmcgc3RvcmUgdGV4dHVyZSBvYmplY3Qgd2lsbCBiZSB0b3VjaGVk
IGJ5IHRoZSBjb21wb3NpdG9yCi0gICAgICAgIEdyUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQg
PSByZWludGVycHJldF9jYXN0PEdyUmVuZGVyVGFyZ2V0Kj4obV9jYW52YXMtPmdldERldmljZSgp
LT5hY2Nlc3NSZW5kZXJUYXJnZXQoKSk7Ci0gICAgICAgIGlmIChyZW5kZXJUYXJnZXQpCi0gICAg
ICAgICAgICByZW5kZXJUYXJnZXQtPmFzVGV4dHVyZSgpLT5pbnZhbGlkYXRlQ2FjaGVkU3RhdGUo
KTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fYmFja0J1ZmZlclRleHR1cmU7Ci19Ci0KLVdlYkdyYXBo
aWNzQ29udGV4dDNEKiBDYW52YXMyRExheWVyQnJpZGdlOjpjb250ZXh0KCkKLXsKLSAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0Qo
bV9jb250ZXh0LmdldCgpKTsKLX0KLQotV2ViS2l0OjpXZWJMYXllciogQ2FudmFzMkRMYXllckJy
aWRnZTo6bGF5ZXIoKQotewotICAgIHJldHVybiBtX2xheWVyLT5sYXllcigpOwotfQotCi12b2lk
IENhbnZhczJETGF5ZXJCcmlkZ2U6OmNvbnRleHRBY3F1aXJlZCgpCi17Ci0gICAgQ2FudmFzMkRM
YXllck1hbmFnZXI6OmdldCgpLmxheWVyRGlkRHJhdyh0aGlzKTsKLSAgICBtX2RpZFJlY29yZERy
YXdDb21tYW5kID0gdHJ1ZTsKLX0KLQotdW5zaWduZWQgQ2FudmFzMkRMYXllckJyaWRnZTo6YmFj
a0J1ZmZlclRleHR1cmUoKQotewotICAgIGNvbnRleHRBY3F1aXJlZCgpOwotICAgIGlmIChtX2Nh
bnZhcykKLSAgICAgICAgbV9jYW52YXMtPmZsdXNoKCk7Ci0gICAgbV9jb250ZXh0LT5mbHVzaCgp
OwotICAgIHJldHVybiBtX2JhY2tCdWZmZXJUZXh0dXJlOwotfQotCi19CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllckJyaWRnZS5oCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENhbnZhczJETGF5ZXJC
cmlkZ2VfaAotI2RlZmluZSBDYW52YXMyRExheWVyQnJpZGdlX2gKLQotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlNrRGVmZXJy
ZWRDYW52YXMuaCIKLSNpbmNsdWRlIDxwdWJsaWMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXIuaD4K
LSNpbmNsdWRlIDxwdWJsaWMvV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJDbGllbnQuaD4KLSNpbmNs
dWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdl
YkdyYXBoaWNzQ29udGV4dDNEOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENh
bnZhczJETGF5ZXJCcmlkZ2UgOiBwdWJsaWMgV2ViS2l0OjpXZWJFeHRlcm5hbFRleHR1cmVMYXll
ckNsaWVudCwgcHVibGljIFNrRGVmZXJyZWRDYW52YXM6Ok5vdGlmaWNhdGlvbkNsaWVudCwgcHVi
bGljIERvdWJseUxpbmtlZExpc3ROb2RlPENhbnZhczJETGF5ZXJCcmlkZ2U+IHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDYW52YXMyRExheWVyQnJpZGdlKTsKLXB1YmxpYzoKLSAgICBlbnVt
IFRocmVhZE1vZGUgewotICAgICAgICBTaW5nbGVUaHJlYWQsCi0gICAgICAgIFRocmVhZGVkCi0g
ICAgfTsKLQotICAgIHN0YXRpYyBQYXNzT3duUHRyPENhbnZhczJETGF5ZXJCcmlkZ2U+IGNyZWF0
ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBz
aXplLCBUaHJlYWRNb2RlIHRocmVhZGluZywgdW5zaWduZWQgdGV4dHVyZUlkKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYW52YXMyRExheWVyQnJpZGdlKGNvbnRleHQsIHNp
emUsIHRocmVhZGluZywgdGV4dHVyZUlkKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+Q2FudmFz
MkRMYXllckJyaWRnZSgpOwotCi0gICAgLy8gV2ViS2l0OjpXZWJFeHRlcm5hbFRleHR1cmVMYXll
ckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHByZXBhcmVUZXh0
dXJlKFdlYktpdDo6V2ViVGV4dHVyZVVwZGF0ZXImKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdl
YktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSBPVkVSUklERTsKLQotICAgIC8v
IFNrRGVmZXJyZWRDYW52YXM6Ok5vdGlmaWNhdGlvbkNsaWVudCBpbXBsZW1lbnRhdGlvbgotICAg
IHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRHJhdygpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBzdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nQ2hhbmdlZChzaXplX3QpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBmbHVzaGVkRHJhd0NvbW1hbmRzKCkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIHNraXBwZWRQZW5kaW5nRHJhd0NvbW1hbmRzKCkgT1ZFUlJJREU7Ci0KLSAgICAv
LyBNZXRob2RzIHVzZWQgYnkgQ2FudmFzMkRMYXllck1hbmFnZXIKLSAgICB2aXJ0dWFsIHNpemVf
dCBmcmVlTWVtb3J5SWZQb3NzaWJsZShzaXplX3QpOyAvLyB2aXJ0dWFsIGZvciBtb2NraW5nCi0g
ICAgdmlydHVhbCB2b2lkIGZsdXNoKCk7IC8vIHZpcnR1YWwgZm9yIG1vY2tpbmcKLSAgICB2aXJ0
dWFsIHNpemVfdCBzdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nKCk7IC8vIHZpcnR1YWwgZm9y
IGZha2luZwotICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpIGNvbnN0IHtyZXR1cm4gbV9ieXRl
c0FsbG9jYXRlZDt9Ci0gICAgdm9pZCBsaW1pdFBlbmRpbmdGcmFtZXMoKTsKLQotICAgIFNrQ2Fu
dmFzKiBza0NhbnZhcyhTa0RldmljZSopOwotICAgIFdlYktpdDo6V2ViTGF5ZXIqIGxheWVyKCk7
Ci0gICAgdm9pZCBjb250ZXh0QWNxdWlyZWQoKTsKLQotICAgIHVuc2lnbmVkIGJhY2tCdWZmZXJU
ZXh0dXJlKCk7Ci0KLXByb3RlY3RlZDoKLSAgICBDYW52YXMyRExheWVyQnJpZGdlKFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBjb25zdCBJbnRTaXplJiwgVGhyZWFkTW9kZSwgdW5zaWdu
ZWQgdGV4dHVyZUlkKTsKLQotICAgIHVuc2lnbmVkIG1fYmFja0J1ZmZlclRleHR1cmU7Ci0gICAg
SW50U2l6ZSBtX3NpemU7Ci0gICAgU2tEZWZlcnJlZENhbnZhcyogbV9jYW52YXM7Ci0gICAgT3du
UHRyPFdlYktpdDo6V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXI+IG1fbGF5ZXI7Ci0gICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7Ci0gICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0
ZWQ7Ci0gICAgYm9vbCBtX2RpZFJlY29yZERyYXdDb21tYW5kOwotICAgIGludCBtX2ZyYW1lc1Bl
bmRpbmc7Ci0KLSAgICBmcmllbmQgY2xhc3MgV1RGOjpEb3VibHlMaW5rZWRMaXN0Tm9kZTxDYW52
YXMyRExheWVyQnJpZGdlPjsKLSAgICBDYW52YXMyRExheWVyQnJpZGdlKiBtX25leHQ7Ci0gICAg
Q2FudmFzMkRMYXllckJyaWRnZSogbV9wcmV2OwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5h
Z2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5h
Z2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjIgKzAsMCBAQAotLyoKLUNvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotYXJlIG1ldDoKLTEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLUVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLURJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLUxPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgotQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi1TT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJDYW52YXMyRExheWVyTWFuYWdlci5oIgotCi0jaW5j
bHVkZSA8cHVibGljL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgot
Ci11c2luZyBXZWJLaXQ6OldlYlRocmVhZDsKLQotbmFtZXNwYWNlIHsKLWVudW0gewotICAgIERl
ZmF1bHRNYXhCeXRlc0FsbG9jYXRlZCA9IDY0KjEwMjQqMTAyNCwKLSAgICBEZWZhdWx0VGFyZ2V0
Qnl0ZXNBbGxvY2F0ZWQgPSAxNioxMDI0KjEwMjQsCi19OwotfQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLUNhbnZhczJETGF5ZXJNYW5hZ2VyOjpDYW52YXMyRExheWVyTWFuYWdlcigpCi0gICAg
OiBtX2J5dGVzQWxsb2NhdGVkKDApCi0gICAgLCBtX21heEJ5dGVzQWxsb2NhdGVkKERlZmF1bHRN
YXhCeXRlc0FsbG9jYXRlZCkKLSAgICAsIG1fdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQoRGVmYXVsdFRh
cmdldEJ5dGVzQWxsb2NhdGVkKQotICAgICwgbV90YXNrT2JzZXJ2ZXJBY3RpdmUoZmFsc2UpCi17
Ci19Ci0KLUNhbnZhczJETGF5ZXJNYW5hZ2VyOjp+Q2FudmFzMkRMYXllck1hbmFnZXIoKQotewot
ICAgIEFTU0VSVCghbV9ieXRlc0FsbG9jYXRlZCk7Ci0gICAgQVNTRVJUKCFtX2xheWVyTGlzdC5o
ZWFkKCkpOwotICAgIEFTU0VSVCghbV90YXNrT2JzZXJ2ZXJBY3RpdmUpOwotfQotCi12b2lkIENh
bnZhczJETGF5ZXJNYW5hZ2VyOjppbml0KHNpemVfdCBtYXhCeXRlc0FsbG9jYXRlZCwgc2l6ZV90
IHRhcmdldEJ5dGVzQWxsb2NhdGVkKQotewotICAgIEFTU0VSVChtYXhCeXRlc0FsbG9jYXRlZCA+
PSB0YXJnZXRCeXRlc0FsbG9jYXRlZCk7Ci0gICAgbV9tYXhCeXRlc0FsbG9jYXRlZCA9IG1heEJ5
dGVzQWxsb2NhdGVkOwotICAgIG1fdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQgPSB0YXJnZXRCeXRlc0Fs
bG9jYXRlZDsKLX0KLQotQ2FudmFzMkRMYXllck1hbmFnZXImIENhbnZhczJETGF5ZXJNYW5hZ2Vy
OjpnZXQoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ2FudmFzMkRMYXllck1hbmFnZXIs
IG1hbmFnZXIsICgpKTsKLSAgICByZXR1cm4gbWFuYWdlcjsKLX0KLQotdm9pZCBDYW52YXMyRExh
eWVyTWFuYWdlcjo6d2lsbFByb2Nlc3NUYXNrKCkKLXsKLX0KLQotdm9pZCBDYW52YXMyRExheWVy
TWFuYWdlcjo6ZGlkUHJvY2Vzc1Rhc2soKQotewotICAgIC8vIENhbGxlZCBhZnRlciB0aGUgc2Ny
aXB0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgZnJhbWUgaGFzIGJlZW4gcHJvY2Vzc2VkLgotICAg
IEFTU0VSVChtX3Rhc2tPYnNlcnZlckFjdGl2ZSk7Ci0gICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3Vy
cmVudCgpLT5jdXJyZW50VGhyZWFkKCktPnJlbW92ZVRhc2tPYnNlcnZlcih0aGlzKTsKLSAgICBt
X3Rhc2tPYnNlcnZlckFjdGl2ZSA9IGZhbHNlOwotICAgIGZvciAoQ2FudmFzMkRMYXllckJyaWRn
ZSogbGF5ZXIgPSBtX2xheWVyTGlzdC5oZWFkKCk7IGxheWVyOyBsYXllciA9IGxheWVyLT5uZXh0
KCkpCi0gICAgICAgIGxheWVyLT5saW1pdFBlbmRpbmdGcmFtZXMoKTsKLX0KLQotdm9pZCBDYW52
YXMyRExheWVyTWFuYWdlcjo6bGF5ZXJEaWREcmF3KENhbnZhczJETGF5ZXJCcmlkZ2UqIGxheWVy
KQotewotICAgIGlmIChpc0luTGlzdChsYXllcikpIHsKLSAgICAgICAgaWYgKGxheWVyICE9IG1f
bGF5ZXJMaXN0LmhlYWQoKSkgewotICAgICAgICAgICAgbV9sYXllckxpc3QucmVtb3ZlKGxheWVy
KTsKLSAgICAgICAgICAgIG1fbGF5ZXJMaXN0LnB1c2gobGF5ZXIpOyAvLyBTZXQgYXMgTVJVCi0g
ICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgYWRkTGF5ZXJUb0xpc3QobGF5ZXIpOwotCi0g
ICAgaWYgKCFtX3Rhc2tPYnNlcnZlckFjdGl2ZSkgewotICAgICAgICBtX3Rhc2tPYnNlcnZlckFj
dGl2ZSA9IHRydWU7Ci0gICAgICAgIC8vIFNjaGVkdWxlIGEgY2FsbCB0byBkaWRQcm9jZXNzVGFz
aygpIGFmdGVyIGNvbXBsZXRpb24gb2YgdGhlIGN1cnJlbnQgc2NyaXB0IHRhc2suCi0gICAgICAg
IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5hZGRUYXNrT2Jz
ZXJ2ZXIodGhpcyk7Ci0gICAgfQotfQotCi12b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjphZGRM
YXllclRvTGlzdChDYW52YXMyRExheWVyQnJpZGdlKiBsYXllcikKLXsKLSAgICBBU1NFUlQoIWlz
SW5MaXN0KGxheWVyKSk7Ci0gICAgbV9ieXRlc0FsbG9jYXRlZCArPSBsYXllci0+Ynl0ZXNBbGxv
Y2F0ZWQoKTsKLSAgICBtX2xheWVyTGlzdC5wdXNoKGxheWVyKTsgLy8gU2V0IGFzIE1SVQotfQot
Ci12b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpsYXllckFsbG9jYXRlZFN0b3JhZ2VDaGFuZ2Vk
KENhbnZhczJETGF5ZXJCcmlkZ2UqIGxheWVyLCBpbnRwdHJfdCBkZWx0YUJ5dGVzKQotewotICAg
IGlmICghaXNJbkxpc3QobGF5ZXIpKQotICAgICAgICBhZGRMYXllclRvTGlzdChsYXllcik7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVCgoaW50cHRyX3QpbV9ieXRlc0FsbG9jYXRlZCArIGRl
bHRhQnl0ZXMgPj0gMCk7IAotICAgICAgICBtX2J5dGVzQWxsb2NhdGVkID0gKGludHB0cl90KW1f
Ynl0ZXNBbGxvY2F0ZWQgKyBkZWx0YUJ5dGVzOwotICAgIH0KLSAgICBpZiAoZGVsdGFCeXRlcyA+
IDApCi0gICAgICAgIGZyZWVNZW1vcnlJZk5lY2Vzc2FyeSgpOwotfQotCi12b2lkIENhbnZhczJE
TGF5ZXJNYW5hZ2VyOjpsYXllclRvQmVEZXN0cm95ZWQoQ2FudmFzMkRMYXllckJyaWRnZSogbGF5
ZXIpCi17Ci0gICAgaWYgKGlzSW5MaXN0KGxheWVyKSkKLSAgICAgICAgcmVtb3ZlTGF5ZXJGcm9t
TGlzdChsYXllcik7Ci19Ci0KLXZvaWQgQ2FudmFzMkRMYXllck1hbmFnZXI6OmZyZWVNZW1vcnlJ
Zk5lY2Vzc2FyeSgpIAotewotICAgIGlmIChtX2J5dGVzQWxsb2NhdGVkID4gbV9tYXhCeXRlc0Fs
bG9jYXRlZCkgewotICAgICAgICAvLyBQYXNzIDE6IEZyZWUgbWVtb3J5IGZyb20gY2FjaGVzCi0g
ICAgICAgIENhbnZhczJETGF5ZXJCcmlkZ2UqIGxheWVyID0gbV9sYXllckxpc3QudGFpbCgpOyAv
LyBMUlUKLSAgICAgICAgd2hpbGUgKG1fYnl0ZXNBbGxvY2F0ZWQgPiBtX3RhcmdldEJ5dGVzQWxs
b2NhdGVkICYmIGxheWVyKSB7Ci0gICAgICAgICAgICBsYXllci0+ZnJlZU1lbW9yeUlmUG9zc2li
bGUobV9ieXRlc0FsbG9jYXRlZCAtIG1fdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQpOwotICAgICAgICAg
ICAgbGF5ZXIgPSBsYXllci0+cHJldigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUGFzcyAy
OiBGbHVzaCBjYW52YXNlcwotICAgICAgICBDYW52YXMyRExheWVyQnJpZGdlKiBsZWFzdFJlY2Vu
dGx5VXNlZExheWVyID0gbV9sYXllckxpc3QudGFpbCgpOwotICAgICAgICB3aGlsZSAobV9ieXRl
c0FsbG9jYXRlZCA+IG1fdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQgJiYgbGVhc3RSZWNlbnRseVVzZWRM
YXllcikgewotICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWRMYXllci0+Zmx1c2goKTsKLSAg
ICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkTGF5ZXItPmZyZWVNZW1vcnlJZlBvc3NpYmxlKH4w
KTsKLSAgICAgICAgICAgIHJlbW92ZUxheWVyRnJvbUxpc3QobGVhc3RSZWNlbnRseVVzZWRMYXll
cik7Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZExheWVyID0gbV9sYXllckxpc3QudGFp
bCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpy
ZW1vdmVMYXllckZyb21MaXN0KENhbnZhczJETGF5ZXJCcmlkZ2UqIGxheWVyKQotewotICAgIEFT
U0VSVChpc0luTGlzdChsYXllcikpOwotICAgIG1fYnl0ZXNBbGxvY2F0ZWQgLT0gbGF5ZXItPmJ5
dGVzQWxsb2NhdGVkKCk7Ci0gICAgbV9sYXllckxpc3QucmVtb3ZlKGxheWVyKTsKLSAgICBsYXll
ci0+c2V0TmV4dCgwKTsKLSAgICBsYXllci0+c2V0UHJldigwKTsKLX0KLQotYm9vbCBDYW52YXMy
RExheWVyTWFuYWdlcjo6aXNJbkxpc3QoQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIpCi17Ci0g
ICAgcmV0dXJuIGxheWVyLT5wcmV2KCkgfHwgbV9sYXllckxpc3QuaGVhZCgpID09IGxheWVyOwot
fQotCi19Ci0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFnZXIuaAkocmV2aXNpb24g
MTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzMkRMYXllck1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgot
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi1hcmUgbWV0OgotMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gICAgCi1USElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKLUVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLURJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLUxPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgotQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi1T
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSovCi0KLSNpZm5kZWYgQ2FudmFzMkRMYXllck1hbmFnZXJfaAotI2RlZmluZSBDYW52YXMy
RExheWVyTWFuYWdlcl9oCi0KLSNpbmNsdWRlICJDYW52YXMyRExheWVyQnJpZGdlLmgiCi0jaW5j
bHVkZSA8cHVibGljL1dlYlRocmVhZC5oPgotCi1jbGFzcyBDYW52YXMyRExheWVyTWFuYWdlclRl
c3Q7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FudmFzMkRMYXllck1hbmFnZXIg
OiBwdWJsaWMgV2ViS2l0OjpXZWJUaHJlYWQ6OlRhc2tPYnNlcnZlciB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIENhbnZhczJETGF5ZXJNYW5hZ2VyJiBnZXQoKTsKLSAgICB2b2lkIGluaXQoc2l6ZV90
IG1heEJ5dGVzQWxsb2NhdGVkLCBzaXplX3QgdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQpOwotICAgIHZp
cnR1YWwgfkNhbnZhczJETGF5ZXJNYW5hZ2VyKCk7Ci0KLSAgICB2b2lkIGxheWVyQWxsb2NhdGVk
U3RvcmFnZUNoYW5nZWQoQ2FudmFzMkRMYXllckJyaWRnZSosIGludHB0cl90IGRlbHRhQnl0ZXMp
OwotICAgIHZvaWQgbGF5ZXJEaWREcmF3KENhbnZhczJETGF5ZXJCcmlkZ2UqKTsKLSAgICB2b2lk
IGxheWVyVG9CZURlc3Ryb3llZChDYW52YXMyRExheWVyQnJpZGdlKik7Ci1wcml2YXRlOgotICAg
IENhbnZhczJETGF5ZXJNYW5hZ2VyKCk7Ci0KLSAgICAvLyBpbnRlcm5hbCBtZXRob2RzCi0gICAg
dm9pZCBmcmVlTWVtb3J5SWZOZWNlc3NhcnkoKTsKLSAgICBib29sIGlzSW5MaXN0KENhbnZhczJE
TGF5ZXJCcmlkZ2UqKTsKLSAgICB2b2lkIGFkZExheWVyVG9MaXN0KENhbnZhczJETGF5ZXJCcmlk
Z2UqKTsKLSAgICB2b2lkIHJlbW92ZUxheWVyRnJvbUxpc3QoQ2FudmFzMkRMYXllckJyaWRnZSop
OwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUHJvY2Vzc1Rhc2soKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkUHJvY2Vzc1Rhc2soKSBPVkVSUklERTsKLQotICAgIHNpemVfdCBtX2J5dGVz
QWxsb2NhdGVkOwotICAgIHNpemVfdCBtX21heEJ5dGVzQWxsb2NhdGVkOwotICAgIHNpemVfdCBt
X3RhcmdldEJ5dGVzQWxsb2NhdGVkOwotICAgIGJvb2wgbV90YXNrT2JzZXJ2ZXJBY3RpdmU7Ci0g
ICAgRG91Ymx5TGlua2VkTGlzdDxDYW52YXMyRExheWVyQnJpZGdlPiBtX2xheWVyTGlzdDsKLQot
ICAgIGZyaWVuZCBjbGFzcyA6OkNhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdDsgLy8gZm9yIHVuaXQg
dGVzdGluZwotfTsKLQotfQotCi0jZW5kaWYKLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Dcm9zc1Byb2Nl
c3NGb250TG9hZGluZy5oCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Dcm9zc1Byb2Nlc3NGb250TG9hZGluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5n
X2gKLSNkZWZpbmUgQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmdfaAotCi0jaW1wb3J0IDx3dGYvUmVm
Q291bnRlZC5oPgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLXR5cGVkZWYgc3RydWN0IENHRm9udCogQ0dGb250UmVmOwotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLS8vIE1lbW9yeUFjdGl2YXRlZEZvbnQgZW5jYXBzdWxhdGVzIGEg
Zm9udCBsb2FkZWQgZnJvbSBhbm90aGVyIHByb2Nlc3MgYW5kCi0vLyBhY3RpdmF0ZWQgZnJvbSBt
ZW1vcnkuCi0vLwotLy8gUmVzcG9uc2liaWxpdGllczoKLS8vICogSG9sZGVyIGZvciB0aGUgQ0dG
b250UmVmICYgQVRTRm9udFJlZiBiZWxvbmdpbmcgdG8gdGhlIGFjdGl2YXRlZCBmb250LgotLy8g
KiBSZXNwb25zaWJsZSBmb3IgdW5sb2FkaW5nIHRoZSBmb250IGNvbnRhaW5lciB3aGVuIGRvbmUu
Ci0vLwotLy8gTWVtb3J5IE1hbmFnZW1lbnQ6Ci0vLyBUaGUgY2xhc3MgaXMgcmVmZXJlbmNlIGNv
dW50ZWQsIHdpdGggZWFjaCBpbnN0YW5jZSBvZiBGb250UGxhdGZvcm1EYXRhIHRoYXQKLS8vIHVz
ZXMgdGhpcyBjbGFzcyBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIGl0LgotLy8gRW50cmllcyBhcmUg
a2VwdCB0cmFjayBvZiBpbnRlcm5hbGx5IGluIGEgaGFzaCB0byBhbGxvdyBxdWljayBsb29rdXAK
LS8vIG9mIGV4aXN0aW5nIGluc3RhbmNlcyBmb3IgcmV1c2U6Ci0vLyAtIGZvbnRDYWNoZUJ5U3Jj
Rm9udENvbnRhaW5lclJlZigpIC0ga2V5IGlzIHRoZSBBVFNGb250Q29udGFpbmVyUmVmCi0vLyAg
IGNvcnJlc3BvbmRpbmcgdG8gdGhlICpvcmlnaW5hbCBpbi1wcm9jZXNzIE5TRm9udCogd2hvc2Ug
bG9hZGluZyB3YXMgYmxvY2tlZAotLy8gICBieSB0aGUgc2FuZGJveC4KLS8vICAgVGhpcyBpcyBu
ZWVkZWQgdG8gYWxsb3cgbG9va3VwIG9mIGEgcHJlLWV4aXN0aW5nIE1lbW9yeUFjdGl2YXRlZEZv
bnQgd2hlbgotLy8gICBjcmVhdGluZyBhIG5ldyBGb250UGxhdGZvcm1EYXRhIG9iamVjdC4KLS8v
Ci0vLyBBc3N1bXB0aW9uczoKLS8vIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgYW4gQVRTRm9udFJl
ZiBpcyBhIHVuaXF1ZSBpZGVudGlmaWVyIHRpZWQgdG8gYW4KLS8vIGFjdGl2YXRlZCBmb250LiAg
aS5lLiBBZnRlciB3ZSBhY3RpdmF0ZSBhIGZvbnQsIGl0cyBBVFNGb250UmVmIGRvZXNuJ3QKLS8v
IGNoYW5nZS4KLS8vIEl0IGFsc28gYXNzdW1lcyB0aGF0IHRoZSBBVFNGb25jb250YWluZXJSZWYg
Zm9yIHR3byBpbi1tZW1vcnkgTlNGb250cyB0aGF0Ci0vLyBjb3JyZXNwb25kIHRvIHRoZSBzYW1l
IG9uLWRpc2sgZm9udCBmaWxlIGFyZSBhbHdheXMgdGhlIHNhbWUgYW5kIGRvbid0IGNoYW5nZQot
Ly8gd2l0aCB0aW1lLgotLy8KLS8vIEZsdXNoaW5nIGNhY2hlczoKLS8vIFdoZW4gdGhlIHN5c3Rl
bSBub3RpZmllcyB1cyBvZiBhIHN5c3RlbSBmb250IGNhY2hlIGZsdXNoLCBhbGwgRm9udERhdGFD
YWNoZQotLy8gb2JqZWN0cyBhcmUgZGVzdHJveWVkLiAgVGhpcyBzaG91bGQgaW4gdHVybiBkZXJl
ZmVyZW5jZSBhbGwKLS8vIE1lbW9yeUFjdGl2YXRlZEZvbnRzIGFuZCB0aHVzIHVubG9hZCBhbGwg
aW4tbWVtb3J5IGZvbnRzLgotY2xhc3MgTWVtb3J5QWN0aXZhdGVkRm9udCA6IHB1YmxpYyBSZWZD
b3VudGVkPE1lbW9yeUFjdGl2YXRlZEZvbnQ+IHsKLXB1YmxpYzoKLSAgICAvLyBVc2UgdG8gY3Jl
YXRlIGEgbmV3IG9iamVjdCwgc2VlIGRvY3Mgb24gY29uc3RydWN0b3IgYmVsb3cuCi0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8TWVtb3J5QWN0aXZhdGVkRm9udD4gY3JlYXRlKHVpbnQzMl90IGZvbnRJ
RCwgTlNGb250KiwgQ0dGb250UmVmKTsKLSAgICB+TWVtb3J5QWN0aXZhdGVkRm9udCgpOwotICAg
IAotICAgIC8vIEdldCBjYWNoZWQgQ0dGb250UmVmIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGluLW1l
bW9yeSBmb250LgotICAgIENHRm9udFJlZiBjZ0ZvbnQoKSB7IHJldHVybiBtX2NnRm9udC5nZXQo
KTsgfQotCi1wcml2YXRlOgotICAgIC8vIHNyY0ZvbnRSZWYgLSBBVFNGb250UmVmIGJlbG9uZ2lu
ZyB0byB0aGUgTlNGb250IG9iamVjdCB0aGF0IGZhaWxlZCB0bwotICAgIC8vIGxvYWQgaW4tcHJv
Y2Vzcy4KLSAgICAvLyBjb250YWluZXIgLSBhIGZvbnQgY29udGFpbmVyIGNvcnJlc3BvbmRpbmcg
dG8gYW4gaWRlbnRpY2FsIGZvbnQgdGhhdAotICAgIC8vIHdlIGxvYWRlZCBjcm9zcy1wcm9jZXNz
LgotICAgIE1lbW9yeUFjdGl2YXRlZEZvbnQodWludDMyX3QgZm9udElELCBOU0ZvbnQqLCBDR0Zv
bnRSZWYpOwotCi0gICAgV1RGOjpSZXRhaW5QdHI8Q0dGb250UmVmPiBtX2NnRm9udDsKLSAgICB1
aW50MzJfdCBtX2ZvbnRJRDsKLSAgICBXVEY6OlN0cmluZyBtX2luU2FuZGJveEhhc2hLZXk7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDcm9zc1Byb2Nlc3NGb250
TG9hZGluZ19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Dcm9zc1Byb2Nlc3NGb250TG9hZGluZy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Dcm9zc1Byb2Nlc3NGb250TG9hZGluZy5tbQko
cmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsMjA3
ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBp
bXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKgotICovCi0KLS8vIFRoaXMgZmlsZSBwcm92aWRlcyBhZGRpdGlvbmFsIGZ1
bmN0aW9uYWxpdHkgdG8gdGhlIE1hYyBGb250UGxhdGZvcm1EYXRhIGNsYXNzCi0vLyBkZWZpbmVk
IGluIFdlYkNvcmUvcGxhdGZvcm0vY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIC4KLS8v
IEJlY2F1c2Ugd2Ugd2FudCB0byBzdXBwb3J0IGxvYWRpbmcgZm9udHMgYmV0d2VlbiBwcm9jZXNz
ZXMgaW4gdGhlIGZhY2Ugb2YKLS8vIGZvbnQgbG9hZGluZyBiZWluZyBibG9ja2VkIGJ5IHRoZSBz
YW5kYm94LCB3ZSBuZWVkIGEgbWVjaG5hc2ltIHRvIGJvdGgKLS8vIGRvIHRoZSBsb2FkaW5nIG9m
IGluLW1lbW9yeSBmb250cyBhbmQga2VlcCB0cmFjayBvZiB0aGVtLgotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIkNyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgiCi0KLSNpbXBvcnQgIi4u
L2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJMaW5rSGFzaC5oIgotI2lt
cG9ydCA8QXBwS2l0L05TRm9udC5oPgotI2ltcG9ydCA8cHVibGljL1BsYXRmb3JtLmg+Ci0jaW1w
b3J0IDxwdWJsaWMvbWFjL1dlYlNhbmRib3hTdXBwb3J0Lmg+Ci0jaW1wb3J0IDx3dGYvSGFzaE1h
cC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXR5cGVkZWYgSGFz
aE1hcDx1aW50MzIsIE1lbW9yeUFjdGl2YXRlZEZvbnQqPiBGb250Q29udGFpbmVyUmVmTWVtb3J5
Rm9udEhhc2g7Ci10eXBlZGVmIEhhc2hNYXA8V1RGOjpTdHJpbmcsIE1lbW9yeUFjdGl2YXRlZEZv
bnQqPiBGb250TmFtZU1lbW9yeUZvbnRIYXNoOwotCi0vLyBDYWNoaW5nOgotLy8KLS8vIFJlcXVl
c3RpbmcgYSBmb250IGZyb20gdGhlIGJyb3dzZXIgcHJvY2VzcyBpcyBleHBlbnNpdmUgYW5kIHNv
IGlzCi0vLyAiYWN0aXZhdGluZyIgc2FpZCBmb250LiAgQ2FjaGluZyBvZiBsb2FkZWQgZm9udHMg
aXMgY29tcGxpY2F0ZWQgYnkgdGhlIGZhY3QKLS8vIHRoYXQgaXQncyBpbXBvc3NpYmxlIHRvIGdl
dCBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgb24tZGlzayBmb250IGZpbGUKLS8vIGZyb20g
aW5zaWRlIHRoZSBzYW5kYm94ZWQgcmVuZGVyZXIgcHJvY2Vzcy4KLS8vIFRoaXMgbWVhbnMgdGhh
dCB3aGVuIGxvYWRpbmcgYSBmb250IHdlIG5lZWQgdG8gcm91bmQtdHJpcCB0aHJvdWdoIHRoZSBi
cm93c2VyCi0vLyBwcm9jZXNzIGluIG9yZGVyIHRvIGdldCB0aGUgdW5pcXVlIGZvbnQgZmlsZSBp
ZGVudGlmZXIgd2hpY2ggd2UgbWlnaHQgYWxyZWFkeQotLy8gaGF2ZSBhY3RpdmF0ZWQgYW5kIGNh
Y2hlZC4KLS8vCi0vLyBJbiBvcmRlciB0byBzYXZlIGFzIG11Y2ggd29yayBhcyB3ZSBjYW4sIHdl
IG1haW50YWluIDIgbGV2ZWxzIG9mIGNhY2hpbmcKLS8vIGZvciB0aGUgZm9udCBkYXRhOgotLy8g
MS4gQSBkdW1iIGNhY2hlIGtleWVkIGJ5IHRoZSBmb250IG5hbWUvc3R5bGUgKGluZm9ybWF0aW9u
IHdlIGNhbiBkZXRlcm1pbmUKLS8vIGZyb20gaW5zaWRlIHRoZSBzYW5kYm94KS4KLS8vIDIuIEEg
c21hcnRlciBjYWNoZSBrZXllZCBieSB0aGUgcmVhbCAidW5pcXVlIGZvbnQgaWQiLgotLy8KLS8v
IEluIG9yZGVyIHRvIHBlcmZvcm0gYSBsb29rdXAgaW4gIzIgd2UgbmVlZCB0byBjb25zdWx0IHdp
dGggdGhlIGJyb3dzZXIgdG8gZ2V0Ci0vLyB1cyB0aGUgbG9va3VwIGtleS4gIFdoaWxlIHRoaXMg
ZG9lc24ndCBzYXZlIHVzIHRoZSBmb250IGxvYWQsIGl0IGRvZXMgc2F2ZQotLy8gdXMgZm9udCBh
Y3RpdmF0aW9uLgotLy8KLS8vIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgZXhpc3Rp
bmcgRm9udFBsYXRmb3JtRGF0YSBvYmplY3RzIGFyZSBhbHJlYWR5Ci0vLyBjYWNoZWQsIHNvIGEg
Y2FjaGUgbWlzcyBpbiB0aGUgY29kZSBpbiB0aGlzIGZpbGUgaXNuJ3QgbmVjZXNzYXJpbHkgc28g
YmFkLgotCi1Gb250Q29udGFpbmVyUmVmTWVtb3J5Rm9udEhhc2gmIGZvbnRDYWNoZUJ5Rm9udElE
KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRDb250YWluZXJSZWZNZW1vcnlGb250
SGFzaCwgc3JjRm9udElEQ2FjaGUsICgpKTsKLSAgICByZXR1cm4gc3JjRm9udElEQ2FjaGU7Ci19
Ci0KLQotRm9udE5hbWVNZW1vcnlGb250SGFzaCYgZm9udENhY2hlQnlGb250TmFtZSgpCi17Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250TmFtZU1lbW9yeUZvbnRIYXNoLCBzcmNGb250TmFt
ZUNhY2hlLCAoKSk7Ci0gICAgcmV0dXJuIHNyY0ZvbnROYW1lQ2FjaGU7Ci19Ci0KLS8vIEdpdmVu
IGEgZm9udCBzcGVjaWZpZWQgYnkgfHNyY0ZvbnR8LCB1c2UgdGhlIGluZm9ybWF0aW9uIHdlIGNh
biBxdWVyeSBpbgotLy8gdGhlIHNhbmRib3ggdG8gY29uc3RydWN0IGEga2V5IHdoaWNoIHdlIGhv
cGUgd2lsbCBiZSBhcyB1bmlxdWUgYXMgcG9zc2libGUKLS8vIHRvIHRoZSBjb250YWluaW5nIGZv
bnQgZmlsZS4KLVdURjo6U3RyaW5nIGhhc2hLZXlGcm9tTlNGb250KE5TRm9udCogc3JjRm9udCkK
LXsKLSAgICBOU0ZvbnREZXNjcmlwdG9yKiBkZXNjID0gW3NyY0ZvbnQgZm9udERlc2NyaXB0b3Jd
OwotICAgIE5TRm9udFN5bWJvbGljVHJhaXRzIHRyYWl0cyA9IFtkZXNjIHN5bWJvbGljVHJhaXRz
XTsKLSAgICByZXR1cm4gV1RGOjpTdHJpbmc6OmZvcm1hdCgiJXMgJXgiLCBbW3NyY0ZvbnQgZm9u
dE5hbWVdIFVURjhTdHJpbmddLCB0cmFpdHMpOwotfQotCi0vLyBUaGUgb25seSB3YXkgd2UgY2Fu
IHRlbGwgdGhhdCBhbiBpbi1wcm9jZXNzIGZvbnQgaGFzIGZhaWxlZCB0byBsb2FkCi0vLyBpcyBp
ZiBDVEZvbnRDb3B5R3JhcGhpY3NGb250KCkgcmV0dXJucyB0aGUgTGFzdFJlc29ydCBmb250Lgot
Ym9vbCBpc0xhc3RSZXNvcnRGb250KENHRm9udFJlZiBjZ0ZvbnQpCi17Ci0gICAgTlNTdHJpbmcq
IGZvbnROYW1lID0gKE5TU3RyaW5nKilDR0ZvbnRDb3B5UG9zdFNjcmlwdE5hbWUoY2dGb250KTsK
LSAgICByZXR1cm4gW2ZvbnROYW1lIGlzRXF1YWxUb1N0cmluZzpAIkxhc3RSZXNvcnQiXTsKLX0K
LQotLy8gR2l2ZW4gYW4gaW4tcHJvY2VzcyBmb250IHdoaWNoIGhhcyBmYWlsZWQgdG8gbG9hZCwg
cmV0dXJuIGEKLS8vIE1lbW9yeUFjdGl2YXRlZEZvbnQqIGNvcnJlc3BvbmRpbmcgdG8gYW4gaW4t
bWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIHRoZQotLy8gc2FtZSBmb250IGxvYWRlZCBmcm9tIHRo
ZSBicm93c2VyIHByb2Nlc3MuCi0vLyBPbiBmYWlsdXJlIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBh
IFBhc3NSZWZQdHIgcG9pbnRpbmcgdG8gMC4KLVBhc3NSZWZQdHI8TWVtb3J5QWN0aXZhdGVkRm9u
dD4gbG9hZEZvbnRGcm9tQnJvd3NlclByb2Nlc3MoTlNGb250KiBuc0ZvbnQpCi17Ci0gICAgLy8g
Rmlyc3QgdHJ5IHRvIGxvb2t1cCBpbiBvdXIgY2FjaGUgd2l0aCB0aGUgbGltaXRlZCBpbmZvcm1h
dGlvbiB3ZSBoYXZlLgotICAgIFdURjo6U3RyaW5nIGhhc2hLZXkgPSBoYXNoS2V5RnJvbU5TRm9u
dChuc0ZvbnQpOwotICAgIFJlZlB0cjxNZW1vcnlBY3RpdmF0ZWRGb250PiBmb250KGZvbnRDYWNo
ZUJ5Rm9udE5hbWUoKS5nZXQoaGFzaEtleSkpOwotICAgIGlmIChmb250KQotICAgICAgICByZXR1
cm4gZm9udDsKLQotICAgIENHRm9udFJlZiB0bXBDR0ZvbnQ7Ci0gICAgdWludDMyX3QgZm9udElE
OwotICAgIC8vIFNlbmQgY3Jvc3MtcHJvY2VzcyByZXF1ZXN0IHRvIGxvYWQgZm9udC4KLSAgICBX
ZWJLaXQ6OldlYlNhbmRib3hTdXBwb3J0KiBzYW5kYm94U3VwcG9ydCA9IFdlYktpdDo6UGxhdGZv
cm06OmN1cnJlbnQoKS0+c2FuZGJveFN1cHBvcnQoKTsKLSAgICBpZiAoIXNhbmRib3hTdXBwb3J0
KSB7Ci0gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGluIHJl
c3BvbnNlIHRvIGFuIGVycm9yIGxvYWRpbmcgYQotICAgICAgICAvLyBmb250IGR1ZSB0byBiZWlu
ZyBibG9ja2VkIGJ5IHRoZSBzYW5kYm94LgotICAgICAgICAvLyBUaGlzIGJ5IGRlZmluaXRpb24g
c2hvdWxkbid0IGhhcHBlbiBpZiB0aGVyZSBpcyBubyBzYW5kYm94IHN1cHBvcnQuCi0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYg
KCFzYW5kYm94U3VwcG9ydC0+bG9hZEZvbnQobnNGb250LCAmdG1wQ0dGb250LCAmZm9udElEKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBjZ0ZvbnQodG1w
Q0dGb250KTsKLSAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHRoZSBmb250SUQgZnJvbSB0aGUgYnJv
d3NlciBwcm9jZXNzLCB3ZSBjYW4gY29uc3VsdAotICAgIC8vIHRoZSBJRCBjYWNoZS4KLSAgICBm
b250ID0gZm9udENhY2hlQnlGb250SUQoKS5nZXQoZm9udElEKTsKLSAgICBpZiAoZm9udCkKLSAg
ICAgICAgLy8gRklYTUU6IFdlYlNhbmRib3hTdXBwb3J0Ojpsb2FkRm9udCgpIHNob3VsZCBjb25z
dWx0IHRoZSBpZCBjYWNoZQotICAgICAgICAvLyBiZWZvcmUgYWN0aXZhdGluZyB0aGUgZm9udC4K
LSAgICAgICAgcmV0dXJuIGZvbnQ7Ci0KLSAgICByZXR1cm4gTWVtb3J5QWN0aXZhdGVkRm9udDo6
Y3JlYXRlKGZvbnRJRCwgbnNGb250LCBjZ0ZvbnQuZ2V0KCkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZQotCi1QYXNzUmVmUHRyPE1lbW9yeUFjdGl2YXRlZEZvbnQ+IE1lbW9yeUFjdGl2YXRlZEZvbnQ6
OmNyZWF0ZSh1aW50MzJfdCBmb250SUQsIE5TRm9udCogbnNGb250LCBDR0ZvbnRSZWYgY2dGb250
KQotewotICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbW9yeUFjdGl2YXRlZEZvbnQoZm9udElELCBu
c0ZvbnQsIGNnRm9udCkpOwotfQotCi1NZW1vcnlBY3RpdmF0ZWRGb250OjpNZW1vcnlBY3RpdmF0
ZWRGb250KHVpbnQzMl90IGZvbnRJRCwgTlNGb250KiBuc0ZvbnQsIENHRm9udFJlZiBjZ0ZvbnQp
Ci0gICAgOiBtX2NnRm9udChjZ0ZvbnQpCi0gICAgLCBtX2ZvbnRJRChmb250SUQpCi0gICAgLCBt
X2luU2FuZGJveEhhc2hLZXkoaGFzaEtleUZyb21OU0ZvbnQobnNGb250KSkKLXsKLSAgICAvLyBB
ZGQgb3Vyc2VsdmVzIHRvIGNhY2hlcy4KLSAgICBmb250Q2FjaGVCeUZvbnRJRCgpLmFkZChmb250
SUQsIHRoaXMpOwotICAgIGZvbnRDYWNoZUJ5Rm9udE5hbWUoKS5hZGQobV9pblNhbmRib3hIYXNo
S2V5LCB0aGlzKTsKLX0KLQotLy8gRGVzdHJ1Y3RvciAtIFVubG9hZCBmb250IGNvbnRhaW5lciBm
cm9tIG1lbW9yeSBhbmQgcmVtb3ZlIG91cnNlbHZlcwotLy8gZnJvbSBjYWNoZS4KLU1lbW9yeUFj
dGl2YXRlZEZvbnQ6On5NZW1vcnlBY3RpdmF0ZWRGb250KCkKLXsKLSAgICAvLyBGaXJzdCByZW1v
dmUgb3Vyc2VsdmVzIGZyb20gdGhlIGNhY2hlcy4KLSAgICBBU1NFUlQoZm9udENhY2hlQnlGb250
SUQoKS5jb250YWlucyhtX2ZvbnRJRCkpOwotICAgIEFTU0VSVChmb250Q2FjaGVCeUZvbnROYW1l
KCkuY29udGFpbnMobV9pblNhbmRib3hIYXNoS2V5KSk7Ci0KLSAgICBmb250Q2FjaGVCeUZvbnRJ
RCgpLnJlbW92ZShtX2ZvbnRJRCk7Ci0gICAgZm9udENhY2hlQnlGb250TmFtZSgpLnJlbW92ZSht
X2luU2FuZGJveEhhc2hLZXkpOwotfQotCi0vLyBHaXZlbiBhbiBOU0ZvbnQsIHRyeSB0byBsb2Fk
IGEgcmVwcmVzZW50YXRpb24gb2YgdGhhdCBmb250IGludG8gdGhlIGNnRm9udAotLy8gcGFyYW1l
dGVyLiAgSWYgbG9hZGluZyBpcyBibG9ja2VkIGJ5IHRoZSBzYW5kYm94LCB0aGUgZm9udCBtYXkg
YmUgbG9hZGVkCi0vLyBjcm9zcy1wcm9jZXNzLgotLy8gSWYgc2FuZGJveCBsb2FkaW5nIGFsc28g
ZmFpbHMsIGEgZmFsbGJhY2sgZm9udCBpcyBsb2FkZWQuCi0vLwotLy8gQ29uc2lkZXJhdGlvbnM6
Ci0vLyAqIGNnRm9udCBtdXN0IGJlIENGUmVsZWFzZSgpZWQgYnkgdGhlIGNhbGxlciB3aGVuIGRv
bmUuCi0vLyAKLS8vIFBhcmFtZXRlcnM6Ci0vLyAqIG5zRm9udCAtIFRoZSBmb250IHdlIHdpc2gg
dG8gbG9hZC4KLS8vICogZm9udFNpemUgLSBwb2ludCBzaXplIG9mIHRoZSBmb250IHdlIHdpc2gg
dG8gbG9hZC4KLS8vICogb3V0TlNGb250IC0gVGhlIGZvbnQgdGhhdCB3YXMgYWN0dWFsbHkgbG9h
ZGVkIG9yIG51bGwgaWYgbG9hZGluZyBmYWlsZWQuCi0vLyAqIGNnRm9udCAtIG9uIG91dHB1dCB0
aGlzIGNvbnRhaW5zIHRoZSBDR0ZvbnRSZWYgY29ycmVzcG9uZGluZyB0byB0aGUgTlNGb250Ci0v
LyAgIHRoYXQgd2FzIHBpY2tlZCBpbiB0aGUgZW5kLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJs
ZSBmb3IgY2FsbGluZwotLy8gICBDRlJlbGVhc2UoKSBvbiB0aGlzIHBhcmFtZXRlciB3aGVuIGRv
bmUgd2l0aCBpdC4KLS8vICogZm9udElEIC0gb24gb3V0cHV0LCB0aGUgSUQgY29ycmVzcG9uZGlu
ZyB0byBuc0ZvbnQuCi12b2lkIEZvbnRQbGF0Zm9ybURhdGE6OmxvYWRGb250KE5TRm9udCogbnNG
b250LCBmbG9hdCBmb250U2l6ZSwgTlNGb250KiYgb3V0TlNGb250LCBDR0ZvbnRSZWYmIGNnRm9u
dCkKLXsKLSAgICBvdXROU0ZvbnQgPSBuc0ZvbnQ7Ci0gICAgY2dGb250ID0gQ1RGb250Q29weUdy
YXBoaWNzRm9udCh0b0NURm9udFJlZihvdXROU0ZvbnQpLCAwKTsKLSAgICBpZiAob3V0TlNGb250
ICYmIGNnRm9udCAmJiBpc0xhc3RSZXNvcnRGb250KGNnRm9udCkpIHsKLSAgICAgICAgLy8gUmVs
ZWFzZSBvbGQgQ0dGb250UmVmIHNpbmNlIGl0IHBvaW50cyBhdCB0aGUgTGFzdFJlc29ydCBmb250
IHdoaWNoIHdlIGRvbid0IHdhbnQuCi0gICAgICAgIENGUmVsZWFzZShjZ0ZvbnQpOwotICAgICAg
ICBjZ0ZvbnQgPSAwOwotCi0gICAgICAgIC8vIEZvbnQgbG9hZGluZyB3YXMgYmxvY2tlZCBieSB0
aGUgU2FuZGJveC4KLSAgICAgICAgbV9pbk1lbW9yeUZvbnQgPSBsb2FkRm9udEZyb21Ccm93c2Vy
UHJvY2VzcyhvdXROU0ZvbnQpOwotICAgICAgICBpZiAobV9pbk1lbW9yeUZvbnQpIHsKLSAgICAg
ICAgICAgIGNnRm9udCA9IG1faW5NZW1vcnlGb250LT5jZ0ZvbnQoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gTmVlZCB0byBhZGQgYW4gZXh0cmEgcmV0YWluIHNvIG91dHB1dCBzZW1h
bnRpY3Mgb2YgdGhpcyBmdW5jdGlvbgotICAgICAgICAgICAgLy8gYXJlIGNvbnNpc3RlbnQuCi0g
ICAgICAgICAgICBDRlJldGFpbihjZ0ZvbnQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gSWYgd2Ugc3RpbGwgY2FuJ3QgbG9hZCB0aGUgZm9udCwgc2V0IHxvdXROU0ZvbnR8IHRv
IG51bGwgc28gdGhhdCBGb250UGxhdGZvcm1EYXRhIHdvbid0IGJlIHVzZWQuCi0gICAgICAgICAg
ICBvdXROU0ZvbnQgPSAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9E
ZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwCShyZXZpc2lv
biAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9E
ZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjM1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGVmZXJyZWRJbWFnZURl
Y29kZXIuaCIKLQotI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgotI2luY2x1ZGUgIklt
YWdlRnJhbWVHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJMYXp5RGVjb2RpbmdQaXhlbFJlZi5oIgot
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFt
ZXNwYWNlIHsKLQotLy8gVVJJIGxhYmVsIGZvciBhIGxhemlseSBkZWNvZGVkIFNrUGl4ZWxSZWYu
Ci1jb25zdCBjaGFyIGxhYmVsTGF6eURlY29kZWRbXSA9ICJsYXp5IjsKLQotfSAvLyBuYW1lc3Bh
Y2UKLQotYm9vbCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c19lbmFibGVkID0gZmFsc2U7Ci0KLURl
ZmVycmVkSW1hZ2VEZWNvZGVyOjpEZWZlcnJlZEltYWdlRGVjb2RlcihJbWFnZURlY29kZXIqIGFj
dHVhbERlY29kZXIpCi0gICAgOiBtX2FsbERhdGFSZWNlaXZlZChmYWxzZSkKLSAgICAsIG1fYWN0
dWFsRGVjb2RlcihhZG9wdFB0cihhY3R1YWxEZWNvZGVyKSkKLSAgICAsIG1fb3JpZW50YXRpb24o
RGVmYXVsdEltYWdlT3JpZW50YXRpb24pCi17Ci19Ci0KLURlZmVycmVkSW1hZ2VEZWNvZGVyOjp+
RGVmZXJyZWRJbWFnZURlY29kZXIoKQotewotfQotCi1EZWZlcnJlZEltYWdlRGVjb2RlciogRGVm
ZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdl
U291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JPcHRpb24pCi17Ci0gICAgSW1hZ2VEZWNvZGVy
KiBhY3R1YWxEZWNvZGVyID0gSW1hZ2VEZWNvZGVyOjpjcmVhdGUoZGF0YSwgYWxwaGFPcHRpb24s
IGdhbW1hQW5kQ29sb3JPcHRpb24pOwotICAgIHJldHVybiBhY3R1YWxEZWNvZGVyID8gbmV3IERl
ZmVycmVkSW1hZ2VEZWNvZGVyKGFjdHVhbERlY29kZXIpIDogMDsKLX0KLQotUGFzc093blB0cjxE
ZWZlcnJlZEltYWdlRGVjb2Rlcj4gRGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZUZvclRlc3Rp
bmcoUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBEZWZlcnJlZEltYWdlRGVjb2RlcihkZWNvZGVyLmxlYWtQdHIoKSkpOwotfQotCi1i
b29sIERlZmVycmVkSW1hZ2VEZWNvZGVyOjppc0xhenlEZWNvZGVkKGNvbnN0IFNrQml0bWFwJiBi
aXRtYXApCi17Ci0gICAgcmV0dXJuIGJpdG1hcC5waXhlbFJlZigpCi0gICAgICAgICYmIGJpdG1h
cC5waXhlbFJlZigpLT5nZXRVUkkoKQotICAgICAgICAmJiAhbWVtY21wKGJpdG1hcC5waXhlbFJl
ZigpLT5nZXRVUkkoKSwgbGFiZWxMYXp5RGVjb2RlZCwgc2l6ZW9mKGxhYmVsTGF6eURlY29kZWQp
KTsKLX0KLQotU2tCaXRtYXAgRGVmZXJyZWRJbWFnZURlY29kZXI6OmNyZWF0ZVJlc2l6ZWRMYXp5
RGVjb2RpbmdCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgU2tJU2l6ZSYgc2Nh
bGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KQotewotICAgIExhenlEZWNvZGlu
Z1BpeGVsUmVmKiBwaXhlbFJlZiA9IHN0YXRpY19jYXN0PExhenlEZWNvZGluZ1BpeGVsUmVmKj4o
Yml0bWFwLnBpeGVsUmVmKCkpOwotCi0gICAgaW50IHJvd0J5dGVzID0gMDsKLSAgICByb3dCeXRl
cyA9IFNrQml0bWFwOjpDb21wdXRlUm93Qnl0ZXMoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmln
LCBzY2FsZWRTaXplLndpZHRoKCkpOwotCi0gICAgU2tCaXRtYXAgcmVzaXplZEJpdG1hcDsKLSAg
ICByZXNpemVkQml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNj
YWxlZFN1YnNldC53aWR0aCgpLCBzY2FsZWRTdWJzZXQuaGVpZ2h0KCksIHJvd0J5dGVzKTsKLQot
ICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgaGFzIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSB0aGF0IG11
bHRpcGxlCi0gICAgLy8gTGF6eURlY29kaW5nUGl4ZWxSZWZzIGFyZSBjcmVhdGVkIGV2ZW4gdGhv
dWdoIHRoZXkgc2hhcmUgdGhlIHNhbWUKLSAgICAvLyBzY2FsZWQgc2l6ZSBhbmQgSW1hZ2VGcmFt
ZUdlbmVyYXRvci4KLSAgICByZXNpemVkQml0bWFwLnNldFBpeGVsUmVmKG5ldyBMYXp5RGVjb2Rp
bmdQaXhlbFJlZihwaXhlbFJlZi0+ZnJhbWVHZW5lcmF0b3IoKSwgc2NhbGVkU2l6ZSwgc2NhbGVk
U3Vic2V0KSktPnVucmVmKCk7Ci0KLSAgICAvLyBTZWUgY29tbWVudHMgaW4gY3JlYXRlTGF6eURl
Y29kaW5nQml0bWFwKCkuCi0gICAgcmVzaXplZEJpdG1hcC5zZXRJbW11dGFibGUoKTsKLSAgICBy
ZXR1cm4gcmVzaXplZEJpdG1hcDsKLX0KLQotdm9pZCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0
RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgc19lbmFibGVkID0gZW5hYmxlZDsKLX0KLQot
U3RyaW5nIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+ZmlsZW5hbWVF
eHRlbnNpb24oKSA6IG1fZmlsZW5hbWVFeHRlbnNpb247Ci19Ci0KLUltYWdlRnJhbWUqIERlZmVy
cmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAg
IC8vIE9ubHkgZGVmZXIgaW1hZ2UgZGVjb2RpbmcgaWYgdGhpcyBpcyBhIHNpbmdsZSBmcmFtZSBp
bWFnZS4gVGhlIHJlYXNvbiBpcwotICAgIC8vIGJlY2F1c2UgYSBtdWx0aWZyYW1lIGlzIHVzdWFs
bHkgYW5pbWF0ZWQgR0lGLiBBbmltYXRpb24gaXMgaGFuZGxlZCBieQotICAgIC8vIEJpdG1hcElt
YWdlIHdoaWNoIHVzZXMgc29tZSBtZXRhZGF0YSBmdW5jdGlvbnMgdGhhdCBkbyBzeW5jaHJvbm91
cyBpbWFnZQotICAgIC8vIGRlY29kaW5nLgotICAgIGlmIChzX2VuYWJsZWQKLSAgICAgICAgJiYg
bV9hY3R1YWxEZWNvZGVyCi0gICAgICAgICYmIG1fYWN0dWFsRGVjb2Rlci0+cmVwZXRpdGlvbkNv
dW50KCkgPT0gY0FuaW1hdGlvbk5vbmUKLSAgICAgICAgJiYgbV9hY3R1YWxEZWNvZGVyLT5pc1Np
emVBdmFpbGFibGUoKQotICAgICAgICAmJiBtX2FjdHVhbERlY29kZXItPmZyYW1lQ291bnQoKSA9
PSAxKSB7Ci0KLSAgICAgICAgbV9zaXplID0gbV9hY3R1YWxEZWNvZGVyLT5zaXplKCk7Ci0gICAg
ICAgIG1fZmlsZW5hbWVFeHRlbnNpb24gPSBtX2FjdHVhbERlY29kZXItPmZpbGVuYW1lRXh0ZW5z
aW9uKCk7Ci0gICAgICAgIG1fb3JpZW50YXRpb24gPSBtX2FjdHVhbERlY29kZXItPm9yaWVudGF0
aW9uKCk7Ci0KLSAgICAgICAgU2tCaXRtYXAgbGF6eURlY29kZWRTa0JpdG1hcCA9IGNyZWF0ZUxh
enlEZWNvZGluZ0JpdG1hcCgpOwotICAgICAgICBtX2xhenlEZWNvZGVkRnJhbWUuc2V0U2tCaXRt
YXAobGF6eURlY29kZWRTa0JpdG1hcCk7Ci0KLSAgICAgICAgLy8gRG9uJ3QgbWFyayB0aGUgZnJh
bWUgYXMgY29tcGxldGVseSBkZWNvZGVkIHVudGlsIHRoZSB1bmRlcmx5aW5nCi0gICAgICAgIC8v
IGRlY29kZXIgaGFzIHJlYWxseSBkZWNvZGVkIGl0LiBVbnRpbCB0aGVuLCBvdXIgZGF0YSBhbmQg
bWV0YWRhdGEgbWF5Ci0gICAgICAgIC8vIGJlIGluY29ycmVjdCwgc28gY2FsbGVycyBjYW4ndCBy
ZWx5IG9uIHRoZW0uCi0gICAgICAgIG1fbGF6eURlY29kZWRGcmFtZS5zZXRTdGF0dXMoSW1hZ2VG
cmFtZTo6RnJhbWVQYXJ0aWFsKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVy
ID8gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpIDogJm1fbGF6eURl
Y29kZWRGcmFtZTsKLX0KLQotdm9pZCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFy
ZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQotewotICAgIGlmIChtX2FjdHVh
bERlY29kZXIpIHsKLSAgICAgICAgLy8gS2VlcCBhIHJlZmVyZW5jZSB0byBkYXRhIHVudGlsIGlt
YWdlIGRlY29kaW5nIGlzIGRlZmVycmVkLgotICAgICAgICAvLyBXaGVuIGltYWdlIGRlY29kaW5n
IGlzIGRlZmVycmVkIHRoZW4gb3duZXJzaGlwIG9mIG1fZGF0YSBpcwotICAgICAgICAvLyB0cmFu
c2ZlcnJlZCB0byBJbWFnZURlY29kaW5nU3RvcmUuCi0gICAgICAgIG1fZGF0YSA9IGRhdGE7Ci0g
ICAgICAgIG1fYWxsRGF0YVJlY2VpdmVkID0gYWxsRGF0YVJlY2VpdmVkOwotICAgICAgICBtX2Fj
dHVhbERlY29kZXItPnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBBU1NFUlQoIW1fZGF0YSk7Ci0gICAgICAgIG1fZnJhbWVHZW5lcmF0b3ItPnNl
dERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLSAgICB9Ci19Ci0KLWJvb2wgRGVmZXJyZWRJ
bWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCi17Ci0gICAgLy8gbV9hY3R1YWxEZWNvZGVy
IGlzIDAgb25seSBpZiBpbWFnZSBkZWNvZGluZyBpcyBkZWZlcnJlZCBhbmQgdGhhdAotICAgIC8v
IG1lYW5zIGltYWdlIGhlYWRlciBkZWNvZGVkIHN1Y2Nlc3NmdWxseSBhbmQgc2l6ZSBpcyBhdmFp
bGFibGUuCi0gICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0dWFsRGVjb2Rlci0+aXNT
aXplQXZhaWxhYmxlKCkgOiB0cnVlOwotfQotCi1JbnRTaXplIERlZmVycmVkSW1hZ2VEZWNvZGVy
OjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxE
ZWNvZGVyLT5zaXplKCkgOiBtX3NpemU7Ci19Ci0KLUludFNpemUgRGVmZXJyZWRJbWFnZURlY29k
ZXI6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAotewotICAgIHJldHVybiBt
X2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgp
IDogbV9zaXplOwotfQotCi1zaXplX3QgRGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lQ291bnQo
KQotewotICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPmZyYW1l
Q291bnQoKSA6IDE7Ci19Ci0KLWludCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNv
dW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNv
ZGVyLT5yZXBldGl0aW9uQ291bnQoKSA6IGNBbmltYXRpb25Ob25lOwotfQotCi12b2lkIERlZmVy
cmVkSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3Jl
RnJhbWUpCi17Ci0gICAgLy8gSWYgaW1hZ2UgZGVjb2RpbmcgaXMgZGVmZXJyZWQgdGhlbiBmcmFt
ZSBidWZmZXIgY2FjaGUgaXMgbWFuYWdlZCBieQotICAgIC8vIHRoZSBjb21wb3NpdG9yIGFuZCB0
aGlzIGNhbGwgaXMgaWdub3JlZC4KLSAgICBpZiAobV9hY3R1YWxEZWNvZGVyKQotICAgICAgICBt
X2FjdHVhbERlY29kZXItPmNsZWFyRnJhbWVCdWZmZXJDYWNoZShjbGVhckJlZm9yZUZyYW1lKTsK
LX0KLQotYm9vbCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6
ZV90IGluZGV4KSBjb25zdAotewotICAgIHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVh
bERlY29kZXItPmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KSA6IG1fZnJhbWVHZW5lcmF0b3It
Pmhhc0FscGhhKCk7Ci19Ci0KLXVuc2lnbmVkIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5
dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0Ci17Ci0gICAgLy8gSWYgZnJhbWUgZGVjb2Rp
bmcgaXMgZGVmZXJyZWQgdGhlbiBpdCBpcyBub3QgbWFuYWdlZCBieSBNZW1vcnlDYWNoZQotICAg
IC8vIHNvIHJldHVybiAwIGhlcmUuCi0gICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1fYWN0
dWFsRGVjb2Rlci0+ZnJhbWVCeXRlc0F0SW5kZXgoaW5kZXgpIDogMDsKLX0KLQotSW1hZ2VPcmll
bnRhdGlvbiBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6b3JpZW50YXRpb24oKSBjb25zdAotewotICAg
IHJldHVybiBtX2FjdHVhbERlY29kZXIgPyBtX2FjdHVhbERlY29kZXItPm9yaWVudGF0aW9uKCkg
OiBtX29yaWVudGF0aW9uOwotfQotCi1Ta0JpdG1hcCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6Y3Jl
YXRlTGF6eURlY29kaW5nQml0bWFwKCkKLXsKLSAgICBTa0lTaXplIGZ1bGxTaXplID0gU2tJU2l6
ZTo6TWFrZShtX2FjdHVhbERlY29kZXItPnNpemUoKS53aWR0aCgpLCBtX2FjdHVhbERlY29kZXIt
PnNpemUoKS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKCFmdWxsU2l6ZS5pc0VtcHR5KCkpOwotCi0g
ICAgU2tJUmVjdCBmdWxsUmVjdCA9IFNrSVJlY3Q6Ok1ha2VTaXplKGZ1bGxTaXplKTsKLQotICAg
IC8vIENyZWF0ZXMgYSBsYXppbHkgZGVjb2RlZCBTa1BpeGVsUmVmIHRoYXQgcmVmZXJlbmNlcyB0
aGUgZW50aXJlIGltYWdlIHdpdGhvdXQgc2NhbGluZy4KLSAgICBTa0JpdG1hcCBiaXRtYXA7Ci0g
ICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIGZ1bGxTaXpl
LndpZHRoKCksIGZ1bGxTaXplLmhlaWdodCgpKTsKLQotICAgIG1fZnJhbWVHZW5lcmF0b3IgPSBJ
bWFnZUZyYW1lR2VuZXJhdG9yOjpjcmVhdGUoZnVsbFNpemUsIG1fZGF0YS5yZWxlYXNlKCksIG1f
YWxsRGF0YVJlY2VpdmVkKTsKLSAgICBtX2FjdHVhbERlY29kZXIuY2xlYXIoKTsKLQotICAgIGJp
dG1hcC5zZXRQaXhlbFJlZihuZXcgTGF6eURlY29kaW5nUGl4ZWxSZWYobV9mcmFtZUdlbmVyYXRv
ciwgZnVsbFNpemUsIGZ1bGxSZWN0KSktPnVucmVmKCk7Ci0KLSAgICAvLyBVc2UgdGhlIFVSSSB0
byBpZGVudGlmeSB0aGlzIGFzIGEgbGF6aWx5IGRlY29kZWQgU2tQaXhlbFJlZiBvZiB0eXBlIExh
enlEZWNvZGluZ1BpeGVsUmVmLgotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBtb3JlIHVzZWZ1
bCB0byBnaXZlIHRoZSBhY3R1YWwgaW1hZ2UgVVJJLgotICAgIGJpdG1hcC5waXhlbFJlZigpLT5z
ZXRVUkkobGFiZWxMYXp5RGVjb2RlZCk7Ci0KLSAgICAvLyBJbmZvcm0gdGhlIGJpdG1hcCB0aGF0
IHdlIHdpbGwgbmV2ZXIgY2hhbmdlIHRoZSBwaXhlbHMuIFRoaXMgaXMgYSBwZXJmb3JtYW5jZSBo
aW50Ci0gICAgLy8gc3Vic3lzdGVtcyB0aGF0IG1heSB0cnkgdG8gY2FjaGUgdGhpcyBiaXRtYXAg
KGUuZy4gcGljdHVyZXMsIHBpcGVzLCBncHUsIHBkZiwgZXRjLikKLSAgICBiaXRtYXAuc2V0SW1t
dXRhYmxlKCk7Ci0KLSAgICAvLyBGSVhNRTogU2V0dGluZyBiaXRtYXAuc2V0SXNPcGFxdWUoKSBp
cyBiaWcgcGVyZm9ybWFuY2UgZ2FpbiBpZiBwb3NzaWJsZS4gV2UgY2FuCi0gICAgLy8gZG8gc28g
c2FmZWx5IGlmIHRoZSBpbWFnZSBpcyBmdWxseSBsb2FkZWQgYW5kIGl0IGlzIGEgSlBFRyBpbWFn
ZSwgb3IgaWYgdGhlIGltYWdlIHdhcwotICAgIC8vIGRlY29kZWQgYmVmb3JlLgotCi0gICAgcmV0
dXJuIGJpdG1hcDsKLX0KLQotYm9vbCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6aG90U3BvdChJbnRQ
b2ludCYgaG90U3BvdCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9h
Y3R1YWxEZWNvZGVyLT5ob3RTcG90KGhvdFNwb3QpIDogZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuaAkocmV2aXNp
b24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
RGVmZXJyZWRJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5MCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBEZWZlcnJlZEltYWdlRGVjb2Rlcl9oCi0jZGVmaW5lIERlZmVycmVk
SW1hZ2VEZWNvZGVyX2gKLQotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgotI2luY2x1ZGUgIklt
YWdlU291cmNlLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlNrQml0bWFwLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvcjsKLWNs
YXNzIFNoYXJlZEJ1ZmZlcjsKLQotY2xhc3MgRGVmZXJyZWRJbWFnZURlY29kZXIgewotcHVibGlj
OgotICAgIH5EZWZlcnJlZEltYWdlRGVjb2RlcigpOwotICAgIHN0YXRpYyBEZWZlcnJlZEltYWdl
RGVjb2RlciogY3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFs
cGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwotCi0g
ICAgc3RhdGljIFBhc3NPd25QdHI8RGVmZXJyZWRJbWFnZURlY29kZXI+IGNyZWF0ZUZvclRlc3Rp
bmcoUGFzc093blB0cjxJbWFnZURlY29kZXI+KTsKLQotICAgIHN0YXRpYyBib29sIGlzTGF6eURl
Y29kZWQoY29uc3QgU2tCaXRtYXAmKTsKLQotICAgIHN0YXRpYyBTa0JpdG1hcCBjcmVhdGVSZXNp
emVkTGF6eURlY29kaW5nQml0bWFwKGNvbnN0IFNrQml0bWFwJiwgY29uc3QgU2tJU2l6ZSYgc2Nh
bGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KTsKLQotICAgIHN0YXRpYyB2b2lk
IHNldEVuYWJsZWQoYm9vbCk7Ci0KLSAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25z
dDsKLQotICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwot
Ci0gICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2
ZWQpOwotCi0gICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKLSAgICBJbnRTaXplIHNpemUoKSBj
b25zdDsKLSAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsK
LSAgICBzaXplX3QgZnJhbWVDb3VudCgpOwotICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25z
dDsKLSAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOwotICAgIGJvb2wgZnJh
bWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsKLSAgICB1bnNpZ25lZCBmcmFt
ZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OwotICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb24oKSBjb25zdDsKLSAgICBib29sIGhvdFNwb3QoSW50UG9pbnQmKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBEZWZlcnJlZEltYWdlRGVjb2RlcihJbWFnZURlY29k
ZXIqIGFjdHVhbERlY29kZXIpOwotICAgIFNrQml0bWFwIGNyZWF0ZUxhenlEZWNvZGluZ0JpdG1h
cCgpOwotICAgIHZvaWQgc2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKTsKLQotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKLSAgICBi
b29sIG1fYWxsRGF0YVJlY2VpdmVkOwotICAgIE93blB0cjxJbWFnZURlY29kZXI+IG1fYWN0dWFs
RGVjb2RlcjsKLQotICAgIFN0cmluZyBtX2ZpbGVuYW1lRXh0ZW5zaW9uOwotICAgIEludFNpemUg
bV9zaXplOwotICAgIEltYWdlT3JpZW50YXRpb24gbV9vcmllbnRhdGlvbjsKLQotICAgIEltYWdl
RnJhbWUgbV9sYXp5RGVjb2RlZEZyYW1lOwotICAgIFJlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9y
PiBtX2ZyYW1lR2VuZXJhdG9yOwotCi0gICAgc3RhdGljIGJvb2wgc19lbmFibGVkOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Rpc2NhcmRhYmxlUGl4ZWxSZWYuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Rpc2NhcmRh
YmxlUGl4ZWxSZWYuY3BwCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EaXNjYXJkYWJsZVBpeGVsUmVmLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJEaXNjYXJkYWJsZVBpeGVsUmVmLmgiCi0KLSNpbmNsdWRlIDxwdWJsaWMvUGxhdGZv
cm0uaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotbmFtZXNwYWNlIHsKLQotLy8gVVJJIGxhYmVsIGZvciBhIGRpc2NhcmRhYmxlIFNrUGl4
ZWxSZWYuCi1jb25zdCBjaGFyIGxhYmVsRGlzY2FyZGFibGVbXSA9ICJkaXNjYXJkYWJsZSI7Ci0K
LX0gLy8gbmFtZXNwYWNlCi0KLQotYm9vbCBEaXNjYXJkYWJsZVBpeGVsUmVmQWxsb2NhdG9yOjph
bGxvY1BpeGVsUmVmKFNrQml0bWFwKiBkc3QsIFNrQ29sb3JUYWJsZSogY3RhYmxlKQotewotICAg
IFNrNjQgc2l6ZSA9IGRzdC0+Z2V0U2l6ZTY0KCk7Ci0gICAgaWYgKHNpemUuaXNOZWcoKSB8fCAh
c2l6ZS5pczMyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNrQXV0b1RVbnJlZjxE
aXNjYXJkYWJsZVBpeGVsUmVmPiBwaXhlbFJlZihuZXcgRGlzY2FyZGFibGVQaXhlbFJlZihjdGFi
bGUsIGFkb3B0UHRyKG5ldyBTa011dGV4KCkpKSk7Ci0gICAgaWYgKHBpeGVsUmVmLT5hbGxvY0Fu
ZExvY2tEaXNjYXJkYWJsZU1lbW9yeShzaXplLmdldDMyKCkpKSB7Ci0gICAgICAgIHBpeGVsUmVm
LT5zZXRVUkkobGFiZWxEaXNjYXJkYWJsZSk7Ci0gICAgICAgIGRzdC0+c2V0UGl4ZWxSZWYocGl4
ZWxSZWYuZ2V0KCkpOwotICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IGNhbGxlZCB3aGVu
IGEgRGlzY2FyZGFibGVQaXhlbFJlZiBpcyBjcmVhdGVkIHRvIGJhY2sgYSBTa0JpdG1hcC4KLSAg
ICAgICAgLy8gSXQgaXMgbmVjZXNzYXJ5IHRvIGxvY2sgdGhpcyBTa0JpdG1hcCB0byBoYXZlIGEg
dmFsaWQgcG9pbnRlciB0byBwaXhlbHMuIE90aGVyd2lzZSwKLSAgICAgICAgLy8gdGhpcyBTa0Jp
dG1hcCBjb3VsZCBiZSBhc3NpZ25lZCB0byBhbm90aGVyIFNrQml0bWFwIGFuZCBsb2NraW5nL3Vu
bG9ja2luZyB0aGUgb3RoZXIKLSAgICAgICAgLy8gU2tCaXRtYXAgd2lsbCBtYWtlIHRoaXMgb25l
IGxvc2luZyBpdHMgcGl4ZWxzLgotICAgICAgICBkc3QtPmxvY2tQaXhlbHMoKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gRmFsbGJhY2sgdG8gaGVhcCBhbGxvY2F0b3Ig
aWYgZGlzY2FyZGFibGUgbWVtb3J5IGlzIG5vdCBhdmFpbGFibGUuCi0gICAgcmV0dXJuIGRzdC0+
YWxsb2NQaXhlbHMoY3RhYmxlKTsKLX0KLQotRGlzY2FyZGFibGVQaXhlbFJlZjo6RGlzY2FyZGFi
bGVQaXhlbFJlZihTa0NvbG9yVGFibGUqIGN0YWJsZSwgUGFzc093blB0cjxTa011dGV4PiBtdXRl
eCkKLSAgICA6IFNrUGl4ZWxSZWYobXV0ZXguZ2V0KCkpCi0gICAgLCBtX2NvbG9yVGFibGUoY3Rh
YmxlKQotICAgICwgbV9sb2NrZWRNZW1vcnkoMCkKLSAgICAsIG1fbXV0ZXgobXV0ZXgpCi17Ci19
Ci0KLURpc2NhcmRhYmxlUGl4ZWxSZWY6On5EaXNjYXJkYWJsZVBpeGVsUmVmKCkKLXsKLSAgICBT
a1NhZmVVbnJlZihtX2NvbG9yVGFibGUpOwotfQotCi1ib29sIERpc2NhcmRhYmxlUGl4ZWxSZWY6
OmFsbG9jQW5kTG9ja0Rpc2NhcmRhYmxlTWVtb3J5KHNpemVfdCBieXRlcykKLXsKLSAgICBtX2Rp
c2NhcmRhYmxlID0gYWRvcHRQdHIoV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5hbGxvY2F0
ZUFuZExvY2tEaXNjYXJkYWJsZU1lbW9yeShieXRlcykpOwotICAgIGlmIChtX2Rpc2NhcmRhYmxl
KSB7Ci0gICAgICAgIG1fbG9ja2VkTWVtb3J5ID0gbV9kaXNjYXJkYWJsZS0+ZGF0YSgpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkKiBE
aXNjYXJkYWJsZVBpeGVsUmVmOjpvbkxvY2tQaXhlbHMoU2tDb2xvclRhYmxlKiogY3RhYmxlKQot
ewotICAgIGlmICghbV9sb2NrZWRNZW1vcnkgJiYgbV9kaXNjYXJkYWJsZS0+bG9jaygpKQotICAg
ICAgICBtX2xvY2tlZE1lbW9yeSA9IG1fZGlzY2FyZGFibGUtPmRhdGEoKTsKLQotICAgICpjdGFi
bGUgPSBtX2NvbG9yVGFibGU7Ci0gICAgcmV0dXJuIG1fbG9ja2VkTWVtb3J5OwotfQotCi12b2lk
IERpc2NhcmRhYmxlUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKCkKLXsKLSAgICBpZiAobV9sb2Nr
ZWRNZW1vcnkpCi0gICAgICAgIG1fZGlzY2FyZGFibGUtPnVubG9jaygpOwotICAgIG1fbG9ja2Vk
TWVtb3J5ID0gMDsKLX0KLQotYm9vbCBEaXNjYXJkYWJsZVBpeGVsUmVmOjppc0Rpc2NhcmRhYmxl
KFNrUGl4ZWxSZWYqIHBpeGVsUmVmKQotewotICAgIC8vIEZJWE1FOiBERUZJTkVfU1RBVElDX0xP
Q0FMIGlzIG5vdCB0aHJlYWQgc2FmZS4KLSAgICAvLyBJbWFnZURlY29kaW5nU3RvcmUgcHJvdmlk
ZXMgdGhlIHN5bmNocm9uaXphdGlvbiBmb3IgdGhpcy4KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IFNrU3RyaW5nLCBkaXNjYXJkYWJsZSwgKGxhYmVsRGlzY2FyZGFibGUpKTsKLSAgICBy
ZXR1cm4gcGl4ZWxSZWYgJiYgcGl4ZWxSZWYtPmdldFVSSSgpICYmIGRpc2NhcmRhYmxlLmVxdWFs
cyhwaXhlbFJlZi0+Z2V0VVJJKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EaXNjYXJkYWJsZVBp
eGVsUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRGlzY2FyZGFibGVQaXhlbFJlZi5oCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EaXNjYXJkYWJsZVBpeGVsUmVm
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRGlz
Y2FyZGFibGVQaXhlbFJlZl9oCi0jZGVmaW5lIERpc2NhcmRhYmxlUGl4ZWxSZWZfaAotCi0jaW5j
bHVkZSAiU2tCaXRtYXAuaCIKLSNpbmNsdWRlICJTa1BpeGVsUmVmLmgiCi0KLSNpbmNsdWRlIDxw
dWJsaWMvV2ViRGlzY2FyZGFibGVNZW1vcnkuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBD
bGFzcyBmb3IgYWxsb2NhdGluZyB0aGUgRGlzY2FyZGFibGVQaXhlbFJlZiBvYmplY3QuCi1jbGFz
cyBEaXNjYXJkYWJsZVBpeGVsUmVmQWxsb2NhdG9yIDogcHVibGljIFNrQml0bWFwOjpBbGxvY2F0
b3IgewotICAgIC8vIFNrQml0bWFwOjpBbGxvY2F0b3IgaW1wbGVtZW50YXRpb24uIFRoZSBkaXNj
YXJkYWJsZSBtZW1vcnkgYWxsb2NhdGVkCi0gICAgLy8gYWZ0ZXIgdGhpcyBjYWxsIGlzIGxvY2tl
ZCBhbmQgd2lsbCBub3QgYmUgcHVyZ2VkIHVudGlsIG5leHQKLSAgICAvLyBvblVubG9ja1BpeGVs
cygpLgotICAgIHZpcnR1YWwgYm9vbCBhbGxvY1BpeGVsUmVmKFNrQml0bWFwKiwgU2tDb2xvclRh
YmxlKik7Ci19OwotCi0vLyBQaXhlbFJlZiBvYmplY3Qgd2hvc2UgbWVtb3J5IGNhbiBiZSBkaXNj
YXJkZWQgd2hlbiBwaXhlbHMgYXJlIHVubG9ja2VkLgotY2xhc3MgRGlzY2FyZGFibGVQaXhlbFJl
ZiA6IHB1YmxpYyBTa1BpeGVsUmVmIHsKLXB1YmxpYzoKLSAgICBEaXNjYXJkYWJsZVBpeGVsUmVm
KFNrQ29sb3JUYWJsZSosIFBhc3NPd25QdHI8U2tNdXRleD4pOwotICAgIH5EaXNjYXJkYWJsZVBp
eGVsUmVmKCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0Rpc2NhcmRhYmxlKFNrUGl4ZWxSZWYqKTsK
LSAgICBib29sIGFsbG9jQW5kTG9ja0Rpc2NhcmRhYmxlTWVtb3J5KHNpemVfdCk7Ci0KLSAgICBT
S19ERUNMQVJFX1VORkxBVFRFTkFCTEVfT0JKRUNUKCkKLQotcHJvdGVjdGVkOgotICAgIC8vIFNr
UGl4ZWxSZWYgaW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVhbCB2b2lkKiBvbkxvY2tQaXhlbHMo
U2tDb2xvclRhYmxlKiopOwotICAgIHZpcnR1YWwgdm9pZCBvblVubG9ja1BpeGVscygpOwotCi1w
cml2YXRlOgotICAgIFNrQ29sb3JUYWJsZSogbV9jb2xvclRhYmxlOwotICAgIHZvaWQqIG1fbG9j
a2VkTWVtb3J5OwotICAgIE93blB0cjxXZWJLaXQ6OldlYkRpc2NhcmRhYmxlTWVtb3J5PiBtX2Rp
c2NhcmRhYmxlOwotICAgIE93blB0cjxTa011dGV4PiBtX211dGV4OwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNo
cm9taXVtLmNwcAkocmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwyNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJEcmF3
aW5nQnVmZmVyLmgiCi0KLSNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5j
bHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKLSNpbmNsdWRl
IDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8cHVi
bGljL1dlYkNvbXBvc2l0b3JTdXBwb3J0Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYkV4dGVybmFs
VGV4dHVyZUxheWVyLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYkV4dGVybmFsVGV4dHVyZUxheWVy
Q2xpZW50Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIHVuc2ln
bmVkIGdlbmVyYXRlQ29sb3JUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25z
dCBJbnRTaXplJiBzaXplKQotewotICAgIHVuc2lnbmVkIG9mZnNjcmVlbkNvbG9yVGV4dHVyZSA9
IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKLSAgICBpZiAoIW9mZnNjcmVlbkNvbG9yVGV4dHVy
ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2Zmc2NyZWVuQ29sb3JUZXh0dXJlKTsKLSAgICBjb250
ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFS
KTsKLSAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6TElORUFSKTsKLSAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBjb250ZXh0
LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpOwotCi0gICAgcmV0dXJuIG9mZnNjcmVlbkNvbG9yVGV4dHVyZTsKLX0KLQotRHJhd2luZ0J1
ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25T
dXBwb3J0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXNlcnZlRHJhd2luZ0J1
ZmZlciBwcmVzZXJ2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxwaGFSZXF1aXJl
bWVudCBhbHBoYSkKLSAgICA6IG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyKHByZXNlcnZlKQotICAg
ICwgbV9hbHBoYShhbHBoYSkKLSAgICAsIG1fc2Npc3NvckVuYWJsZWQoZmFsc2UpCi0gICAgLCBt
X3RleHR1cmUyREJpbmRpbmcoMCkKLSAgICAsIG1fZnJhbWVidWZmZXJCaW5kaW5nKDApCi0gICAg
LCBtX2FjdGl2ZVRleHR1cmVVbml0KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkKLSAgICAs
IG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9zaXplKC0xLCAtMSkKLSAgICAsIG1fbXVsdGlz
YW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCi0g
ICAgLCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0
ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCi0gICAgLCBtX2ZibygwKQotICAgICwgbV9jb2xvckJ1
ZmZlcigwKQotICAgICwgbV9mcm9udENvbG9yQnVmZmVyKDApCi0gICAgLCBtX2RlcHRoU3RlbmNp
bEJ1ZmZlcigwKQotICAgICwgbV9kZXB0aEJ1ZmZlcigwKQotICAgICwgbV9zdGVuY2lsQnVmZmVy
KDApCi0gICAgLCBtX211bHRpc2FtcGxlRkJPKDApCi0gICAgLCBtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIoMCkKLSAgICAsIG1fY29udGVudHNDaGFuZ2VkKHRydWUpCi17Ci0gICAgLy8gVXNlZCBi
eSBicm93c2VyIHRlc3RzIHRvIGRldGVjdCB0aGUgdXNlIG9mIGEgRHJhd2luZ0J1ZmZlci4KLSAg
ICBUUkFDRV9FVkVOVF9JTlNUQU5UMCgidGVzdF9ncHUiLCAiRHJhd2luZ0J1ZmZlckNyZWF0aW9u
Iik7Ci0KLSAgICAvLyBXZSBuZWVkIGEgc2VwYXJhdGUgZnJvbnQgYW5kIGJhY2sgdGV4dHVyZXMg
aWYgLi4uCi0gICAgbV9zZXBhcmF0ZUZyb250VGV4dHVyZSA9IG1fcHJlc2VydmVEcmF3aW5nQnVm
ZmVyID09IFByZXNlcnZlIC8vIC4uLiB3ZSBoYXZlIHRvIHByZXNlcnZlIGNvbnRlbnRzIGFmdGVy
IGNvbXBvc2l0aW5nLCB3aGljaCBpcyBkb25lIHdpdGggYSBjb3B5IG9yIC4uLgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmlzVGhy
ZWFkZWRDb21wb3NpdGluZ0VuYWJsZWQoKTsgLy8gLi4uIGlmIHdlJ3JlIGluIHRocmVhZGVkIG1v
ZGUgYW5kIG5lZWQgdG8gZG91YmxlIGJ1ZmZlci4KLSAgICBpbml0aWFsaXplKHNpemUpOwotfQot
Ci1EcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZlcigpCi17Ci0gICAgaWYgKCFtX2NvbnRleHQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNsZWFyKCk7Ci19Ci0KLXZvaWQgRHJhd2luZ0J1ZmZl
cjo6aW5pdGlhbGl6ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIG1fZmJvID0gbV9jb250
ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKG1fc2VwYXJhdGVGcm9udFRleHR1
cmUpCi0gICAgICAgIG1fZnJvbnRDb2xvckJ1ZmZlciA9IGdlbmVyYXRlQ29sb3JUZXh0dXJlKG1f
Y29udGV4dC5nZXQoKSwgc2l6ZSk7Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBtX2NvbG9yQnVmZmVy
ID0gZ2VuZXJhdGVDb2xvclRleHR1cmUobV9jb250ZXh0LmdldCgpLCBzaXplKTsKLSAgICBtX2Nv
bnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlciwgMCk7Ci0gICAgY3JlYXRlU2Vjb25kYXJ5QnVm
ZmVycygpOwotICAgIGlmICghcmVzZXQoc2l6ZSkpIHsKLSAgICAgICAgbV9jb250ZXh0LmNsZWFy
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCi12b2lkIERyYXdpbmdCdWZmZXI6OnByZXBhcmVCYWNrQnVmZmVyKCkKLXsKLSAg
ICBpZiAoIW1fY29udGVudHNDaGFuZ2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKG11bHRpc2FtcGxlKCkpCi0gICAg
ICAgIGNvbW1pdCgpOwotCi0gICAgaWYgKG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IERpc2Nh
cmQgJiYgbV9zZXBhcmF0ZUZyb250VGV4dHVyZSkgewotICAgICAgICBzd2FwKG1fZnJvbnRDb2xv
ckJ1ZmZlciwgbV9jb2xvckJ1ZmZlcik7Ci0gICAgICAgIC8vIEl0IGFwcGVhcnMgc2FmZSB0byBv
dmVyd3JpdGUgdGhlIGNvbnRleHQncyBmcmFtZWJ1ZmZlciBiaW5kaW5nIGluIHRoZSBEaXNjYXJk
IGNhc2Ugc2luY2UgdGhlcmUgd2lsbCBhbHdheXMgYmUgYQotICAgICAgICAvLyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNsZWFySWZDb21wb3NpdGVkKCkgY2FsbCBtYWRlIGJlZm9yZSB0aGUgbmV4
dCBkcmF3IGNhbGwgd2hpY2ggcmVzdG9yZXMgdGhlIGZyYW1lYnVmZmVyIGJpbmRpbmcuCi0gICAg
ICAgIC8vIElmIHRoaXMgc3RvcHMgYmVpbmcgdHJ1ZSBhdCBzb21lIHBvaW50LCB3ZSBzaG91bGQg
dHJhY2sgdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIgYmluZGluZyBpbiB0aGUgRHJhd2luZ0J1ZmZl
ciBhbmQgcmVzdG9yZQotICAgICAgICAvLyBpdCBhZnRlciBhdHRhY2hpbmcgdGhlIG5ldyBiYWNr
IGJ1ZmZlciBoZXJlLgotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNz
Q29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIG1fY29sb3JCdWZmZXIsIDApOwotICAgIH0KLQotICAgIGlmIChtdWx0aXNhbXBsZSgpICYm
ICFtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgYmluZCgpOwotICAgIGVsc2UKLSAgICAg
ICAgcmVzdG9yZUZyYW1lYnVmZmVyQmluZGluZygpOwotCi0gICAgbV9jb250ZW50c0NoYW5nZWQg
PSBmYWxzZTsKLX0KLQotYm9vbCBEcmF3aW5nQnVmZmVyOjpyZXF1aXJlc0NvcHlGcm9tQmFja1Rv
RnJvbnRCdWZmZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX3NlcGFyYXRlRnJvbnRUZXh0dXJl
ICYmIG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IFByZXNlcnZlOwotfQotCi11bnNpZ25lZCBE
cmF3aW5nQnVmZmVyOjpmcm9udENvbG9yQnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9z
ZXBhcmF0ZUZyb250VGV4dHVyZSA/IG1fZnJvbnRDb2xvckJ1ZmZlciA6IG1fY29sb3JCdWZmZXI7
Ci19Ci0jZW5kaWYKLQotY2xhc3MgRHJhd2luZ0J1ZmZlclByaXZhdGUgOiBwdWJsaWMgV2ViS2l0
OjpXZWJFeHRlcm5hbFRleHR1cmVMYXllckNsaWVudCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRHJhd2luZ0J1ZmZlclByaXZhdGUpOwotcHVibGljOgotICAgIGV4cGxpY2l0IERyYXdpbmdC
dWZmZXJQcml2YXRlKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCi0gICAgICAgIDogbV9k
cmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCi0gICAgICAgICwgbV9sYXllcihhZG9wdFB0cihX
ZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNvbXBvc2l0b3JTdXBwb3J0KCktPmNyZWF0ZUV4
dGVybmFsVGV4dHVyZUxheWVyKHRoaXMpKSkKLSAgICB7Ci0KLSAgICAgICAgR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IG1fZHJhd2luZ0J1ZmZlci0+Z3JhcGhpY3ND
b250ZXh0M0QoKS0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgbV9sYXllci0+c2V0
T3BhcXVlKCFhdHRyaWJ1dGVzLmFscGhhKTsKLSAgICAgICAgbV9sYXllci0+c2V0UHJlbXVsdGlw
bGllZEFscGhhKGF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhKTsKLSAgICAgICAgR3JhcGhp
Y3NMYXllckNocm9taXVtOjpyZWdpc3RlckNvbnRlbnRzTGF5ZXIobV9sYXllci0+bGF5ZXIoKSk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB+RHJhd2luZ0J1ZmZlclByaXZhdGUoKQotICAgIHsKLSAg
ICAgICAgR3JhcGhpY3NMYXllckNocm9taXVtOjp1bnJlZ2lzdGVyQ29udGVudHNMYXllcihtX2xh
eWVyLT5sYXllcigpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHByZXBhcmVUZXh0
dXJlKFdlYktpdDo6V2ViVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIpIE9WRVJSSURFCi0gICAgewot
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnByZXBhcmVCYWNrQnVmZmVyKCk7Ci0KLSAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5ncmFwaGljc0NvbnRleHQzRCgpLT5mbHVzaCgpOwotICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPmdyYXBoaWNzQ29udGV4dDNEKCktPm1hcmtMYXllckNvbXBvc2l0ZWQo
KTsKLQotICAgICAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSBtX2RyYXdpbmdCdWZmZXItPmZyb250
Q29sb3JCdWZmZXIoKTsKLSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlci0+cmVxdWlyZXNDb3B5
RnJvbUJhY2tUb0Zyb250QnVmZmVyKCkpCi0gICAgICAgICAgICB1cGRhdGVyLmFwcGVuZENvcHko
bV9kcmF3aW5nQnVmZmVyLT5jb2xvckJ1ZmZlcigpLCB0ZXh0dXJlSWQsIG1fZHJhd2luZ0J1ZmZl
ci0+c2l6ZSgpKTsKLQotICAgICAgICByZXR1cm4gdGV4dHVyZUlkOwotICAgIH0KLQotICAgIHZp
cnR1YWwgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIE9WRVJSSURFCi0g
ICAgewotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2Vi
R3JhcGhpY3NDb250ZXh0M0QobV9kcmF3aW5nQnVmZmVyLT5ncmFwaGljc0NvbnRleHQzRCgpKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyVGV4dHVyZUlkKCkKLSAgICB7Ci0gICAgICAgIG1fbGF5
ZXItPnNldFRleHR1cmVJZCgwKTsKLSAgICB9Ci0KLSAgICBXZWJLaXQ6OldlYkxheWVyKiBsYXll
cigpIHsgcmV0dXJuIG1fbGF5ZXItPmxheWVyKCk7IH0KLQotcHJpdmF0ZToKLSAgICBEcmF3aW5n
QnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7Ci0gICAgT3duUHRyPFdlYktpdDo6V2ViRXh0ZXJuYWxU
ZXh0dXJlTGF5ZXI+IG1fbGF5ZXI7Ci19OwotCi1QbGF0Zm9ybTNET2JqZWN0IERyYXdpbmdCdWZm
ZXI6OmZyYW1lYnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mYm87Ci19Ci0KLSNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1QbGF0Zm9ybUxheWVyKiBEcmF3aW5nQnVmZmVy
OjpwbGF0Zm9ybUxheWVyKCkKLXsKLSAgICBpZiAoIW1fcHJpdmF0ZSkKLSAgICAgICAgbV9wcml2
YXRlID0gYWRvcHRQdHIobmV3IERyYXdpbmdCdWZmZXJQcml2YXRlKHRoaXMpKTsKLQotICAgIHJl
dHVybiBtX3ByaXZhdGUtPmxheWVyKCk7Ci19Ci0KLXZvaWQgRHJhd2luZ0J1ZmZlcjo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKLXsKLSAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkgfHwgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9fRVJST1IpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNpbmNlIHdlJ3JlIHVz
aW5nIHRoZSBzYW1lIGNvbnRleHQgYXMgV2ViR0wsIHdlIGhhdmUgdG8gcmVzdG9yZSBhbnkgc3Rh
dGUgd2UgY2hhbmdlIChpbiB0aGlzIGNhc2UsIGp1c3QgdGhlIGZyYW1lYnVmZmVyIGJpbmRpbmcp
LgotICAgIC8vIEZJWE1FOiBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRyYWNrcyB0aGUgY3Vy
cmVudCBmcmFtZWJ1ZmZlciBiaW5kaW5nLCBpdCB3b3VsZCBiZSBzbGlnaHRseSBtb3JlIGVmZmlj
aWVudCB0byB1c2UgdGhpcyB2YWx1ZQotICAgIC8vIHJhdGhlciB0aGFuIHF1ZXJ5aW5nIGl0IG9m
ZiBvZiB0aGUgY29udGV4dC4KLSAgICBHQzNEaW50IHByZXZpb3VzRnJhbWVidWZmZXIgPSAwOwot
ICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0JJTkRJTkcsICZwcmV2aW91c0ZyYW1lYnVmZmVyKTsKLQotICAgIFBsYXRmb3JtM0RPYmplY3Qg
ZnJhbWVidWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBmcmFt
ZWJ1ZmZlcik7Ci0gICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5U
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGZyb250Q29sb3JCdWZmZXIoKSwgMCk7
Ci0KLSAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4
dGVuc2lvbnMzRENocm9taXVtKj4obV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpOwotICAgIGV4
dGVuc2lvbnMtPnBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhmcmFtZWJ1ZmZlciwgc2l6ZSgpLndp
ZHRoKCksIHNpemUoKS5oZWlnaHQoKSwgIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KS5wcmVtdWx0aXBsaWVkQWxwaGEsIGltYWdlQnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPmRlbGV0
ZUZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKLQotICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgcHJldmlvdXNGcmFtZWJ1ZmZlcik7
Ci19Ci0KLXZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXJQbGF0Zm9ybUxheWVyKCkKLXsKLSAgICBp
ZiAobV9wcml2YXRlKQotICAgICAgICBtX3ByaXZhdGUtPmNsZWFyVGV4dHVyZUlkKCk7Ci0KLSAg
ICBtX2NvbnRleHQtPmZsdXNoKCk7Ci19Ci0jZW5kaWYKLQotfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRl
bnNpb25zM0RDaHJvbWl1bS5oCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RDaHJvbWl1bS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDE2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeHRlbnNpb25zM0RDaHJv
bWl1bV9oCi0jZGVmaW5lIEV4dGVuc2lvbnMzRENocm9taXVtX2gKLQotI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTsKLWNsYXNzIEltYWdlQnVmZmVyOwotCi1jbGFzcyBFeHRlbnNpb25zM0RDaHJv
bWl1bSA6IHB1YmxpYyBFeHRlbnNpb25zM0QgewotcHVibGljOgotICAgIHZpcnR1YWwgfkV4dGVu
c2lvbnMzRENocm9taXVtKCk7Ci0KLSAgICAvLyBTdXBwb3J0ZWQgZXh0ZW5zaW9uczoKLSAgICAv
LyAgIEdMX0NIUk9NSVVNX3NoYWxsb3dfZmx1c2ggIDogb25seSBzdXBwb3J0ZWQgaWYgYW4gaXBj
IGNvbW1hbmQgYnVmZmVyIGlzIHVzZWQuCi0gICAgLy8gICBHTF9DSFJPTUlVTV9yZXNvdXJjZV9z
YWZlICA6IGluZGljYXRpbmcgdGhhdCB0ZXh0dXJlcy9yZW5kZXJidWZmZXJzIGFyZSBhbHdheXMg
aW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWQvd3JpdGUuCi0gICAgLy8gICBHTF9DSFJPTUlVTV9zdHJp
Y3RfYXR0cmlicyA6IGluZGljYXRpbmcgYSBHTCBlcnJvciBpcyBnZW5lcmF0ZWQgZm9yIG91dC1v
Zi1ib3VuZHMgYnVmZmVyIGFjY2Vzc2VzLgotICAgIC8vICAgR0xfQ0hST01JVU1fcG9zdF9zdWJf
YnVmZmVyCi0gICAgLy8gICBHTF9DSFJPTUlVTV9tYXBfc3ViCi0gICAgLy8gICBHTF9DSFJPTUlV
TV9zd2FwYnVmZmVyc19jb21wbGV0ZV9jYWxsYmFjawotICAgIC8vICAgR0xfQ0hST01JVU1fcmF0
ZV9saW1pdF9vZmZzY3JlZW5fY29udGV4dAotICAgIC8vICAgR0xfQ0hST01JVU1fcGFpbnRfZnJh
bWVidWZmZXJfY2FudmFzCi0gICAgLy8gICBHTF9DSFJPTUlVTV9pb3N1cmZhY2UgKE1hYyBPUyBY
IHNwZWNpZmljKQotICAgIC8vICAgR0xfQ0hST01JVU1fY29tbWFuZF9idWZmZXJfcXVlcnkKLSAg
ICAvLyAgIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UKLSAgICAvLyAgIEdMX0VYVF9kZWJ1Z19tYXJr
ZXIKLSAgICAvLyAgIEdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UKLSAgICAvLyAgIEdMX0VYVF9vY2Ns
dXNpb25fcXVlcnlfYm9vbGVhbgotCi0gICAgLy8gRXh0ZW5zaW9uczNEIG1ldGhvZHMuCi0gICAg
dmlydHVhbCBib29sIHN1cHBvcnRzKGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBl
bnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQo
Y29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FS
QigpOwotICAgIHZpcnR1YWwgdm9pZCBibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBz
cmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9u
ZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZp
bHRlcik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25n
IGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdo
dCk7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCk7
Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3Qp
OwotICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2Jq
ZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmpl
Y3QpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQ
bGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0J1ZmZlcnNFWFQoR0MzRHNp
emVpLCBjb25zdCBHQzNEZW51bSopOwotCi0gICAgZW51bSB7Ci0gICAgICAgIC8vIEdMX09FU19F
R0xfaW1hZ2VfZXh0ZXJuYWwKLSAgICAgICAgR0xfVEVYVFVSRV9FWFRFUk5BTF9PRVMgPSAweDhE
NjUsCi0KLSAgICAgICAgLy8gR0xfQ0hST01JVU1fbWFwX3N1YiAoZW51bXMgaW5oZXJpdGVkIGZy
b20gR0xfQVJCX3ZlcnRleF9idWZmZXJfb2JqZWN0KQotICAgICAgICBSRUFEX09OTFkgPSAweDg4
QjgsCi0gICAgICAgIFdSSVRFX09OTFkgPSAweDg4QjksCi0KLSAgICAgICAgLy8gR0xfQU5HTEVf
dGV4dHVyZV91c2FnZQotICAgICAgICBHTF9URVhUVVJFX1VTQUdFX0FOR0xFID0gMHg5M0EyLAot
ICAgICAgICBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFID0gMHg5M0EzLAotCi0gICAg
ICAgIC8vIEdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UKLSAgICAgICAgQkdSQThfRVhUID0gMHg5M0Ex
LAotCi0gICAgICAgIC8vIEdMX0VYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbgotICAgICAgICBB
TllfU0FNUExFU19QQVNTRURfRVhUID0gMHg4QzJGLAotICAgICAgICBBTllfU0FNUExFU19QQVNT
RURfQ09OU0VSVkFUSVZFX0VYVCA9IDB4OEQ2QSwKLSAgICAgICAgQ1VSUkVOVF9RVUVSWV9FWFQg
PSAweDg4NjUsCi0gICAgICAgIFFVRVJZX1JFU1VMVF9FWFQgPSAweDg4NjYsCi0gICAgICAgIFFV
RVJZX1JFU1VMVF9BVkFJTEFCTEVfRVhUID0gMHg4ODY3LAotCi0gICAgICAgIC8vIEdMX0NIUk9N
SVVNX2NvbW1hbmRfYnVmZmVyX3F1ZXJ5Ci0gICAgICAgIENPTU1BTkRTX0lTU1VFRF9DSFJPTUlV
TSA9IDB4ODRGMgotICAgIH07Ci0KLSAgICAvLyBHTF9DSFJPTUlVTV9tYXBfc3ViCi0gICAgdm9p
ZCogbWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKHVuc2lnbmVkIHRhcmdldCwgaW50IG9mZnNldCwg
aW50IHNpemUsIHVuc2lnbmVkIGFjY2Vzcyk7Ci0gICAgdm9pZCB1bm1hcEJ1ZmZlclN1YkRhdGFD
SFJPTUlVTShjb25zdCB2b2lkKik7Ci0gICAgdm9pZCogbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVN
KHVuc2lnbmVkIHRhcmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB1bnNp
Z25lZCBhY2Nlc3MpOwotICAgIHZvaWQgdW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oY29uc3Qg
dm9pZCopOwotCi0gICAgLy8gR0xfQ0hST01JVU1fcmF0ZV9saW1pdF9vZmZzY3JlZW5fY29udGV4
dAotICAgIHZvaWQgcmF0ZUxpbWl0T2Zmc2NyZWVuQ29udGV4dENIUk9NSVVNKCk7Ci0KLSAgICAv
LyBHTF9DSFJPTUlVTV9wYWludF9mcmFtZWJ1ZmZlcl9jYW52YXMKLSAgICB2b2lkIHBhaW50RnJh
bWVidWZmZXJUb0NhbnZhcyhpbnQgZnJhbWVidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBJbWFnZUJ1ZmZlciopOwotCi0gICAgLy8gR0xfQ0hST01J
VU1faW9zdXJmYWNlCi0gICAgLy8gVG8gYXZvaWQgbmVlZGluZyB0byBleHBvc2UgZXh0cmFuZW91
cyBlbnVtcywgYXNzdW1lcyBpbnRlcm5hbCBmb3JtYXQKLSAgICAvLyBSR0JBLCBmb3JtYXQgQkdS
QSwgYW5kIHR5cGUgVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLgotICAgIHZvaWQgdGV4SW1hZ2VJ
T1N1cmZhY2UyRENIUk9NSVVNKHVuc2lnbmVkIHRhcmdldCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCB1aW50MzJfdCBpb1N1cmZhY2VJZCwgdW5zaWduZWQgcGxhbmUpOwotCi0gICAgLy8gR0xfRVhU
X3RleHR1cmVfc3RvcmFnZQotICAgIHZvaWQgdGV4U3RvcmFnZTJERVhUKHVuc2lnbmVkIHRhcmdl
dCwgaW50IGxldmVscywgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIGludCB3aWR0aCwgaW50IGhl
aWdodCk7Ci0KLSAgICAvLyBHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5Ci0gICAgUGxhdGZvcm0zRE9i
amVjdCBjcmVhdGVRdWVyeUVYVCgpOwotICAgIHZvaWQgZGVsZXRlUXVlcnlFWFQoUGxhdGZvcm0z
RE9iamVjdCk7Ci0gICAgR0MzRGJvb2xlYW4gaXNRdWVyeUVYVChQbGF0Zm9ybTNET2JqZWN0KTsK
LSAgICB2b2lkIGJlZ2luUXVlcnlFWFQoR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QpOwotICAg
IHZvaWQgZW5kUXVlcnlFWFQoR0MzRGVudW0pOwotICAgIHZvaWQgZ2V0UXVlcnlpdkVYVChHQzNE
ZW51bSwgR0MzRGVudW0sIEdDM0RpbnQqKTsKLSAgICB2b2lkIGdldFF1ZXJ5T2JqZWN0dWl2RVhU
KFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBHQzNEdWludCopOwotCi0gICAgLy8gR0xfQ0hS
T01JVU1fY29weV90ZXh0dXJlCi0gICAgdm9pZCBjb3B5VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVt
LCBQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSk7
Ci0KLSAgICAvLyBHTF9DSFJPTUlVTV9zaGFsbG93X2ZsdXNoCi0gICAgdmlydHVhbCB2b2lkIHNo
YWxsb3dGbHVzaENIUk9NSVVNKCk7Ci0KLSAgICAvLyBHTF9FWFRfcm9idXN0bmVzcwotICAgIHZp
cnR1YWwgdm9pZCByZWFkblBpeGVsc0VYVChpbnQgeCwgaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6
ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSk7Ci0gICAgdmlydHVhbCB2b2lkIGdldG5Vbmlmb3JtZnZF
WFQoR0MzRHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxv
YXQgKnBhcmFtcyk7Ci0gICAgdmlydHVhbCB2b2lkIGdldG5Vbmlmb3JtaXZFWFQoR0MzRHVpbnQg
cHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgaW50ICpwYXJhbXMpOwot
Ci0gICAgLy8gR0xfRVhUX2RlYnVnX21hcmtlcgotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRFdmVu
dE1hcmtlckVYVChjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHVzaEdyb3VwTWFy
a2VyRVhUKGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBwb3BHcm91cE1hcmtlckVY
VCh2b2lkKTsKLQotICAgIC8vIFNvbWUgaGVscGVyIG1ldGhvZHMgdG8gZGV0ZWN0IEdQVSBmdW5j
dGlvbmFsaXR5Ci0gICAgdmlydHVhbCBib29sIGlzTlZJRElBKCkgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNBTUQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBpc0ludGVsKCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyB2ZW5k
b3IoKSB7IHJldHVybiAiIjsgfQotCi0gICAgdmlydHVhbCBib29sIG1heVN1cHBvcnRNdWx0aXNh
bXBsaW5nKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0J1aWx0
SW5GdW5jdGlvbkVtdWxhdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByaXZhdGU6Ci0gICAg
Ly8gSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlIHN0cmljdGx5IG93bmVkIGJ5IHRoZSBHcmFw
aGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbiBhbmQgZG8gbm90Ci0gICAgLy8gbmVlZCB0byBi
ZSBpbnN0YW50aWF0ZWQgYnkgYW55IG90aGVyIGNvZGUuCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTsKLSAgICBleHBsaWNpdCBFeHRlbnNpb25zM0RDaHJvbWl1bShH
cmFwaGljc0NvbnRleHQzRFByaXZhdGUqKTsKLQotICAgIC8vIFdlYWsgcG9pbnRlciBiYWNrIHRv
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZQotICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSog
bV9wcml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRXh0
ZW5zaW9uczNEQ2hyb21pdW1faApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udENhY2hlQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQW5kcm9pZC5jcHAJKHJl
dmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRDYWNoZUFuZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxMyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotCi0jaW5jbHVkZSAi
Rm9udC5oIgotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkZvbnRQbGF0
Zm9ybURhdGEuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCi0KLSNpbmNsdWRlICJTa1BhaW50LmgiCi0jaW5jbHVkZSAiU2tUeXBlZmFj
ZV9hbmRyb2lkLmgiCi0jaW5jbHVkZSAiU2tVdGlscy5oIgotCi0jaW5jbHVkZSA8dW5pY29kZS9s
b2NpZC5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBnZXRGYWxsYmFja0ZvbnROYW1lKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQotewotICAgIHN3aXRjaCAoZm9u
dERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSkgewotICAgIGNhc2UgRm9udERlc2NyaXB0aW9u
OjpTdGFuZGFyZEZhbWlseToKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHk6
Ci0gICAgICAgIHJldHVybiAic2VyaWYiOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTYW5z
U2VyaWZGYW1pbHk6Ci0gICAgICAgIHJldHVybiAic2Fucy1zZXJpZiI7Ci0gICAgY2FzZSBGb250
RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseToKLSAgICAgICAgcmV0dXJuICJtb25vc3BhY2Ui
OwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpDdXJzaXZlRmFtaWx5OgotICAgICAgICByZXR1
cm4gImN1cnNpdmUiOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpGYW50YXN5RmFtaWx5Ogot
ICAgICAgICByZXR1cm4gImZhbnRhc3kiOwotICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb0Zh
bWlseToKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfQotfQotCi1zdGF0
aWMgYm9vbCBpc0ZhbGxiYWNrRmFtaWx5KFN0cmluZyBmYW1pbHkpCi17Ci0gICAgcmV0dXJuIGZh
bWlseS5zdGFydHNXaXRoKCItd2Via2l0LSIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNl
KGZhbWlseSwgInNlcmlmIikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCAi
c2Fucy1zZXJpZiIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgInNhbnMi
KQotICAgICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksICJtb25vc3BhY2UiKQotICAg
ICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksICJjdXJzaXZlIikKLSAgICAgICAgfHwg
ZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCAiZmFudGFzeSIpCi0gICAgICAgIHx8IGVxdWFsSWdu
b3JpbmdDYXNlKGZhbWlseSwgInRpbWVzIikgLy8gU2tpYSBhbGlhc2VzIGZvciBzZXJpZgotICAg
ICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksICJ0aW1lcyBuZXcgcm9tYW4iKQotICAg
ICAgICB8fCBlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksICJwYWxhdGlubyIpCi0gICAgICAgIHx8
IGVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgImdlb3JnaWEiKQotICAgICAgICB8fCBlcXVhbEln
bm9yaW5nQ2FzZShmYW1pbHksICJiYXNrZXJ2aWxsZSIpCi0gICAgICAgIHx8IGVxdWFsSWdub3Jp
bmdDYXNlKGZhbWlseSwgImdvdWR5IikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFt
aWx5LCAiSVRDIFN0b25lIFNlcmlmIikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZmFt
aWx5LCAiYXJpYWwiKSAvLyBTa2lhIGFsaWFzZXMgZm9yIHNhbnMtc2VyaWYKLSAgICAgICAgfHwg
ZXF1YWxJZ25vcmluZ0Nhc2UoZmFtaWx5LCAiaGVsdmV0aWNhIikKLSAgICAgICAgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UoZmFtaWx5LCAidGFob21hIikKLSAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UoZmFtaWx5LCAidmVyZGFuYSIpCi0gICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKGZhbWls
eSwgImNvdXJpZXIiKSAvLyBTa2lhIGFsaWFzZXMgZm9yIG1vbm9zcGFjZQotICAgICAgICB8fCBl
cXVhbElnbm9yaW5nQ2FzZShmYW1pbHksICJjb3VyaWVyIG5ldyIpCi0gICAgICAgIHx8IGVxdWFs
SWdub3JpbmdDYXNlKGZhbWlseSwgIm1vbmFjbyIpOwotfQotCi12b2lkIEZvbnRDYWNoZTo6cGxh
dGZvcm1Jbml0KCkKLXsKLX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hl
OjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgU2tVbmljaGFyIHNraWFDaGFyOwotICAgIGlmIChVMTZfSVNfTEVBRChj
aGFyYWN0ZXJzWzBdKSkgewotICAgICAgICBBU1NFUlQobGVuZ3RoID49IDIpOwotICAgICAgICBz
a2lhQ2hhciA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShjaGFyYWN0ZXJzWzBdLCBjaGFyYWN0ZXJz
WzFdKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2tpYUNoYXIgPSBjaGFyYWN0ZXJzWzBdOwotCi0g
ICAgU2tTdHJpbmcgc2tpYUZhbWlseU5hbWU7Ci0gICAgaWYgKCFTa0dldEZhbGxiYWNrRmFtaWx5
TmFtZUZvckNoYXIoc2tpYUNoYXIsICZza2lhRmFtaWx5TmFtZSkgfHwgc2tpYUZhbWlseU5hbWUu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udERh
dGEoZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBBdG9t
aWNTdHJpbmcoc2tpYUZhbWlseU5hbWUuY19zdHIoKSksIERvTm90UmV0YWluKSwgRG9Ob3RSZXRh
aW4pOwotfQotCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6OmdldFNpbWls
YXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCi17Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZh
bGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBTaG91bGRSZXRh
aW4gc2hvdWxkUmV0YWluKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWlj
U3RyaW5nLCBzZXJpZiwgKCJTZXJpZiIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgbW9ub3Nw
YWNlLCAoIk1vbm9zcGFjZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsK
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgc2FucywgKCJTYW5z
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotCi0gICAgRm9udFBsYXRm
b3JtRGF0YSogZm9udFBsYXRmb3JtRGF0YSA9IDA7Ci0gICAgc3dpdGNoIChkZXNjcmlwdGlvbi5n
ZW5lcmljRmFtaWx5KCkpIHsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHk6
Ci0gICAgICAgIGZvbnRQbGF0Zm9ybURhdGEgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGRl
c2NyaXB0aW9uLCBzZXJpZik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udERlc2NyaXB0
aW9uOjpNb25vc3BhY2VGYW1pbHk6Ci0gICAgICAgIGZvbnRQbGF0Zm9ybURhdGEgPSBnZXRDYWNo
ZWRGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uLCBtb25vc3BhY2UpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5OgotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGZvbnRQbGF0Zm9ybURhdGEgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRh
KGRlc2NyaXB0aW9uLCBzYW5zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgQVNTRVJU
KGZvbnRQbGF0Zm9ybURhdGEpOwotICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShmb250UGxh
dGZvcm1EYXRhLCBzaG91bGRSZXRhaW4pOwotfQotCi12b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRz
SW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBWZWN0b3I8dW5zaWduZWQ+
JiB0cmFpdHNNYXNrcykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1QYXNzT3duUHRy
PEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBm
YW1pbHkpCi17Ci0gICAgY29uc3QgY2hhciogbmFtZSA9IDA7Ci0gICAgQ1N0cmluZyBuYW1lU3Ry
aW5nOyAvLyBLZWVwcyBuYW1lIHZhbGlkIHdpdGhpbiBzY29wZSBvZiB0aGlzIGZ1bmN0aW9uIGlu
IGNhc2UgdGhhdCBuYW1lIGlzIGZyb20gYSBmYW1pbHkuCi0KLSAgICAvLyBJZiBhIGZhbGxiYWNr
IGZvbnQgaXMgYmVpbmcgY3JlYXRlZCAoZS5nLiAiLXdlYmtpdC1tb25vc3BhY2UiKSwgY29udmVy
dAotICAgIC8vIGl0IGluIHRvIHRoZSBmYWxsYmFjayBuYW1lIChlLmcuICJtb25vc3BhY2UiKS4K
LSAgICBpZiAoIWZhbWlseS5sZW5ndGgoKSB8fCBmYW1pbHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0i
KSkKLSAgICAgICAgbmFtZSA9IGdldEZhbGxiYWNrRm9udE5hbWUoZm9udERlc2NyaXB0aW9uKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgbmFtZVN0cmluZyA9IGZhbWlseS5zdHJpbmcoKS51dGY4KCk7
Ci0gICAgICAgIG5hbWUgPSBuYW1lU3RyaW5nLmRhdGEoKTsKLSAgICB9Ci0KLSAgICBpbnQgc3R5
bGUgPSBTa1R5cGVmYWNlOjprTm9ybWFsOwotICAgIGlmIChmb250RGVzY3JpcHRpb24ud2VpZ2h0
KCkgPj0gRm9udFdlaWdodEJvbGQpCi0gICAgICAgIHN0eWxlIHw9IFNrVHlwZWZhY2U6OmtCb2xk
OwotICAgIGlmIChmb250RGVzY3JpcHRpb24uaXRhbGljKCkpCi0gICAgICAgIHN0eWxlIHw9IFNr
VHlwZWZhY2U6OmtJdGFsaWM7Ci0KLSAgICBTa1R5cGVmYWNlKiB0eXBlZmFjZSA9IDA7Ci0gICAg
Rm9udFBsYXRmb3JtRGF0YSogcmVzdWx0ID0gMDsKLSAgICBGYWxsYmFja1NjcmlwdHMgZmFsbGJh
Y2tTY3JpcHQgPSBTa0dldEZhbGxiYWNrU2NyaXB0RnJvbUlEKG5hbWUpOwotICAgIGlmIChTa1R5
cGVmYWNlX1ZhbGlkU2NyaXB0KGZhbGxiYWNrU2NyaXB0KSkgewotICAgICAgICB0eXBlZmFjZSA9
IFNrQ3JlYXRlVHlwZWZhY2VGb3JTY3JpcHQoZmFsbGJhY2tTY3JpcHQpOwotICAgICAgICBpZiAo
dHlwZWZhY2UpCi0gICAgICAgICAgICByZXN1bHQgPSBuZXcgRm9udFBsYXRmb3JtRGF0YSh0eXBl
ZmFjZSwgbmFtZSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0eWxlICYgU2tUeXBlZmFjZTo6a0JvbGQp
ICYmICF0eXBlZmFjZS0+aXNCb2xkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc3R5bGUgJiBTa1R5cGVmYWNlOjprSXRhbGljKSAmJiAhdHlwZWZhY2UtPmlz
SXRhbGljKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdHlwZWZh
Y2UgPSBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tTmFtZShuYW1lLCBTa1R5cGVmYWNlOjprTm9ybWFs
KTsKLQotICAgICAgICAvLyBDcmVhdGVGcm9tTmFtZSBhbHdheXMgcmV0dXJucyBhIHR5cGVmYWNl
LCBmYWxsaW5nIGJhY2sgdG8gYSBkZWZhdWx0IGZvbnQKLSAgICAgICAgLy8gaWYgdGhlIG9uZSBy
ZXF1ZXN0ZWQgY291bGQgbm90IGJlIGZvdW5kLiBDYWxsaW5nIEVxdWFsKCkgd2l0aCBhIG51bGwK
LSAgICAgICAgLy8gcG9pbnRlciB3aWxsIGNvbXBhcmUgdGhlIHJldHVybmVkIGZvbnQgYWdhaW5z
dCB0aGUgZGVmYXVsdCwgd2l0aCB0aGUKLSAgICAgICAgLy8gY2F2ZWF0IHRoYXQgdGhlIGRlZmF1
bHQgaXMgYWx3YXlzIG9mIG5vcm1hbCBzdHlsZS4gV2hlbiB0aGF0IGhhcHBlbnMsCi0gICAgICAg
IC8vIGlnbm9yZSB0aGUgZGVmYXVsdCBmb250IGFuZCBhbGxvdyBXZWJDb3JlIHRvIHByb3ZpZGUg
dGhlIG5leHQgZm9udCBvbiB0aGUKLSAgICAgICAgLy8gQ1NTIGZhbGxiYWNrIGxpc3QuIFRoZSBv
bmx5IGV4Y2VwdGlvbiB0byB0aGlzIG9jY3VycyB3aGVuIHRoZSBmYW1pbHkgbmFtZQotICAgICAg
ICAvLyBpcyBhIGNvbW1vbmx5IHVzZWQgZ2VuZXJpYyBmYW1pbHksIHdoaWNoIGlzIHRoZSBjYXNl
IHdoZW4gY2FsbGVkIGJ5Ci0gICAgICAgIC8vIGdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKCkg
b3IgZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCgpLiBJbiB0aGF0IGNhc2UKLSAgICAgICAgLy8g
dGhlIGRlZmF1bHQgZm9udCBpcyBhbiBhY2NlcHRhYmxlIHJlc3VsdC4KLQotICAgICAgICBpZiAo
IVNrVHlwZWZhY2U6OkVxdWFsKHR5cGVmYWNlLCAwKSB8fCBpc0ZhbGxiYWNrRmFtaWx5KGZhbWls
eS5zdHJpbmcoKSkpIHsKLSAgICAgICAgICAgIC8vIFdlIGhhZCB0byB1c2Ugbm9ybWFsIHN0eWxp
bmcgdG8gc2VlIGlmIHRoaXMgd2FzIGEgZGVmYXVsdCBmb250LiBJZgotICAgICAgICAgICAgLy8g
d2UgbmVlZCBib2xkIG9yIGl0YWxpYywgcmVwbGFjZSB3aXRoIHRoZSBjb3JyZWN0ZWQgdHlwZWZh
Y2UuCi0gICAgICAgICAgICBpZiAoc3R5bGUgIT0gU2tUeXBlZmFjZTo6a05vcm1hbCkgewotICAg
ICAgICAgICAgICAgIHR5cGVmYWNlLT51bnJlZigpOwotICAgICAgICAgICAgICAgIHR5cGVmYWNl
ID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbU5hbWUobmFtZSwgc3RhdGljX2Nhc3Q8U2tUeXBlZmFj
ZTo6U3R5bGU+KHN0eWxlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQgPSBu
ZXcgRm9udFBsYXRmb3JtRGF0YSh0eXBlZmFjZSwgbmFtZSwgZm9udERlc2NyaXB0aW9uLmNvbXB1
dGVkU2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0
eWxlICYgU2tUeXBlZmFjZTo6a0JvbGQpICYmICF0eXBlZmFjZS0+aXNCb2xkKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUgJiBTa1R5cGVmYWNlOjpr
SXRhbGljKSAmJiAhdHlwZWZhY2UtPmlzSXRhbGljKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBTa1NhZmVVbnJlZih0eXBlZmFjZSk7Ci0gICAgcmV0dXJuIGFk
b3B0UHRyKHJlc3VsdCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtTGlu
dXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRDYWNoZUNocm9taXVtTGludXguY3BwCShyZXZpc2lvbiAxNDc3MzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1
bUxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgot
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLQotI2luY2x1
ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHB1YmxpYy9saW51eC9XZWJGb250RmFt
aWx5Lmg+Ci0jaW5jbHVkZSA8cHVibGljL2xpbnV4L1dlYkZvbnRJbmZvLmg+Ci0jaW5jbHVkZSA8
cHVibGljL2xpbnV4L1dlYlNhbmRib3hTdXBwb3J0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotdm9pZCBGb250Q2FjaGU6OmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbnVtQ2hhcmFjdGVycywgY29uc3QgY2hhciogcHJlZmVycmVk
TG9jYWxlLCBGb250Q2FjaGU6OlNpbXBsZUZvbnRGYW1pbHkqIGZhbWlseSkKLXsKLSAgICBXZWJL
aXQ6OldlYkZvbnRGYW1pbHkgd2ViRmFtaWx5OwotICAgIGlmIChXZWJLaXQ6OlBsYXRmb3JtOjpj
dXJyZW50KCktPnNhbmRib3hTdXBwb3J0KCkpCi0gICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1
cnJlbnQoKS0+c2FuZGJveFN1cHBvcnQoKS0+Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY2hh
cmFjdGVycywgbnVtQ2hhcmFjdGVycywgcHJlZmVycmVkTG9jYWxlLCAmd2ViRmFtaWx5KTsKLSAg
ICBlbHNlCi0gICAgICAgIFdlYktpdDo6V2ViRm9udEluZm86OmZhbWlseUZvckNoYXJzKGNoYXJh
Y3RlcnMsIG51bUNoYXJhY3RlcnMsIHByZWZlcnJlZExvY2FsZSwgJndlYkZhbWlseSk7Ci0gICAg
ZmFtaWx5LT5uYW1lID0gU3RyaW5nOjpmcm9tVVRGOCh3ZWJGYW1pbHkubmFtZS5kYXRhKCksIHdl
YkZhbWlseS5uYW1lLmxlbmd0aCgpKTsKLSAgICBmYW1pbHktPmlzQm9sZCA9IHdlYkZhbWlseS5p
c0JvbGQ7Ci0gICAgZmFtaWx5LT5pc0l0YWxpYyA9IHdlYkZhbWlseS5pc0l0YWxpYzsKLX0KLQot
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENh
Y2hlQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gMTQ3
NzMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENh
Y2hlQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYzNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0K
LSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2lu
LmgiCi0jaW5jbHVkZSAiRm9udFV0aWxzQ2hyb21pdW1XaW4uaCIKLSNpbmNsdWRlICJIV25kREMu
aCIKLSNpbmNsdWRlICJMYXlvdXRUZXN0U3VwcG9ydC5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCi0jaW5jbHVkZSA8dW5pY29kZS91bmlzZXQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPG9iamlkbC5oPgotI2lu
Y2x1ZGUgPG1sYW5nLmg+Ci0KLXVzaW5nIHN0ZDo6bWluOwotCi1uYW1lc3BhY2UgV2ViQ29yZQot
ewotCi0vLyBXaGVuIGFza2VkIGZvciBhIENKSyBmb250IHdpdGggYSBuYXRpdmUgbmFtZSB1bmRl
ciBhIG5vbi1DSksgbG9jYWxlIG9yCi0vLyBhc2tlZCBmb3IgYSBDSksgZm9udCB3aXRoIGEgUm9t
YW5pemVkIG5hbWUgdW5kZXIgYSBDSksgbG9jYWxlLAotLy8gfEdldFRleHRGYWNlfCAoYWZ0ZXIg
fENyZWF0ZUZvbnQqfCkgcmV0dXJucyBhICdib2d1cycgdmFsdWUgKGUuZy4gQXJpYWwpLgotLy8g
VGhpcyBpcyBub3QgY29uc2lzdGVudCB3aXRoIHdoYXQgTVNETiBzYXlzICEhCi0vLyBUaGVyZWZv
cmUsIGJlZm9yZSB3ZSBjYWxsIHxDcmVhdGVGb250KnwsIHdlIGhhdmUgdG8gbWFwIGEgUm9tYW5p
emVkIG5hbWUgdG8KLS8vIHRoZSBjb3JyZXNwb25kaW5nIG5hdGl2ZSBuYW1lIHVuZGVyIGEgQ0pL
IGxvY2FsZSBhbmQgdmljZSB2ZXJzYQotLy8gdW5kZXIgYSBub24tQ0pLIGxvY2FsZS4KLS8vIFNl
ZSB0aGUgY29ycmVzcG9uZGluZyBnZWNrbyBidWdzIGF0Ci0vLyBodHRwczovL2J1Z3ppbGxhLm1v
emlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzM5NTIKLS8vIGh0dHBzOi8vYnVnemlsbGEubW96
aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTQyNgotc3RhdGljIGJvb2wgTG9va3VwQWx0TmFt
ZShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgYWx0TmFtZSkKLXsKLSAgICBzdHJ1Y3QgRm9u
dENvZGVwYWdlIHsKLSAgICAgICAgV0NIQVIqIG5hbWU7Ci0gICAgICAgIGludCBjb2RlUGFnZTsK
LSAgICB9OwotCi0gICAgc3RydWN0IE5hbWVQYWlyIHsKLSAgICAgICAgV0NIQVIqIG5hbWU7Ci0g
ICAgICAgIEZvbnRDb2RlcGFnZSBhbHROYW1lQ29kZXBhZ2U7Ci0gICAgfTsKLQotICAgIGNvbnN0
IGludCBqYXBhbmVzZUNvZGVwYWdlID0gOTMyOwotICAgIGNvbnN0IGludCBzaW1wbGlmaWVkQ2hp
bmVzZUNvZGVwYWdlID0gOTM2OwotICAgIGNvbnN0IGludCBrb3JlYW5Db2RlcGFnZSA9IDk0OTsK
LSAgICBjb25zdCBpbnQgdHJhZGl0aW9uYWxDaGluZXNlQ29kZXBhZ2UgPSA5NTA7Ci0KLSAgICAv
LyBGSVhNRShqdW5nc2hpaykgOiBUaGlzIGxpc3QgcHJvYmFibHkgY292ZXJzIDk5JSBvZiBjYXNl
cy4KLSAgICAvLyBUbyBjb3ZlciB0aGUgcmVtYWluaW5nIDElIGFuZCBjdXQgZG93biB0aGUgZmls
ZSBzaXplLAotICAgIC8vIGNvbnNpZGVyIGFjY2Vzc2luZyAnTkFNRScgdGFibGUgb2YgYSB0cnVl
dHlwZSBmb250Ci0gICAgLy8gdXNpbmcgfEdldEZvbnREYXRhfCBhbmQgY2FjaGluZyB0aGUgbWFw
cGluZy4KLSAgICAvLyBJbiB0aGUgdGFibGUgYmVsb3csIHRoZSBBU0NJSSBrZXlzIGFyZSBhbGwg
bG93ZXItY2FzZWQgZm9yCi0gICAgLy8gY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGluZy4KLSAgICBz
dGF0aWMgY29uc3QgTmFtZVBhaXIgbmFtZVBhaXJzW10gPSB7Ci0gICAgICAgIC8vIO+8re+8syDv
vLDjgrTjgrfjg4Pjgq8sIE1TIFBHb3RoaWMKLSAgICAgICAge0wiXHhGRjJEXHhGRjMzIFx4RkYz
MFx4MzBCNFx4MzBCN1x4MzBDM1x4MzBBRiIsIHtMIk1TIFBHb3RoaWMiLCBqYXBhbmVzZUNvZGVw
YWdlfX0sCi0gICAgICAgIHtMIm1zIHBnb3RoaWMiLCB7TCJceEZGMkRceEZGMzMgXHhGRjMwXHgz
MEI0XHgzMEI3XHgzMEMzXHgzMEFGIiwgamFwYW5lc2VDb2RlcGFnZX19LAotICAgICAgICAvLyDv
vK3vvLMg77yw5piO5pydLCBNUyBQTWluY2hvCi0gICAgICAgIHtMIlx4RkYyRFx4RkYzMyBceEZG
MzBceDY2MEVceDY3MUQiLCB7TCJNUyBQTWluY2hvIiwgamFwYW5lc2VDb2RlcGFnZX19LAotICAg
ICAgICB7TCJtcyBwbWluY2hvIiwge0wiXHhGRjJEXHhGRjMzIFx4RkYzMFx4NjYwRVx4NjcxRCIs
IGphcGFuZXNlQ29kZXBhZ2V9fSwKLSAgICAgICAgLy8g77yt77yz44K044K344OD44KvLCBNUyBH
b3RoaWMKLSAgICAgICAge0wiXHhGRjJEXHhGRjMzIFx4MzBCNFx4MzBCN1x4MzBDM1x4MzBBRiIs
IHtMIk1TIEdvdGhpYyIsIGphcGFuZXNlQ29kZXBhZ2V9fSwKLSAgICAgICAge0wibXMgZ290aGlj
Iiwge0wiXHhGRjJEXHhGRjMzIFx4MzBCNFx4MzBCN1x4MzBDM1x4MzBBRiIsIGphcGFuZXNlQ29k
ZXBhZ2V9fSwKLSAgICAgICAgLy8g77yt77yzIOaYjuacnSwgTVMgTWluY2hvCi0gICAgICAgIHtM
Ilx4RkYyRFx4RkYzMyBceDY2MEVceDY3MUQiLCB7TCJNUyBNaW5jaG8iLCBqYXBhbmVzZUNvZGVw
YWdlfX0sCi0gICAgICAgIHtMIm1zIG1pbmNobyIsIHtMIlx4RkYyRFx4RkYzMyBceDY2MEVceDY3
MUQiLCBqYXBhbmVzZUNvZGVwYWdlfX0sCi0gICAgICAgIC8vIOODoeOCpOODquOCqiwgTWVpcnlv
Ci0gICAgICAgIHtMIlx4MzBFMVx4MzBBNFx4MzBFQVx4MzBBQSIsIHtMIk1laXJ5byIsIGphcGFu
ZXNlQ29kZXBhZ2V9fSwKLSAgICAgICAge0wibWVpcnlvIiwge0wiXHgzMEUxXHgzMEE0XHgzMEVB
XHgzMEFBIiwgamFwYW5lc2VDb2RlcGFnZX19LAotICAgICAgICAvLyDrsJTtg5UsIEJhdGFuZwot
ICAgICAgICB7TCJceEJDMTRceEQwRDUiLCB7TCJCYXRhbmciLCBrb3JlYW5Db2RlcGFnZX19LAot
ICAgICAgICB7TCJiYXRhbmciLCB7TCJceEJDMTRceEQwRDUiLCBrb3JlYW5Db2RlcGFnZX19LAot
ICAgICAgICAvLyDrsJTtg5XssrQsIEJhdGFuZ2NoZQotICAgICAgICB7TCJceEJDMTRceEQwRDVc
eENDQjQiLCB7TCJCYXRhbmdjaGUiLCBrb3JlYW5Db2RlcGFnZX19LAotICAgICAgICB7TCJiYXRh
bmdjaGUiLCB7TCJceEJDMTRceEQwRDVceENDQjQiLCBrb3JlYW5Db2RlcGFnZX19LAotICAgICAg
ICAvLyDqtbTrprwsIEd1bGltCi0gICAgICAgIHtMIlx4QUQ3NFx4QjlCQyIsIHtMIkd1bGltIiwg
a29yZWFuQ29kZXBhZ2V9fSwKLSAgICAgICAge0wiZ3VsaW0iLCB7TCJceEFENzRceEI5QkMiLCBr
b3JlYW5Db2RlcGFnZX19LAotICAgICAgICAvLyDqtbTrprzssrQsIEd1bGltY2hlCi0gICAgICAg
IHtMIlx4QUQ3NFx4QjlCQ1x4Q0NCNCIsIHtMIkd1bGltY2hlIiwga29yZWFuQ29kZXBhZ2V9fSwK
LSAgICAgICAge0wiZ3VsaW1jaGUiLCB7TCJceEFENzRceEI5QkNceENDQjQiLCBrb3JlYW5Db2Rl
cGFnZX19LAotICAgICAgICAvLyDrj4vsm4AsIERvdHVtCi0gICAgICAgIHtMIlx4QjNDQlx4QzZD
MCIsIHtMIkRvdHVtIiwga29yZWFuQ29kZXBhZ2V9fSwKLSAgICAgICAge0wiZG90dW0iLCB7TCJc
eEIzQ0JceEM2QzAiLCBrb3JlYW5Db2RlcGFnZX19LAotICAgICAgICAvLyDrj4vsm4DssrQsIERv
dHVtY2hlCi0gICAgICAgIHtMIlx4QjNDQlx4QzZDMFx4Q0NCNCIsIHtMIkRvdHVtY2hlIiwga29y
ZWFuQ29kZXBhZ2V9fSwKLSAgICAgICAge0wiZG90dW1jaGUiLCB7TCJceEIzQ0JceEM2QzBceEND
QjQiLCBrb3JlYW5Db2RlcGFnZX19LAotICAgICAgICAvLyDqtoHshJwsIEd1bmdzdWgKLSAgICAg
ICAge0wiXHhBRDgxXHhDMTFDIiwge0wiR3VuZ3N1aCIsIGtvcmVhbkNvZGVwYWdlfX0sCi0gICAg
ICAgIHtMImd1bmdzdWgiLCB7TCJceEFEODFceEMxMUMiLCBrb3JlYW5Db2RlcGFnZX19LAotICAg
ICAgICAvLyDqtoHshJzssrQsIEd1bmdzdWhjaGUKLSAgICAgICAge0wiXHhBRDgxXHhDMTFDXHhD
Q0I0Iiwge0wiR3VuZ3N1aGNoZSIsIGtvcmVhbkNvZGVwYWdlfX0sCi0gICAgICAgIHtMImd1bmdz
dWhjaGUiLCB7TCJceEFEODFceEMxMUNceENDQjQiLCBrb3JlYW5Db2RlcGFnZX19LAotICAgICAg
ICAvLyDrp5HsnYAg6rOg65SVLCBNYWxndW4gR290aGljCi0gICAgICAgIHtMIlx4QjlEMVx4Qzc0
MCBceEFDRTBceEI1MTUiLCB7TCJNYWxndW4gR290aGljIiwga29yZWFuQ29kZXBhZ2V9fSwKLSAg
ICAgICAge0wibWFsZ3VuIGdvdGhpYyIsIHtMIlx4QjlEMVx4Qzc0MCBceEFDRTBceEI1MTUiLCBr
b3JlYW5Db2RlcGFnZX19LAotICAgICAgICAvLyDlrovkvZMsIFNpbVN1bgotICAgICAgICB7TCJc
eDVCOEJceDRGNTMiLCB7TCJTaW1TdW4iLCBzaW1wbGlmaWVkQ2hpbmVzZUNvZGVwYWdlfX0sCi0g
ICAgICAgIHtMInNpbXN1biIsIHtMIlx4NUI4Qlx4NEY1MyIsIHNpbXBsaWZpZWRDaGluZXNlQ29k
ZXBhZ2V9fSwKLSAgICAgICAgLy8g5a6L5L2TLUV4dEIsIFNpbVN1bi1FeHRCCi0gICAgICAgIHtM
Ilx4NUI4Qlx4NEY1My1FeHRCIiwge0wiU2ltU3VuLUV4dEIiLCBzaW1wbGlmaWVkQ2hpbmVzZUNv
ZGVwYWdlfX0sCi0gICAgICAgIHtMInNpbXN1bi1leHRiIiwge0wiXHg1QjhCXHg0RjUzLWV4dGIi
LCBzaW1wbGlmaWVkQ2hpbmVzZUNvZGVwYWdlfX0sCi0gICAgICAgIC8vIOm7keS9kywgU2ltSGVp
Ci0gICAgICAgIHtMIlx4OUVEMVx4NEY1MyIsIHtMIlNpbUhlaSIsIHNpbXBsaWZpZWRDaGluZXNl
Q29kZXBhZ2V9fSwKLSAgICAgICAge0wic2ltaGVpIiwge0wiXHg5RUQxXHg0RjUzIiwgc2ltcGxp
ZmllZENoaW5lc2VDb2RlcGFnZX19LAotICAgICAgICAvLyDmlrDlrovkvZMsIE5TaW1TdW4KLSAg
ICAgICAge0wiXHg2NUIwXHg1QjhCXHg0RjUzIiwge0wiTlNpbVN1biIsIHNpbXBsaWZpZWRDaGlu
ZXNlQ29kZXBhZ2V9fSwKLSAgICAgICAge0wibnNpbXN1biIsIHtMIlx4NjVCMFx4NUI4Qlx4NEY1
MyIsIHNpbXBsaWZpZWRDaGluZXNlQ29kZXBhZ2V9fSwKLSAgICAgICAgLy8g5b6u6L2v6ZuF6buR
LCBNaWNyb3NvZnQgWWFoZWkKLSAgICAgICAge0wiXHg1RkFFXHg4RjZGXHg5NkM1XHg5RUQxIiwg
e0wiTWljcm9zb2Z0IFlhaGVpIiwgc2ltcGxpZmllZENoaW5lc2VDb2RlcGFnZX19LAotICAgICAg
ICB7TCJtaWNyb3NvZnQgeWFoZWkiLCB7TCJceDVGQUVceDhGNkZceDk2QzVceDlFRDEiLCBzaW1w
bGlmaWVkQ2hpbmVzZUNvZGVwYWdlfX0sCi0gICAgICAgIC8vIOS7v+WuiywgRmFuZ1NvbmcKLSAg
ICAgICAge0wiXHg0RUZGXHg1QjhCIiwgIHtMIkZhbmdTb25nIiwgc2ltcGxpZmllZENoaW5lc2VD
b2RlcGFnZX19LAotICAgICAgICB7TCJmYW5nc29uZyIsIHtMIlx4NEVGRlx4NUI4QiIsIHNpbXBs
aWZpZWRDaGluZXNlQ29kZXBhZ2V9fSwKLSAgICAgICAgLy8g5qW35L2TLCBLYWlUaQotICAgICAg
ICB7TCJceDY5NzdceDRGNTMiLCB7TCJLYWlUaSIsIHNpbXBsaWZpZWRDaGluZXNlQ29kZXBhZ2V9
fSwKLSAgICAgICAge0wia2FpdGkiLCB7TCJceDY5NzdceDRGNTMiLCBzaW1wbGlmaWVkQ2hpbmVz
ZUNvZGVwYWdlfX0sCi0gICAgICAgIC8vIOS7v+Wui19HQjIzMTIsIEZhbmdTb25nX0dCMjMxMgot
ICAgICAgICB7TCJceDRFRkZceDVCOEJfR0IyMzEyIiwgIHtMIkZhbmdTb25nX0dCMjMxMiIsIHNp
bXBsaWZpZWRDaGluZXNlQ29kZXBhZ2V9fSwKLSAgICAgICAge0wiZmFuZ3NvbmdfZ2IyMzEyIiwg
e0wiXHg0RUZGXHg1QjhCX2diMjMxMiIsIHNpbXBsaWZpZWRDaGluZXNlQ29kZXBhZ2V9fSwKLSAg
ICAgICAgLy8g5qW35L2TX0dCMjMxMiwgS2FpVGlfR0IyMzEyCi0gICAgICAgIHtMIlx4Njk3N1x4
NEY1MyIsIHtMIkthaVRpX0dCMjMxMiIsIHNpbXBsaWZpZWRDaGluZXNlQ29kZXBhZ2V9fSwKLSAg
ICAgICAge0wia2FpdGlfZ2IyMzEyIiwge0wiXHg2OTc3XHg0RjUzX2diMjMxMiIsIHNpbXBsaWZp
ZWRDaGluZXNlQ29kZXBhZ2V9fSwKLSAgICAgICAgLy8g5paw57Sw5piO6auULCBQTWluZ0xpdQot
ICAgICAgICB7TCJceDY1QjBceDdEMzBceDY2MEVceDlBRDQiLCB7TCJQTWluZ0xpdSIsIHRyYWRp
dGlvbmFsQ2hpbmVzZUNvZGVwYWdlfX0sCi0gICAgICAgIHtMInBtaW5nbGl1Iiwge0wiXHg2NUIw
XHg3RDMwXHg2NjBFXHg5QUQ0IiwgdHJhZGl0aW9uYWxDaGluZXNlQ29kZXBhZ2V9fSwKLSAgICAg
ICAgLy8g5paw57Sw5piO6auULUV4dEIsIFBNaW5nTGl1LUV4dEIKLSAgICAgICAge0wiXHg2NUIw
XHg3RDMwXHg2NjBFXHg5QUQ0LUV4dEIiLCB7TCJQTWluZ0xpdS1FeHRCIiwgdHJhZGl0aW9uYWxD
aGluZXNlQ29kZXBhZ2V9fSwKLSAgICAgICAge0wicG1pbmdsaXUtZXh0YiIsIHtMIlx4NjVCMFx4
N0QzMFx4NjYwRVx4OUFENC1leHRiIiwgdHJhZGl0aW9uYWxDaGluZXNlQ29kZXBhZ2V9fSwKLSAg
ICAgICAgLy8g57Sw5piO6auULCBNaW5nTGl1Ci0gICAgICAgIHtMIlx4N0QzMFx4NjYwRVx4OUFE
NCIsIHtMIk1pbmdMaXUiLCB0cmFkaXRpb25hbENoaW5lc2VDb2RlcGFnZX19LAotICAgICAgICB7
TCJtaW5nbGl1Iiwge0wiXHg3RDMwXHg2NjBFXHg5QUQ0IiwgdHJhZGl0aW9uYWxDaGluZXNlQ29k
ZXBhZ2V9fSwKLSAgICAgICAgLy8g57Sw5piO6auULUV4dEIsIE1pbmdMaXUtRXh0QgotICAgICAg
ICB7TCJceDdEMzBceDY2MEVceDlBRDQtRXh0QiIsIHtMIk1pbmdMaXUtRXh0QiIsIHRyYWRpdGlv
bmFsQ2hpbmVzZUNvZGVwYWdlfX0sCi0gICAgICAgIHtMIm1pbmdsaXUtZXh0YiIsIHtMIng2NUIw
XHg3RDMwXHg2NjBFXHg5QUQ0LWV4dGIiLCB0cmFkaXRpb25hbENoaW5lc2VDb2RlcGFnZX19LAot
ICAgICAgICAvLyDlvq7ou5/mraPpu5Hpq5QsIE1pY3Jvc29mdCBKaGVuZ0hlaQotICAgICAgICB7
TCJceDVGQUVceDhFREZceDZCNjNceDlFRDFceDlBRDQiLCB7TCJNaWNyb3NvZnQgSmhlbmdIZWki
LCB0cmFkaXRpb25hbENoaW5lc2VDb2RlcGFnZX19LAotICAgICAgICB7TCJtaWNyb3NvZnQgamhl
bmdIZWkiLCB7TCJceDVGQUVceDhFREZceDZCNjNceDlFRDFceDlBRDQiLCB0cmFkaXRpb25hbENo
aW5lc2VDb2RlcGFnZX19LAotICAgICAgICAvLyDmqJnmpbfpq5QsIERGS2FpLVNCCi0gICAgICAg
IHtMIlx4NkExOVx4Njk3N1x4OUFENCIsIHtMIkRGS2FpLVNCIiwgdHJhZGl0aW9uYWxDaGluZXNl
Q29kZXBhZ2V9fSwKLSAgICAgICAge0wiZGZrYWktc2IiLCB7TCJceDZBMTlceDY5NzdceDlBRDQi
LCB0cmFkaXRpb25hbENoaW5lc2VDb2RlcGFnZX19LAotICAgICAgICAvLyBXZW5RdWFuWWkgWmVu
IEhlaQotICAgICAgICB7TCJceDY1ODdceDZjYzlceDlhNWJceDZiNjNceDllZDEiLCB7TCJXZW5R
dWFuWWkgWmVuIEhlaSIsIHRyYWRpdGlvbmFsQ2hpbmVzZUNvZGVwYWdlfX0sCi0gICAgICAgIHtM
IndlbnF1YW55aSB6ZW4gaGVpIiwge0wiXHg2NTg3XHg2Y2M5XHg5YTViXHg2YjYzXHg5ZWQxIiwg
dHJhZGl0aW9uYWxDaGluZXNlQ29kZXBhZ2V9fSwKLSAgICAgICAgLy8gV2VuUXVhbllpIFplbiBI
ZWkKLSAgICAgICAge0wiXHg2NTg3XHg2Y2M5XHg5YTdmXHg2YjYzXHg5ZWQxIiwge0wiV2VuUXVh
bllpIFplbiBIZWkiLCBzaW1wbGlmaWVkQ2hpbmVzZUNvZGVwYWdlfX0sCi0gICAgICAgIHtMIndl
bnF1YW55aSB6ZW4gaGVpIiwge0wiXHg2NTg3XHg2Y2M5XHg5YTdmXHg2YjYzXHg5ZWQxIiwgc2lt
cGxpZmllZENoaW5lc2VDb2RlcGFnZX19LAotICAgICAgICAvLyBBUiBQTCBTaGFuSGVpU3VuIFVu
aSwKLSAgICAgICAge0wiXHg2NTg3XHg5ZjBlXHgwMDUwXHgwMDRjXHg3ZDMwXHg0ZTBhXHg2ZDc3
XHg1YjhiXHgwMDU1XHgwMDZlXHgwMDY5IiwKLSAgICAgICAgIHtMIkFSIFBMIFNoYW5IZWlTdW4g
VW5pIiwgdHJhZGl0aW9uYWxDaGluZXNlQ29kZXBhZ2V9fSwKLSAgICAgICAge0wiYXIgcGwgc2hh
bmhlaXN1biB1bmkiLAotICAgICAgICAge0wiXHg2NTg3XHg5ZjBlXHgwMDUwXHgwMDRjXHg3ZDMw
XHg0ZTBhXHg2ZDc3XHg1YjhiXHgwMDU1XHgwMDZlXHgwMDY5IiwgdHJhZGl0aW9uYWxDaGluZXNl
Q29kZXBhZ2V9fSwKLSAgICAgICAgLy8gQVIgUEwgU2hhbkhlaVN1biBVbmksCi0gICAgICAgIHtM
Ilx4NjU4N1x4OWYwZVx4MDA1MFx4MDA0Y1x4N2VjNlx4NGUwYVx4NmQ3N1x4NWI4Ylx4MDA1NVx4
MDA2ZVx4MDA2OSIsCi0gICAgICAgICB7TCJBUiBQTCBTaGFuSGVpU3VuIFVuaSIsIHNpbXBsaWZp
ZWRDaGluZXNlQ29kZXBhZ2V9fSwKLSAgICAgICAge0wiYXIgcGwgc2hhbmhlaXN1biB1bmkiLAot
ICAgICAgICAge0wiXHg2NTg3XHg5ZjBlXHgwMDUwXHgwMDRjXHg3ZWM2XHg0ZTBhXHg2ZDc3XHg1
YjhiXHgwMDU1XHgwMDZlXHgwMDY5Iiwgc2ltcGxpZmllZENoaW5lc2VDb2RlcGFnZX19LAotICAg
ICAgICAvLyBBUiBQTCBaZW5LYWkgVW5pCi0gICAgICAgIC8vIFRyYWRpdGlvbmFsIENoaW5lc2Ug
YW5kIFNpbXBsaWZpZWQgQ2hpbmVzZSBuYW1lcyBhcmUKLSAgICAgICAgLy8gaWRlbnRpY2FsLgot
ICAgICAgICB7TCJceDY1ODdceDAwNTBceDAwNENceDRFMkRceDY5NzdceDAwNTVceDAwNkVceDAw
NjkiLCB7TCJBUiBQTCBaZW5LYWkgVW5pIiwgdHJhZGl0aW9uYWxDaGluZXNlQ29kZXBhZ2V9fSwK
LSAgICAgICAge0wiYXIgcGwgemVua2FpIHVuaSIsIHtMIlx4NjU4N1x4MDA1MFx4MDA0Q1x4NEUy
RFx4Njk3N1x4MDA1NVx4MDA2RVx4MDA2OSIsIHRyYWRpdGlvbmFsQ2hpbmVzZUNvZGVwYWdlfX0s
Ci0gICAgICAgIHtMIlx4NjU4N1x4MDA1MFx4MDA0Q1x4NEUyRFx4Njk3N1x4MDA1NVx4MDA2RVx4
MDA2OSIsIHtMIkFSIFBMIFplbkthaSBVbmkiLCBzaW1wbGlmaWVkQ2hpbmVzZUNvZGVwYWdlfX0s
Ci0gICAgICAgIHtMImFyIHBsIHplbmthaSB1bmkiLCB7TCJceDY1ODdceDAwNTBceDAwNENceDRF
MkRceDY5NzdceDAwNTVceDAwNkVceDAwNjkiLCBzaW1wbGlmaWVkQ2hpbmVzZUNvZGVwYWdlfX0s
Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIGNvbnN0IEZvbnRDb2RlcGFn
ZSo+IE5hbWVNYXA7Ci0gICAgc3RhdGljIE5hbWVNYXAqIGZvbnROYW1lTWFwID0gMDsKLQotICAg
IGlmICghZm9udE5hbWVNYXApIHsKLSAgICAgICAgZm9udE5hbWVNYXAgPSBuZXcgTmFtZU1hcDsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKG5hbWVQYWly
cyk7ICsraSkKLSAgICAgICAgICAgIGZvbnROYW1lTWFwLT5zZXQoU3RyaW5nKG5hbWVQYWlyc1tp
XS5uYW1lKSwgJihuYW1lUGFpcnNbaV0uYWx0TmFtZUNvZGVwYWdlKSk7Ci0gICAgfQotCi0gICAg
Ym9vbCBpc0FzY2lpID0gZmFsc2U7Ci0gICAgU3RyaW5nIG47Ci0gICAgLy8gdXNlIHxsb3dlcnwg
b25seSBmb3IgQVNDSUkgbmFtZXMKLSAgICAvLyBGb3Igbm9uLUFTQ0lJIG5hbWVzLCB3ZSBkb24n
dCB3YW50IHRvIGludm9rZSBhbiBleHBlbnNpdmUKLSAgICAvLyBhbmQgdW5uZWNlc3NhcnkgfGxv
d2VyfC4KLSAgICBpZiAobmFtZS5jb250YWluc09ubHlBU0NJSSgpKSB7Ci0gICAgICAgIGlzQXNj
aWkgPSB0cnVlOwotICAgICAgICBuID0gbmFtZS5sb3dlcigpOwotICAgIH0gZWxzZQotICAgICAg
ICBuID0gbmFtZTsKLQotICAgIE5hbWVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBmb250TmFtZU1hcC0+
ZmluZChuKTsKLSAgICBpZiAoaXRlciA9PSBmb250TmFtZU1hcC0+ZW5kKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHN0YXRpYyBpbnQgc3lzdGVtQ3AgPSA6OkdldEFDUCgpOwotICAg
IGludCBmb250Q3AgPSBpdGVyLT52YWx1ZS0+Y29kZVBhZ2U7Ci0KLSAgICBpZiAoKGlzQXNjaWkg
JiYgc3lzdGVtQ3AgPT0gZm9udENwKSB8fCAoIWlzQXNjaWkgJiYgc3lzdGVtQ3AgIT0gZm9udENw
KSkgewotICAgICAgICBhbHROYW1lID0gU3RyaW5nKGl0ZXItPnZhbHVlLT5uYW1lKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMg
SEZPTlQgY3JlYXRlRm9udEluZGlyZWN0QW5kR2V0V2luTmFtZShjb25zdCBTdHJpbmcmIGZhbWls
eSwgTE9HRk9OVCogd2luZm9udCwgU3RyaW5nKiB3aW5OYW1lKQotewotICAgIGludCBsZW4gPSBt
aW4oc3RhdGljX2Nhc3Q8aW50PihmYW1pbHkubGVuZ3RoKCkpLCBMRl9GQUNFU0laRSAtIDEpOwot
ICAgIG1lbWNweSh3aW5mb250LT5sZkZhY2VOYW1lLCBmYW1pbHkuY2hhcmFjdGVycygpLCBsZW4g
KiBzaXplb2YoV09SRCkpOwotICAgIHdpbmZvbnQtPmxmRmFjZU5hbWVbbGVuXSA9ICdcMCc7Ci0K
LSAgICBIRk9OVCBoZm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdCh3aW5mb250KTsKLSAgICBpZiAo
IWhmb250KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEhXbmREQyBkYygwKTsKLSAgICBIR0RJ
T0JKIG9sZEZvbnQgPSBzdGF0aWNfY2FzdDxIRk9OVD4oU2VsZWN0T2JqZWN0KGRjLCBoZm9udCkp
OwotICAgIFdDSEFSIG5hbWVbTEZfRkFDRVNJWkVdOwotICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0
aCA9IEdldFRleHRGYWNlKGRjLCBMRl9GQUNFU0laRSwgbmFtZSk7Ci0gICAgaWYgKHJlc3VsdExl
bmd0aCA+IDApCi0gICAgICAgIHJlc3VsdExlbmd0aC0tOyAvLyBpZ25vcmUgdGhlIG51bGwgdGVy
bWluYXRvcgotCi0gICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRGb250KTsKLSAgICAqd2luTmFtZSA9
IFN0cmluZyhuYW1lLCByZXN1bHRMZW5ndGgpOwotICAgIHJldHVybiBoZm9udDsKLX0KLQotLy8g
VGhpcyBtYXBzIGZvbnQgZmFtaWx5IG5hbWVzIHRvIHRoZWlyIHJlcGVydG9pcmVzIG9mIHN1cHBv
cnRlZCBVbmljb2RlCi0vLyBjaGFyYWN0ZXJzLiBCZWNhdXNlIGl0J3MgZmFtaWx5IG5hbWVzIHJh
dGhlciB0aGFuIGZvbnQgZmFjZXMgd2UgdXNlCi0vLyBhcyBrZXlzLCB0aGVyZSBtaWdodCBiZSBl
ZGdlIGNhc2VzIHdoZXJlIG9uZSBmYWNlIG9mIGEgZm9udCBmYW1pbHkKLS8vIGhhcyBhIGRpZmZl
cmVudCByZXBlcnRvaXJlIGZyb20gYW5vdGhlciBmYWNlIG9mIHRoZSBzYW1lIGZhbWlseS4KLXR5
cGVkZWYgSGFzaE1hcDxjb25zdCB3Y2hhcl90KiwgaWN1OjpVbmljb2RlU2V0Kj4gRm9udENtYXBD
YWNoZTsKLQotc3RhdGljIGJvb2wgZm9udENvbnRhaW5zQ2hhcmFjdGVyKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEqIGZvbnREYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHdjaGFyX3QqIGZhbWlseSwgVUNoYXIzMiBjaGFyYWN0ZXIpCi17Ci0gICAgLy8gRklYTUU6
IEZvciBub24tQk1QIGNoYXJhY3RlcnMsIEdldEZvbnRVbmljb2RlUmFuZ2VzIGlzIG9mCi0gICAg
Ly8gbm8gdXNlLiBXZSBoYXZlIHRvIHJlYWQgZGlyZWN0bHkgZnJvbSB0aGUgY21hcCB0YWJsZSBv
ZiBhIGZvbnQuCi0gICAgLy8gUmV0dXJuIHRydWUgZm9yIG5vdy4KLSAgICBpZiAoY2hhcmFjdGVy
ID4gMHhGRkZGKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFRoaXMgY2FjaGUgaXMg
anVzdCBsZWFrZWQgb24gc2h1dGRvd24uCi0gICAgc3RhdGljIEZvbnRDbWFwQ2FjaGUqIGZvbnRD
bWFwQ2FjaGUgPSAwOwotICAgIGlmICghZm9udENtYXBDYWNoZSkKLSAgICAgICAgZm9udENtYXBD
YWNoZSA9IG5ldyBGb250Q21hcENhY2hlOwotCi0gICAgSGFzaE1hcDxjb25zdCB3Y2hhcl90Kiwg
aWN1OjpVbmljb2RlU2V0Kj46Oml0ZXJhdG9yIGl0ID0gZm9udENtYXBDYWNoZS0+ZmluZChmYW1p
bHkpOwotICAgIGlmIChpdCAhPSBmb250Q21hcENhY2hlLT5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IGl0LT52YWx1ZS0+Y29udGFpbnMoY2hhcmFjdGVyKTsKLQotICAgIEhGT05UIGhmb250ID0gZm9u
dERhdGEtPmhmb250KCk7Ci0gICAgSFduZERDIGhkYygwKTsKLSAgICBIR0RJT0JKIG9sZEZvbnQg
PSBzdGF0aWNfY2FzdDxIRk9OVD4oU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpKTsKLSAgICBpbnQg
Y291bnQgPSBHZXRGb250VW5pY29kZVJhbmdlcyhoZGMsIDApOwotICAgIGlmICghY291bnQgJiYg
Rm9udFBsYXRmb3JtRGF0YTo6ZW5zdXJlRm9udExvYWRlZChoZm9udCkpCi0gICAgICAgIGNvdW50
ID0gR2V0Rm9udFVuaWNvZGVSYW5nZXMoaGRjLCAwKTsKLSAgICBpZiAoIWNvdW50KSB7Ci0gICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGdldCB0aGUgZm9udCB1bmljb2RlIHJhbmdlIGFmdGVy
IHNlY29uZCBhdHRlbXB0Iik7Ci0gICAgICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgVmVjdG9yPGNoYXIsIDUx
Mj4gZ2x5cGhzZXRCdWZmZXI7Ci0gICAgZ2x5cGhzZXRCdWZmZXIucmVzaXplKEdldEZvbnRVbmlj
b2RlUmFuZ2VzKGhkYywgMCkpOwotICAgIEdMWVBIU0VUKiBnbHlwaHNldCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8R0xZUEhTRVQqPihnbHlwaHNldEJ1ZmZlci5kYXRhKCkpOwotICAgIC8vIEluIGFkZGl0
aW9uLCByZWZlcmluZyB0byB0aGUgT1MvMiB0YWJsZSBhbmQgY29udmVydGluZyB0aGUgY29kZXBh
Z2UgbGlzdAotICAgIC8vIHRvIHRoZSBjb3ZlcmFnZSBtYXAgbWlnaHQgYmUgZmFzdGVyLgotICAg
IGNvdW50ID0gR2V0Rm9udFVuaWNvZGVSYW5nZXMoaGRjLCBnbHlwaHNldCk7Ci0gICAgQVNTRVJU
KGNvdW50ID4gMCk7Ci0gICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7Ci0KLSAgICAvLyBG
SVhNRTogY29uc2lkZXIgZG9pbmcgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgdHdvOgotICAgIC8v
IDEpIHBvcnQgYmFjayBJQ1UgNC4wJ3MgZmFzdGVyIGxvb2stdXAgY29kZSBmb3IgVW5pY29kZVNl
dAotICAgIC8vIDIpIHBvcnQgTW96aWxsYSdzIENvbXByZXNzZWRDaGFyTWFwIG9yIGdmeFNwYXJz
ZUJpdHNldAotICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIGljdTo6VW5pY29kZVNldCogY21hcCA9
IG5ldyBpY3U6OlVuaWNvZGVTZXQ7Ci0gICAgd2hpbGUgKGkgPCBnbHlwaHNldC0+Y1Jhbmdlcykg
ewotICAgICAgICBXQ0hBUiBzdGFydCA9IGdseXBoc2V0LT5yYW5nZXNbaV0ud2NMb3c7Ci0gICAg
ICAgIGNtYXAtPmFkZChzdGFydCwgc3RhcnQgKyBnbHlwaHNldC0+cmFuZ2VzW2ldLmNHbHlwaHMg
LSAxKTsKLSAgICAgICAgaSsrOwotICAgIH0KLSAgICBjbWFwLT5mcmVlemUoKTsKLSAgICAvLyBX
ZSBkb24ndCBsb3dlcmNhc2UgfGZhbWlseXwgYmVjYXVzZSBhbGwgb2YgdGhlbSBhcmUgdW5kZXIg
b3VyIGNvbnRyb2wKLSAgICAvLyBhbmQgdGhleSdyZSBhbHJlYWR5IGxvd2VyY2FzZWQuCi0gICAg
Zm9udENtYXBDYWNoZS0+c2V0KGZhbWlseSwgY21hcCk7Ci0gICAgcmV0dXJuIGNtYXAtPmNvbnRh
aW5zKGNoYXJhY3Rlcik7Ci19Ci0KLS8vIFRyaWVzIHRoZSBnaXZlbiBmb250IGFuZCBzYXZlIGl0
IHxvdXRGb250RmFtaWx5TmFtZXwgaWYgaXQgc3VjY2VlZHMuCi1QYXNzUmVmUHRyPFNpbXBsZUZv
bnREYXRhPiBGb250Q2FjaGU6OmZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgU2hvdWxkUmV0YWluIHNob3VsZFJl
dGFpbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgd2NoYXJfdCogb3V0Rm9udEZhbWlseU5hbWUpCi17
Ci0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBmb250RGF0YSA9IGdldENhY2hlZEZvbnREYXRh
KGZvbnREZXNjcmlwdGlvbiwgZm9udC5sZkZhY2VOYW1lLCBmYWxzZSwgc2hvdWxkUmV0YWluKTsK
LSAgICBpZiAoZm9udERhdGEpCi0gICAgICAgIG1lbWNweShvdXRGb250RmFtaWx5TmFtZSwgZm9u
dC5sZkZhY2VOYW1lLCBzaXplb2YoZm9udC5sZkZhY2VOYW1lKSk7Ci0gICAgcmV0dXJuIGZvbnRE
YXRhLnJlbGVhc2UoKTsKLX0KLQotc3RhdGljIExPTkcgdG9HRElGb250V2VpZ2h0KEZvbnRXZWln
aHQgZm9udFdlaWdodCkKLXsKLSAgICBzdGF0aWMgTE9ORyBnZGlGb250V2VpZ2h0c1tdID0gewot
ICAgICAgICBGV19USElOLCAvLyBGb250V2VpZ2h0MTAwCi0gICAgICAgIEZXX0VYVFJBTElHSFQs
IC8vIEZvbnRXZWlnaHQyMDAKLSAgICAgICAgRldfTElHSFQsIC8vIEZvbnRXZWlnaHQzMDAKLSAg
ICAgICAgRldfTk9STUFMLCAvLyBGb250V2VpZ2h0NDAwCi0gICAgICAgIEZXX01FRElVTSwgLy8g
Rm9udFdlaWdodDUwMAotICAgICAgICBGV19TRU1JQk9MRCwgLy8gRm9udFdlaWdodDYwMAotICAg
ICAgICBGV19CT0xELCAvLyBGb250V2VpZ2h0NzAwCi0gICAgICAgIEZXX0VYVFJBQk9MRCwgLy8g
Rm9udFdlaWdodDgwMAotICAgICAgICBGV19IRUFWWSAvLyBGb250V2VpZ2h0OTAwCi0gICAgfTsK
LSAgICByZXR1cm4gZ2RpRm9udFdlaWdodHNbZm9udFdlaWdodF07Ci19Ci0KLXN0YXRpYyB2b2lk
IEZpbGxMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBMT0dG
T05UKiB3aW5mb250KQotewotICAgIC8vIFRoZSBzaXplIGhlcmUgbG9va3MgdW51c3VhbC4gIFRo
ZSBuZWdhdGl2ZSBudW1iZXIgaXMgaW50ZW50aW9uYWwuCi0gICAgLy8gVW5saWtlIFdlYktpdCB0
cnVuaywgd2UgZG9uJ3QgbXVsdGlwbHkgdGhlIHNpemUgYnkgMzIuICBUaGF0IHNlZW1zIHRvIGJl
Ci0gICAgLy8gc29tZSBraW5kIG9mIGFydGlmYWN0IG9mIHRoZWlyIENHIGJhY2tlbmQsIG9yIHNv
bWV0aGluZy4KLSAgICB3aW5mb250LT5sZkhlaWdodCA9IC1mb250RGVzY3JpcHRpb24uY29tcHV0
ZWRQaXhlbFNpemUoKTsKLSAgICB3aW5mb250LT5sZldpZHRoID0gMDsKLSAgICB3aW5mb250LT5s
ZkVzY2FwZW1lbnQgPSAwOwotICAgIHdpbmZvbnQtPmxmT3JpZW50YXRpb24gPSAwOwotICAgIHdp
bmZvbnQtPmxmVW5kZXJsaW5lID0gZmFsc2U7Ci0gICAgd2luZm9udC0+bGZTdHJpa2VPdXQgPSBm
YWxzZTsKLSAgICB3aW5mb250LT5sZkNoYXJTZXQgPSBERUZBVUxUX0NIQVJTRVQ7Ci0gICAgd2lu
Zm9udC0+bGZPdXRQcmVjaXNpb24gPSBPVVRfVFRfT05MWV9QUkVDSVM7Ci0gICAgd2luZm9udC0+
bGZRdWFsaXR5ID0gaXNSdW5uaW5nTGF5b3V0VGVzdCgpID8gTk9OQU5USUFMSUFTRURfUVVBTElU
WSA6IERFRkFVTFRfUVVBTElUWTsgLy8gSG9ub3IgdXNlcidzIGRlc2t0b3Agc2V0dGluZ3MuCi0g
ICAgd2luZm9udC0+bGZQaXRjaEFuZEZhbWlseSA9IERFRkFVTFRfUElUQ0ggfCBGRl9ET05UQ0FS
RTsKLSAgICB3aW5mb250LT5sZkl0YWxpYyA9IGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKTsKLSAg
ICB3aW5mb250LT5sZldlaWdodCA9IHRvR0RJRm9udFdlaWdodChmb250RGVzY3JpcHRpb24ud2Vp
Z2h0KCkpOwotfQotCi1zdHJ1Y3QgVHJhaXRzSW5GYW1pbHlQcm9jRGF0YSB7Ci0gICAgVHJhaXRz
SW5GYW1pbHlQcm9jRGF0YShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCi0gICAgICAg
IDogbV9mYW1pbHlOYW1lKGZhbWlseU5hbWUpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbV9mYW1pbHlOYW1lOwotICAgIEhhc2hTZXQ8dW5zaWduZWQ+IG1fdHJhaXRz
TWFza3M7Ci19OwotCi1zdGF0aWMgaW50IENBTExCQUNLIHRyYWl0c0luRmFtaWx5RW51bVByb2Mo
Q09OU1QgTE9HRk9OVCogbG9nRm9udCwgQ09OU1QgVEVYVE1FVFJJQyogbWV0cmljcywgRFdPUkQg
Zm9udFR5cGUsIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgVHJhaXRzSW5GYW1pbHlQcm9jRGF0YSog
cHJvY0RhdGEgPSByZWludGVycHJldF9jYXN0PFRyYWl0c0luRmFtaWx5UHJvY0RhdGEqPihsUGFy
YW0pOwotCi0gICAgdW5zaWduZWQgdHJhaXRzTWFzayA9IDA7Ci0gICAgdHJhaXRzTWFzayB8PSBs
b2dGb250LT5sZkl0YWxpYyA/IEZvbnRTdHlsZUl0YWxpY01hc2sgOiBGb250U3R5bGVOb3JtYWxN
YXNrOwotICAgIHRyYWl0c01hc2sgfD0gRm9udFZhcmlhbnROb3JtYWxNYXNrOwotICAgIExPTkcg
d2VpZ2h0ID0gbG9nRm9udC0+bGZXZWlnaHQ7Ci0gICAgdHJhaXRzTWFzayB8PSB3ZWlnaHQgPT0g
RldfVEhJTiA/IEZvbnRXZWlnaHQxMDBNYXNrIDoKLSAgICAgICAgd2VpZ2h0ID09IEZXX0VYVFJB
TElHSFQgPyBGb250V2VpZ2h0MjAwTWFzayA6Ci0gICAgICAgIHdlaWdodCA9PSBGV19MSUdIVCA/
IEZvbnRXZWlnaHQzMDBNYXNrIDoKLSAgICAgICAgd2VpZ2h0ID09IEZXX05PUk1BTCA/IEZvbnRX
ZWlnaHQ0MDBNYXNrIDoKLSAgICAgICAgd2VpZ2h0ID09IEZXX01FRElVTSA/IEZvbnRXZWlnaHQ1
MDBNYXNrIDoKLSAgICAgICAgd2VpZ2h0ID09IEZXX1NFTUlCT0xEID8gRm9udFdlaWdodDYwME1h
c2sgOgotICAgICAgICB3ZWlnaHQgPT0gRldfQk9MRCA/IEZvbnRXZWlnaHQ3MDBNYXNrIDoKLSAg
ICAgICAgd2VpZ2h0ID09IEZXX0VYVFJBQk9MRCA/IEZvbnRXZWlnaHQ4MDBNYXNrIDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnRXZWlnaHQ5MDBNYXNrOwotICAgIHByb2NE
YXRhLT5tX3RyYWl0c01hc2tzLmFkZCh0cmFpdHNNYXNrKTsKLSAgICByZXR1cm4gMTsKLX0KLQot
c3RydWN0IEdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnRQcm9jRGF0YSB7Ci0gICAgR2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udFByb2NEYXRhKEZvbnRDYWNoZSogZm9udENhY2hlLCBjb25zdCBGb250
RGVzY3JpcHRpb24qIGZvbnREZXNjcmlwdGlvbiwgRm9udENhY2hlOjpTaG91bGRSZXRhaW4gc2hv
dWxkUmV0YWluLCB3Y2hhcl90KiBmb250TmFtZSkKLSAgICAgICAgOiBtX2ZvbnRDYWNoZShmb250
Q2FjaGUpCi0gICAgICAgICwgbV9mb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKQotICAg
ICAgICAsIG1fc2hvdWxkUmV0YWluKHNob3VsZFJldGFpbikKLSAgICAgICAgLCBtX2ZvbnROYW1l
KGZvbnROYW1lKQotICAgICAgICAsIG1fZm9udERhdGEoMCkKLSAgICB7Ci0gICAgfQotCi0gICAg
Rm9udENhY2hlKiBtX2ZvbnRDYWNoZTsKLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24qIG1fZm9u
dERlc2NyaXB0aW9uOwotICAgIEZvbnRDYWNoZTo6U2hvdWxkUmV0YWluIG1fc2hvdWxkUmV0YWlu
OwotICAgIHdjaGFyX3QqIG1fZm9udE5hbWU7Ci0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBt
X2ZvbnREYXRhOwotfTsKLQotc3RhdGljIGludCBDQUxMQkFDSyBnZXRMYXN0UmVzb3J0RmFsbGJh
Y2tGb250UHJvYyhjb25zdCBMT0dGT05UKiBsb2dGb250LCBjb25zdCBURVhUTUVUUklDKiBtZXRy
aWNzLCBEV09SRCBmb250VHlwZSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBHZXRMYXN0UmVzb3J0
RmFsbGJhY2tGb250UHJvY0RhdGEqIHByb2NEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxHZXRMYXN0
UmVzb3J0RmFsbGJhY2tGb250UHJvY0RhdGEqPihsUGFyYW0pOwotICAgIHByb2NEYXRhLT5tX2Zv
bnREYXRhID0gcHJvY0RhdGEtPm1fZm9udENhY2hlLT5mb250RGF0YUZyb21EZXNjcmlwdGlvbkFu
ZExvZ0ZvbnQoKnByb2NEYXRhLT5tX2ZvbnREZXNjcmlwdGlvbiwgcHJvY0RhdGEtPm1fc2hvdWxk
UmV0YWluLCAqbG9nRm9udCwgcHJvY0RhdGEtPm1fZm9udE5hbWUpOwotICAgIHJldHVybiAhcHJv
Y0RhdGEtPm1fZm9udERhdGE7Ci19Ci0KLXZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQot
ewotICAgIC8vIE5vdCBuZWVkZWQgb24gV2luZG93cy4KLX0KLQotLy8gR2l2ZW4gdGhlIGRlc2ly
ZWQgYmFzZSBmb250LCB0aGlzIHdpbGwgY3JlYXRlIGEgU2ltcGxlRm9udERhdGEgZm9yIGEgc3Bl
Y2lmaWMKLS8vIGZvbnQgdGhhdCBjYW4gYmUgdXNlZCB0byByZW5kZXIgdGhlIGdpdmVuIHJhbmdl
IG9mIGNoYXJhY3RlcnMuCi1QYXNzUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBGb250Q2FjaGU6Omdl
dEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgaW50IGxlbmd0aCkKLXsKLSAgICAvLyBGSVhNRTogQ29uc2lkZXIgcGFzc2luZyBm
b250RGVzY3JpcHRpb24uZG9taW5hbnRTY3JpcHQoKQotICAgIC8vIHRvIEdldEZhbGxiYWNrRmFt
aWx5IGhlcmUuCi0gICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IGZvbnQuZm9u
dERlc2NyaXB0aW9uKCk7Ci0gICAgVUNoYXIzMiBjOwotICAgIFVTY3JpcHRDb2RlIHNjcmlwdDsK
LSAgICBjb25zdCB3Y2hhcl90KiBmYW1pbHkgPSBnZXRGYWxsYmFja0ZhbWlseShjaGFyYWN0ZXJz
LCBsZW5ndGgsCi0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCksICZjLCAm
c2NyaXB0KTsKLSAgICBGb250UGxhdGZvcm1EYXRhKiBkYXRhID0gMDsKLSAgICBpZiAoZmFtaWx5
KQotICAgICAgICBkYXRhID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250LmZvbnREZXNj
cmlwdGlvbigpLCAgQXRvbWljU3RyaW5nKGZhbWlseSwgd2NzbGVuKGZhbWlseSkpLCBmYWxzZSk7
Ci0KLSAgICAvLyBMYXN0IHJlc29ydCBmb250IGxpc3QgOiBQYW5Vbmljb2RlLiBDSksgZm9udHMg
aGF2ZSBhIHByZXR0eQotICAgIC8vIGxhcmdlIHJlcGVydG9pcmUuIEV2ZW50dWFsbHksIHdlIG5l
ZWQgdG8gc2NhbiBhbGwgdGhlIGZvbnRzCi0gICAgLy8gb24gdGhlIHN5c3RlbSB0byBoYXZlIGEg
RmlyZWZveC1saWtlIGNvdmVyYWdlLgotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFsbCBvZiB0aGVt
IGFyZSBsb3dlcmNhc2VkLgotICAgIGNvbnN0IHN0YXRpYyB3Y2hhcl90KiBjb25zdCBjamtGb250
c1tdID0gewotICAgICAgICBMImFyaWFsIHVuaWNvZGUgbXMiLAotICAgICAgICBMIm1zIHBnb3Ro
aWMiLAotICAgICAgICBMInNpbXN1biIsCi0gICAgICAgIEwiZ3VsaW0iLAotICAgICAgICBMInBt
aW5nbGl1IiwKLSAgICAgICAgTCJ3ZW5xdWFueWkgemVuIGhlaSIsIC8vIHBhcnRpYWwgQ0pLIEV4
dC4gQSBjb3ZlcmFnZSBidXQgbW9yZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
d2lkZWx5IGtub3duIHRvIENoaW5lc2UgdXNlcnMuCi0gICAgICAgIEwiYXIgcGwgc2hhbmhlaXN1
biB1bmkiLAotICAgICAgICBMImFyIHBsIHplbmthaSB1bmkiLAotICAgICAgICBMImhhbiBub20g
YSIsICAvLyBDb21wbGV0ZSBDSksgRXh0LiBBIGNvdmVyYWdlCi0gICAgICAgIEwiY29kZTIwMDAi
LCAgIC8vIENvbXBsZXRlIENKSyBFeHQuIEEgY292ZXJhZ2UKLSAgICAgICAgLy8gQ0pLIEV4dC4g
QiBmb250cyBhcmUgbm90IGxpc3RlZCBoZXJlIGJlY2F1c2UgaXQncyBvZiBubyB1c2UKLSAgICAg
ICAgLy8gd2l0aCBvdXIgY3VycmVudCBub24tQk1QIGNoYXJhY3RlciBoYW5kbGluZyBiZWNhdXNl
IHdlIHVzZQotICAgICAgICAvLyBVbmlzY3JpYmUgZm9yIGl0IGFuZCB0aGF0IGNvZGUgcGF0aCBk
b2VzIG5vdCBnbyB0aHJvdWdoIGhlcmUuCi0gICAgfTsKLQotICAgIGNvbnN0IHN0YXRpYyB3Y2hh
cl90KiBjb25zdCBjb21tb25Gb250c1tdID0gewotICAgICAgICBMInRhaG9tYSIsCi0gICAgICAg
IEwiYXJpYWwgdW5pY29kZSBtcyIsCi0gICAgICAgIEwibHVjaWRhIHNhbnMgdW5pY29kZSIsCi0g
ICAgICAgIEwibWljcm9zb2Z0IHNhbnMgc2VyaWYiLAotICAgICAgICBMInBhbGF0aW5vIGxpbm90
eXBlIiwKLSAgICAgICAgLy8gU2l4IGZvbnRzIGJlbG93IChhbmQgY29kZTIwMDAgYXQgdGhlIGVu
ZCkgYXJlIG5vdCBmcm9tIE1TLCBidXQKLSAgICAgICAgLy8gb25jZSBpbnN0YWxsZWQsIGNvdmVy
IGEgdmVyeSB3aWRlIHJhbmdlIG9mIGNoYXJhY3RlcnMuCi0gICAgICAgIEwiZGVqYXZ1IHNlcmlm
IiwKLSAgICAgICAgTCJkZWphdnUgc2FzbnMiLAotICAgICAgICBMImZyZWVzZXJpZiIsCi0gICAg
ICAgIEwiZnJlZXNhbnMiLAotICAgICAgICBMImdlbnRpdW0iLAotICAgICAgICBMImdlbnRpdW1h
bHQiLAotICAgICAgICBMIm1zIHBnb3RoaWMiLAotICAgICAgICBMInNpbXN1biIsCi0gICAgICAg
IEwiZ3VsaW0iLAotICAgICAgICBMInBtaW5nbGl1IiwKLSAgICAgICAgTCJjb2RlMjAwMCIsCi0g
ICAgfTsKLQotICAgIGNvbnN0IHdjaGFyX3QqIGNvbnN0KiBwYW5VbmlGb250cyA9IDA7Ci0gICAg
aW50IG51bUZvbnRzID0gMDsKLSAgICBpZiAoc2NyaXB0ID09IFVTQ1JJUFRfSEFOKSB7Ci0gICAg
ICAgIHBhblVuaUZvbnRzID0gY2prRm9udHM7Ci0gICAgICAgIG51bUZvbnRzID0gV1RGX0FSUkFZ
X0xFTkdUSChjamtGb250cyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcGFuVW5pRm9udHMgPSBj
b21tb25Gb250czsKLSAgICAgICAgbnVtRm9udHMgPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1vbkZv
bnRzKTsKLSAgICB9Ci0gICAgLy8gRm9udCByZXR1cm5lZCBmcm9tIEdldEZhbGxiYWNrRmFtaWx5
IG1heSBub3QgY292ZXIgfGNoYXJhY3RlcnN8Ci0gICAgLy8gYmVjYXVzZSBpdCdzIGJhc2VkIG9u
IHNjcmlwdCB0byBmb250IG1hcHBpbmcuIFRoaXMgcHJvYmxlbSBpcwotICAgIC8vIGNyaXRpY2Fs
IGVub3VnaCBmb3Igbm9uLUxhdGluIHNjcmlwdHMgKGVzcGVjaWFsbHkgSGFuKSB0bwotICAgIC8v
IHdhcnJhbnQgYW4gYWRkaXRpb25hbCAocmVhbCBjb3ZlcmFnZSkgY2hlY2sgd2l0aCBmb250Q290
YWluc0NoYXJhY3Rlci4KLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyAoIWRhdGEgfHwgIWZv
bnRDb250YWluc0NoYXJhY3RlcihkYXRhLCBmYW1pbHksIGMpKSAmJiBpIDwgbnVtRm9udHM7ICsr
aSkgewotICAgICAgICBmYW1pbHkgPSBwYW5VbmlGb250c1tpXTsKLSAgICAgICAgZGF0YSA9IGdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgQXRvbWljU3Ry
aW5nKGZhbWlseSwgd2NzbGVuKGZhbWlseSkpKTsKLSAgICB9Ci0gICAgLy8gV2hlbiBpLXRoIGZv
bnQgKDAtYmFzZSkgaW4gfHBhblVuaUZvbnRzfCBjb250YWlucyBhIGNoYXJhY3RlciBhbmQKLSAg
ICAvLyB3ZSBnZXQgb3V0IG9mIHRoZSBsb29wLCB8aXwgd2lsbCBiZSB8aSArIDF8LiBUaGF0IGlz
LCBpZiBvbmx5IHRoZQotICAgIC8vIGxhc3QgZm9udCBpbiB0aGUgYXJyYXkgY292ZXJzIHRoZSBj
aGFyYWN0ZXIsIHxpfCB3aWxsIGJlIG51bUZvbnRzLgotICAgIC8vIFNvLCB3ZSBoYXZlIHRvIHVz
ZSAnPD0iIHJhdGhlciB0aGFuICc8JyB0byBzZWUgaWYgd2UgZm91bmQgYSBmb250Ci0gICAgLy8g
Y292ZXJpbmcgdGhlIGNoYXJhY3Rlci4KLSAgICBpZiAoaSA8PSBudW1Gb250cykKLSAgICAgICAg
cmV0dXJuIGdldENhY2hlZEZvbnREYXRhKGRhdGEsIERvTm90UmV0YWluKTsKLQotICAgIHJldHVy
biAwOwotCi19Ci0KLVBhc3NSZWZQdHI8U2ltcGxlRm9udERhdGE+IEZvbnRDYWNoZTo6Z2V0U2lt
aWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKLXsKLSAgICByZXR1cm4gMDsK
LX0KLQotUGFzc1JlZlB0cjxTaW1wbGVGb250RGF0YT4gRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0
RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIFNob3VsZFJl
dGFpbiBzaG91bGRSZXRhaW4pCi17Ci0gICAgRm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5
VHlwZSBnZW5lcmljID0gZGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpOwotCi0gICAgLy8gRklY
TUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVs
dCBmb250IGhlcmUuCi0gICAgLy8gRm9yIG5vdyB3ZSdsbCBwaWNrIHRoZSBkZWZhdWx0IHRoYXQg
dGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcKLSAgICAvLyBhbnkgcHJlZnMuCi0g
ICAgc3RhdGljIEF0b21pY1N0cmluZyB0aW1lc1N0cigiVGltZXMgTmV3IFJvbWFuIik7Ci0gICAg
c3RhdGljIEF0b21pY1N0cmluZyBjb3VyaWVyU3RyKCJDb3VyaWVyIE5ldyIpOwotICAgIHN0YXRp
YyBBdG9taWNTdHJpbmcgYXJpYWxTdHIoIkFyaWFsIik7Ci0KLSAgICBBdG9taWNTdHJpbmcmIGZv
bnRTdHIgPSB0aW1lc1N0cjsKLSAgICBpZiAoZ2VuZXJpYyA9PSBGb250RGVzY3JpcHRpb246OlNh
bnNTZXJpZkZhbWlseSkKLSAgICAgICAgZm9udFN0ciA9IGFyaWFsU3RyOwotICAgIGVsc2UgaWYg
KGdlbmVyaWMgPT0gRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHkpCi0gICAgICAgIGZv
bnRTdHIgPSBjb3VyaWVyU3RyOwotCi0gICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiBzaW1wbGVG
b250ID0gZ2V0Q2FjaGVkRm9udERhdGEoZGVzY3JpcHRpb24sIGZvbnRTdHIsIGZhbHNlLCBzaG91
bGRSZXRhaW4pOwotICAgIGlmIChzaW1wbGVGb250KQotICAgICAgICByZXR1cm4gc2ltcGxlRm9u
dC5yZWxlYXNlKCk7Ci0KLSAgICAvLyBGYWxsIGJhY2sgdG8gc3lzdGVtIGZvbnRzIGFzIFdpbiBT
YWZhcmkgZG9lcyBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gbXVzdAotICAgIC8vIHJldHVybiBhIHZh
bGlkIGZvbnQuIE9uY2Ugd2UgZmluZCBhIHZhbGlkIHN5c3RlbSBmb250LCB3ZSBzYXZlIGl0cyBu
YW1lCi0gICAgLy8gdG8gYSBzdGF0aWMgdmFyaWFibGUgYW5kIHVzZSBpdCB0byBwcmV2ZW50IHRy
eWluZyBzeXN0ZW0gZm9udHMgYWdhaW4uCi0gICAgc3RhdGljIHdjaGFyX3QgZmFsbGJhY2tGb250
TmFtZVtMRl9GQUNFU0laRV0gPSB7MH07Ci0gICAgaWYgKGZhbGxiYWNrRm9udE5hbWVbMF0pCi0g
ICAgICAgIHJldHVybiBnZXRDYWNoZWRGb250RGF0YShkZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250
TmFtZSwgZmFsc2UsIHNob3VsZFJldGFpbik7Ci0KLSAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIERF
RkFVTFRfR1VJX0ZPTlQgaWYgbm8ga25vd24gVW5pY29kZSBmb250cyBhcmUgYXZhaWxhYmxlLgot
ICAgIGlmIChIRk9OVCBkZWZhdWx0R1VJRm9udCA9IHN0YXRpY19jYXN0PEhGT05UPihHZXRTdG9j
a09iamVjdChERUZBVUxUX0dVSV9GT05UKSkpIHsKLSAgICAgICAgTE9HRk9OVCBkZWZhdWx0R1VJ
TG9nRm9udDsKLSAgICAgICAgR2V0T2JqZWN0KGRlZmF1bHRHVUlGb250LCBzaXplb2YoZGVmYXVs
dEdVSUxvZ0ZvbnQpLCAmZGVmYXVsdEdVSUxvZ0ZvbnQpOwotICAgICAgICBpZiAoc2ltcGxlRm9u
dCA9IGZvbnREYXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChkZXNjcmlwdGlvbiwgc2hvdWxk
UmV0YWluLCBkZWZhdWx0R1VJTG9nRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAg
ICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgLy8gRmFsbCBiYWNr
IHRvIE5vbi1jbGllbnQgbWV0cmljcyBmb250cy4KLSAgICBOT05DTElFTlRNRVRSSUNTIG5vbkNs
aWVudE1ldHJpY3MgPSB7MH07Ci0gICAgbm9uQ2xpZW50TWV0cmljcy5jYlNpemUgPSBzaXplb2Yo
bm9uQ2xpZW50TWV0cmljcyk7Ci0gICAgaWYgKFN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRO
T05DTElFTlRNRVRSSUNTLCBzaXplb2Yobm9uQ2xpZW50TWV0cmljcyksICZub25DbGllbnRNZXRy
aWNzLCAwKSkgewotICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJvbURlc2NyaXB0
aW9uQW5kTG9nRm9udChkZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBub25DbGllbnRNZXRyaWNz
LmxmTWVzc2FnZUZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIHNp
bXBsZUZvbnQucmVsZWFzZSgpOwotICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnREYXRhRnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChkZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBub25DbGll
bnRNZXRyaWNzLmxmTWVudUZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0
dXJuIHNpbXBsZUZvbnQucmVsZWFzZSgpOwotICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRE
YXRhRnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChkZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBu
b25DbGllbnRNZXRyaWNzLmxmU3RhdHVzRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAg
ICAgICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7Ci0gICAgICAgIGlmIChzaW1wbGVGb250
ID0gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGRlc2NyaXB0aW9uLCBzaG91bGRS
ZXRhaW4sIG5vbkNsaWVudE1ldHJpY3MubGZDYXB0aW9uRm9udCwgZmFsbGJhY2tGb250TmFtZSkp
Ci0gICAgICAgICAgICByZXR1cm4gc2ltcGxlRm9udC5yZWxlYXNlKCk7Ci0gICAgICAgIGlmIChz
aW1wbGVGb250ID0gZm9udERhdGFGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGRlc2NyaXB0aW9u
LCBzaG91bGRSZXRhaW4sIG5vbkNsaWVudE1ldHJpY3MubGZTbUNhcHRpb25Gb250LCBmYWxsYmFj
a0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVGb250LnJlbGVhc2UoKTsKLSAg
ICB9Ci0KLSAgICAvLyBGYWxsIGJhY2sgdG8gYWxsIHRoZSBmb250cyBpbnN0YWxsZWQgaW4gdGhp
cyBQQy4gV2hlbiBhIGZvbnQgaGFzIGEKLSAgICAvLyBsb2NhbGl6ZWQgbmFtZSBhY2NvcmRpbmcg
dG8gdGhlIHN5c3RlbSBsb2NhbGUgYXMgd2VsbCBhcyBhbiBFbmdsaXNoIG5hbWUsCi0gICAgLy8g
Ym90aCBHZXRUZXh0RmFjZSgpIGFuZCBFbnVtRm9udEZhbWlsaWVzKCkgcmV0dXJuIHRoZSBsb2Nh
bGl6ZWQgbmFtZS4gU28sCi0gICAgLy8gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRh
KCkgZG9lcyBub3QgZmlsdGVyIG91dCB0aGUgZm9udHMKLSAgICAvLyByZXR1cm5lZCBieSB0aGlz
IEVudW1Gb250RmFtaWxpZXMoKSBjYWxsLgotICAgIEhXbmREQyBkYygwKTsKLSAgICBpZiAoZGMp
IHsKLSAgICAgICAgR2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udFByb2NEYXRhIHByb2NEYXRhKHRo
aXMsICZkZXNjcmlwdGlvbiwgc2hvdWxkUmV0YWluLCBmYWxsYmFja0ZvbnROYW1lKTsKLSAgICAg
ICAgRW51bUZvbnRGYW1pbGllcyhkYywgMCwgZ2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udFByb2Ms
IHJlaW50ZXJwcmV0X2Nhc3Q8TFBBUkFNPigmcHJvY0RhdGEpKTsKLQotICAgICAgICBpZiAocHJv
Y0RhdGEubV9mb250RGF0YSkKLSAgICAgICAgICAgIHJldHVybiBwcm9jRGF0YS5tX2ZvbnREYXRh
LnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVuc2lnbmVkPiYgdHJhaXRzTWFza3MpCi17Ci0g
ICAgSFduZERDIGhkYygwKTsKLQotICAgIExPR0ZPTlQgbG9nRm9udDsKLSAgICBsb2dGb250Lmxm
Q2hhclNldCA9IERFRkFVTFRfQ0hBUlNFVDsKLSAgICB1bnNpZ25lZCBmYW1pbHlMZW5ndGggPSBt
aW4oZmFtaWx5TmFtZS5sZW5ndGgoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExGX0ZBQ0VTSVpF
IC0gMSkpOwotICAgIG1lbWNweShsb2dGb250LmxmRmFjZU5hbWUsIGZhbWlseU5hbWUuY2hhcmFj
dGVycygpLCBmYW1pbHlMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICBsb2dGb250LmxmRmFj
ZU5hbWVbZmFtaWx5TGVuZ3RoXSA9IDA7Ci0gICAgbG9nRm9udC5sZlBpdGNoQW5kRmFtaWx5ID0g
MDsKLQotICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEgcHJvY0RhdGEoZmFtaWx5TmFtZSk7Ci0g
ICAgRW51bUZvbnRGYW1pbGllc0V4KGhkYywgJmxvZ0ZvbnQsIHRyYWl0c0luRmFtaWx5RW51bVBy
b2MsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBBUkFNPigmcHJvY0RhdGEpLCAwKTsKLSAgICBjb3B5VG9W
ZWN0b3IocHJvY0RhdGEubV90cmFpdHNNYXNrcywgdHJhaXRzTWFza3MpOwotfQotCi1Gb250UGxh
dGZvcm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQot
ewotICAgIExPR0ZPTlQgd2luZm9udCA9IHswfTsKLSAgICBGaWxsTG9nRm9udChmb250RGVzY3Jp
cHRpb24sICZ3aW5mb250KTsKLQotICAgIC8vIFdpbmRvd3Mgd2lsbCBhbHdheXMgZ2l2ZSB1cyBh
IHZhbGlkIHBvaW50ZXIgaGVyZSwgZXZlbiBpZiB0aGUgZmFjZSBuYW1lCi0gICAgLy8gaXMgbm9u
LWV4aXN0ZW50LiBXZSBoYXZlIHRvIGRvdWJsZS1jaGVjayBhbmQgc2VlIGlmIHRoZSBmYW1pbHkg
bmFtZSB3YXMKLSAgICAvLyByZWFsbHkgdXNlZC4KLSAgICBTdHJpbmcgd2luTmFtZTsKLSAgICBI
Rk9OVCBoZm9udCA9IGNyZWF0ZUZvbnRJbmRpcmVjdEFuZEdldFdpbk5hbWUoZmFtaWx5LCAmd2lu
Zm9udCwgJndpbk5hbWUpOwotICAgIGlmICghaGZvbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gdXNlIHByZWRlZmluZWQgZm9udHMgImd1YXJhbnRl
ZWQiIHRvIGV4aXN0Ci0gICAgLy8gd2hlbiB3ZSdyZSBydW5uaW5nIGluIGxheW91dC10ZXN0IG1v
ZGU/Ci0gICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIHdpbk5hbWUpKSB7Ci0gICAg
ICAgIC8vIEZvciBDSksgZm9udHMgd2l0aCBib3RoIEVuZ2xpc2ggYW5kIG5hdGl2ZSBuYW1lcywK
LSAgICAgICAgLy8gR2V0VGV4dEZhY2UgcmV0dXJucyBhIG5hdGl2ZSBuYW1lIHVuZGVyIHRoZSBm
b250J3MgImxvY2FsZSIKLSAgICAgICAgLy8gYW5kIGFuIEVuZ2xpc2ggbmFtZSB1bmRlciBvdGhl
ciBsb2NhbGVzIHJlZ2FyZGxlc3Mgb2YKLSAgICAgICAgLy8gbGZGYWNlTmFtZSBmaWVsZCBvZiBM
T0dGT05ULiBBcyBhIHJlc3VsdCwgd2UgbmVlZCB0byBjaGVjawotICAgICAgICAvLyBpZiBhIGZv
bnQgaGFzIGFuIGFsdGVybmF0ZSBuYW1lLiBJZiB0aGVyZSBpcywgd2UgbmVlZCB0bwotICAgICAg
ICAvLyBjb21wYXJlIGl0IHdpdGggd2hhdCdzIHJlcXVlc3RlZCBpbiB0aGUgZmlyc3QgcGxhY2Uu
Ci0gICAgICAgIFN0cmluZyBhbHROYW1lOwotICAgICAgICBpZiAoIUxvb2t1cEFsdE5hbWUoZmFt
aWx5LCBhbHROYW1lKSB8fCAhZXF1YWxJZ25vcmluZ0Nhc2UoYWx0TmFtZSwgd2luTmFtZSkpIHsK
LSAgICAgICAgICAgIERlbGV0ZU9iamVjdChoZm9udCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShoZm9u
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmNvbXB1
dGVkUGl4ZWxTaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5vcmllbnRhdGlvbigpKTsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1X
aW4uY3BwCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY3
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIENvbXB1dGVy
LCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZv
bnQuaCIKLQotI2luY2x1ZGUgIkZvbnRGYWxsYmFja0xpc3QuaCIKLSNpbmNsdWRlICJGb250UGxh
dGZvcm1EYXRhQ2hyb21pdW1XaW4uaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgot
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSAiU2tpYUZvbnRXaW4uaCIKLSNp
bmNsdWRlICJVbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmgiCi0KLSNpZiAhVVNFKFNLSUFfVEVYVCkK
LSNpbmNsdWRlICJUcmFuc3BhcmVuY3lXaW4uaCIKLSNpbmNsdWRlICJza2lhL2V4dC9za2lhX3V0
aWxzX3dpbi5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmICFVU0UoU0tJQV9URVhUKQot
bmFtZXNwYWNlIHsKLQotY2xhc3MgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlciB7Ci1wdWJs
aWM6Ci0gICAgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFBvaW50Jik7Ci0gICAgflRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIoKTsK
LQotcHJvdGVjdGVkOgotICAgIC8vIENhbGxlZCBieSBvdXIgc3ViY2xhc3MnIGNvbnN0cnVjdG9y
IHRvIGluaXRpYWxpemUgR0RJIGlmIG5lY2Vzc2FyeS4gVGhpcwotICAgIC8vIGlzIGEgc2VwYXJh
dGUgZnVuY3Rpb24gc28gaXQgY2FuIGJlIGNhbGxlZCBhZnRlciB0aGUgc3ViY2xhc3MgZmluaXNo
ZXMKLSAgICAvLyBjb25zdHJ1Y3Rpb24gKGl0IGNhbGxzIHZpcnR1YWwgZnVuY3Rpb25zKS4KLSAg
ICB2b2lkIGluaXQoKTsKLQotICAgIHZpcnR1YWwgSW50UmVjdCBlc3RpbWF0ZVRleHRCb3VuZHMo
KSA9IDA7Ci0KLSAgICAvLyBVc2UgdGhlIGNvbnRleHQgZnJvbSB0aGUgdHJhbnNwYXJlbmN5IGhl
bHBlciB3aGVuIGRyYXdpbmcgd2l0aCBHREkuIEl0Ci0gICAgLy8gbWF5IHBvaW50IHRvIGEgdGVt
cG9yYXJ5IG9uZS4KLSAgICBHcmFwaGljc0NvbnRleHQqIG1fZ3JhcGhpY3NDb250ZXh0OwotICAg
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBtX3BsYXRmb3JtQ29udGV4dDsKLQotICAgIEZsb2F0
UG9pbnQgbV9wb2ludDsKLQotICAgIC8vIFNldCB3aGVuIFdpbmRvd3MgY2FuIGhhbmRsZSB0aGUg
dHlwZSBvZiBkcmF3aW5nIHdlJ3JlIGRvaW5nLgotICAgIGJvb2wgbV91c2VHREk7Ci0KLSAgICAv
LyBUaGVzZSBtZW1iZXJzIGFyZSB2YWxpZCBvbmx5IHdoZW4gbV91c2VHREkgaXMgc2V0LgotICAg
IEhEQyBtX2hkYzsKLSAgICBUcmFuc3BhcmVuY3lXaW4gbV90cmFuc3BhcmVuY3k7Ci0KLXByaXZh
dGU6Ci0gICAgLy8gQ2FsbCB3aGVuIHdlJ3JlIHVzaW5nIEdESSBtb2RlIHRvIGluaXRpYWxpemUg
dGhlIFRyYW5zcGFyZW5jeVdpbiB0byBoZWxwCi0gICAgLy8gdXMgZHJhdyBHREkgdGV4dC4KLSAg
ICB2b2lkIGluaXRpYWxpemVGb3JHREkoKTsKLQotICAgIGJvb2wgbV9jcmVhdGVkVHJhbnNwYXJl
bmN5TGF5ZXI7IC8vIFdlIGNyZWF0ZWQgYSBsYXllciB0byBnaXZlIHRoZSBmb250IHNvbWUgYWxw
aGEuCi19OwotCi1UcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2Fy
ZUZvbnRQYWludGVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpCi0gICAgOiBtX2dyYXBoaWNzQ29udGV4dChjb250ZXh0KQotICAgICwgbV9wbGF0
Zm9ybUNvbnRleHQoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCi0gICAgLCBtX3BvaW50KHBv
aW50KQotICAgICwgbV91c2VHREkod2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKGNvbnRleHQp
KQotICAgICwgbV9oZGMoMCkKLSAgICAsIG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyKGZhbHNl
KQotewotfQotCi12b2lkIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OmluaXQoKQotewot
ICAgIGlmIChtX3VzZUdESSkKLSAgICAgICAgaW5pdGlhbGl6ZUZvckdESSgpOwotfQotCi12b2lk
IFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OmluaXRpYWxpemVGb3JHREkoKQotewotICAg
IG1fZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7Ci0gICAgU2tDb2xvciBjb2xvciA9IG1fcGxhdGZv
cm1Db250ZXh0LT5lZmZlY3RpdmVGaWxsQ29sb3IoKTsKLSAgICAvLyBVc2VkIG9ubHkgd2hlbiBt
X2NyZWF0ZWRUcmFuc3BhcmVuY3lMYXllciBpcyB0cnVlLgotICAgIGZsb2F0IGxheWVyQWxwaGEg
PSAwLjBmOwotICAgIGlmIChTa0NvbG9yR2V0QShjb2xvcikgIT0gMHhGRikgewotICAgICAgICAv
LyBXaGVuIHRoZSBmb250IGhhcyBzb21lIHRyYW5zcGFyZW5jeSwgYXBwbHkgaXQgYnkgY3JlYXRp
bmcgYSBuZXcKLSAgICAgICAgLy8gdHJhbnNwYXJlbmN5IGxheWVyIHdpdGggdGhhdCBvcGFjaXR5
IGFwcGxpZWQuIFdlJ2xsIGFjdHVhbGx5IGNyZWF0ZQotICAgICAgICAvLyBhIG5ldyB0cmFuc3Bh
cmVuY3kgbGF5ZXIgYWZ0ZXIgd2UgY2FsY3VsYXRlIHRoZSBib3VuZGluZyBib3guCi0gICAgICAg
IG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyID0gdHJ1ZTsKLSAgICAgICAgbGF5ZXJBbHBoYSA9
IFNrQ29sb3JHZXRBKGNvbG9yKSAvIDI1NS4wZjsKLSAgICAgICAgLy8gVGhlIGNvbG9yIHNob3Vs
ZCBiZSBvcGFxdWUgbm93LgotICAgICAgICBjb2xvciA9IFNrQ29sb3JTZXRSR0IoU2tDb2xvckdl
dFIoY29sb3IpLCBTa0NvbG9yR2V0Ryhjb2xvciksIFNrQ29sb3JHZXRCKGNvbG9yKSk7Ci0gICAg
fQotCi0gICAgVHJhbnNwYXJlbmN5V2luOjpMYXllck1vZGUgbGF5ZXJNb2RlOwotICAgIEludFJl
Y3QgbGF5ZXJSZWN0OwotICAgIGlmIChtX3BsYXRmb3JtQ29udGV4dC0+aXNEcmF3aW5nVG9JbWFn
ZUJ1ZmZlcigpKSB7Ci0gICAgICAgIC8vIEFzc3VtZSBpZiB3ZSdyZSBkcmF3aW5nIHRvIGFuIGlt
YWdlIGJ1ZmZlciB0aGF0IHRoZSBiYWNrZ3JvdW5kCi0gICAgICAgIC8vIGlzIG5vdCBvcGFxdWUg
YW5kIHdlIGhhdmUgdG8gdW5kbyBDbGVhclR5cGUuIFdlIG1heSB3YW50IHRvCi0gICAgICAgIC8v
IGVuaGFuY2UgdGhpcyB0byBhY3R1YWxseSBjaGVjaywgc2luY2UgaXQgd2lsbCBvZnRlbiBiZSBv
cGFxdWUKLSAgICAgICAgLy8gYW5kIHdlIGNvdWxkIGRvIENsZWFyVHlwZSBpbiB0aGF0IGNhc2Uu
Ci0gICAgICAgIGxheWVyTW9kZSA9IFRyYW5zcGFyZW5jeVdpbjo6VGV4dENvbXBvc2l0ZTsKLSAg
ICAgICAgbGF5ZXJSZWN0ID0gZXN0aW1hdGVUZXh0Qm91bmRzKCk7Ci0gICAgICAgIG1fZ3JhcGhp
Y3NDb250ZXh0LT5jbGlwKGxheWVyUmVjdCk7Ci0gICAgICAgIGlmIChtX2NyZWF0ZWRUcmFuc3Bh
cmVuY3lMYXllcikKLSAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5iZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGxheWVyQWxwaGEpOwotCi0gICAgICAgIC8vIFRoZSB0cmFuc3BhcmVuY3kgaGVs
cGVyIHJlcXVpcmVzIHRoYXQgd2UgZHJhdyB0ZXh0IGluIGJsYWNrIGluCi0gICAgICAgIC8vIHRo
aXMgbW9kZSBhbmQgaXQgd2lsbCBhcHBseSB0aGUgY29sb3IuCi0gICAgICAgIG1fdHJhbnNwYXJl
bmN5LnNldFRleHRDb21wb3NpdGVDb2xvcihjb2xvcik7Ci0gICAgICAgIGNvbG9yID0gU2tDb2xv
clNldFJHQigwLCAwLCAwKTsKLSAgICB9IGVsc2UgaWYgKG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxh
eWVyIHx8IG1fcGxhdGZvcm1Db250ZXh0LT5pc0RyYXdpbmdUb0xheWVyKCkpIHsKLSAgICAgICAg
Ly8gV2hlbiB3ZSdyZSBkcmF3aW5nIGEgd2ViIHBhZ2UsIHdlIGtub3cgdGhlIGJhY2tncm91bmQg
aXMgb3BhcXVlLAotICAgICAgICAvLyBidXQgaWYgd2UncmUgZHJhd2luZyB0byBhIGxheWVyLCB3
ZSBzdGlsbCBuZWVkIGV4dHJhIHdvcmsuCi0gICAgICAgIGxheWVyTW9kZSA9IFRyYW5zcGFyZW5j
eVdpbjo6T3BhcXVlQ29tcG9zaXRlTGF5ZXI7Ci0gICAgICAgIGxheWVyUmVjdCA9IGVzdGltYXRl
VGV4dEJvdW5kcygpOwotICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC0+Y2xpcChsYXllclJlY3Qp
OwotICAgICAgICBpZiAobV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXIpCi0gICAgICAgICAgICBt
X2dyYXBoaWNzQ29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihsYXllckFscGhhKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBDb21tb24gY2FzZSBvZiBkcmF3aW5nIG9udG8gdGhlIGJv
dHRvbSBsYXllciBvZiBhIHdlYiBwYWdlOiB3ZQotICAgICAgICAvLyBrbm93IGV2ZXJ5dGhpbmcg
aXMgb3BhcXVlIHNvIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLSAgICAgICAg
bGF5ZXJNb2RlID0gVHJhbnNwYXJlbmN5V2luOjpOb0xheWVyOwotICAgIH0KLQotICAgIC8vIEJ1
ZyAyNjA4OCAtIGluaXQoKSBtaWdodCBmYWlsIGlmIGxheWVyUmVjdCBpcyBpbnZhbGlkLiBHaXZl
biB0aGlzLCB3ZQotICAgIC8vIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBjaGVjayBmb3IgbnVsbCBw
b2ludGVycyBldmVyeXdoZXJlIGFmdGVyIHRoaXMgY2FsbAotICAgIG1fdHJhbnNwYXJlbmN5Lmlu
aXQobV9ncmFwaGljc0NvbnRleHQsIGxheWVyTW9kZSwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICBUcmFuc3BhcmVuY3lXaW46OktlZXBUcmFuc2Zvcm0sIGxheWVyUmVjdCk7Ci0KLSAgICAvLyBT
ZXQgdXAgdGhlIERDLCB1c2luZyB0aGUgb25lIGZyb20gdGhlIHRyYW5zcGFyZW5jeSBoZWxwZXIu
Ci0gICAgaWYgKG1fdHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29udGV4dCgpKSB7Ci0gICAgICAgIG1f
aGRjID0gc2tpYTo6QmVnaW5QbGF0Zm9ybVBhaW50KG1fdHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29u
dGV4dCgpLT5jYW52YXMoKSk7Ci0gICAgICAgIFNldFRleHRDb2xvcihtX2hkYywgc2tpYTo6U2tD
b2xvclRvQ09MT1JSRUYoY29sb3IpKTsKLSAgICAgICAgU2V0QmtNb2RlKG1faGRjLCBUUkFOU1BB
UkVOVCk7Ci0gICAgfQotfQotCi1UcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjp+VHJhbnNw
YXJlbmN5QXdhcmVGb250UGFpbnRlcigpCi17Ci0gICAgaWYgKCFtX3VzZUdESSB8fCAhbV9ncmFw
aGljc0NvbnRleHQgfHwgIW1fcGxhdGZvcm1Db250ZXh0KQotICAgICAgICByZXR1cm47Ci0gICAg
bV90cmFuc3BhcmVuY3kuY29tcG9zaXRlKCk7Ci0gICAgaWYgKG1fY3JlYXRlZFRyYW5zcGFyZW5j
eUxheWVyKQotICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKLSAgICBtX2dyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwotICAgIGlmIChtX3RyYW5zcGFy
ZW5jeS5wbGF0Zm9ybUNvbnRleHQoKSkKLSAgICAgICAgc2tpYTo6RW5kUGxhdGZvcm1QYWludCht
X3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkpOwotfQotCi0vLyBTcGVj
aWFsaXphdGlvbiBmb3Igc2ltcGxlIEdseXBoQnVmZmVyIHBhaW50aW5nLgotY2xhc3MgVHJhbnNw
YXJlbmN5QXdhcmVHbHlwaFBhaW50ZXIgOiBwdWJsaWMgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFp
bnRlciB7Ci0gcHVibGljOgotICAgIFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyKEdyYXBo
aWNzQ29udGV4dCosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2lt
cGxlRm9udERhdGEqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEds
eXBoQnVmZmVyJiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwg
aW50IG51bUdseXBocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
bG9hdFBvaW50Jik7Ci0gICAgflRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyKCk7Ci0KLSAg
ICAvLyBEcmF3cyB0aGUgcGFydGlhbCBzdHJpbmcgb2YgZ2x5cGhzLCBzdGFydGluZyBhdCB8c3Rh
cnRBZHZhbmNlfCB0byB0aGUKLSAgICAvLyBsZWZ0IG9mIG1fcG9pbnQuIFdlIGV4cHJlc3MgaXQg
dGhpcyB3YXkgc28gdGhhdCBpZiB3ZSdyZSB1c2luZyB0aGUgU2tpYQotICAgIC8vIGRyYXdpbmcg
cGF0aCB3ZSBjYW4gdXNlIGZsb2F0aW5nLXBvaW50IHBvc2l0aW9uaW5nLCBldmVuIHRob3VnaCB3
ZSBoYXZlCi0gICAgLy8gdG8gdXNlIGludGVnZXIgcG9zaXRpb25pbmcgaW4gdGhlIEdESSBwYXRo
LgotICAgIGJvb2wgZHJhd0dseXBocyhpbnQgbnVtR2x5cGhzLCBjb25zdCBXT1JEKiBnbHlwaHMs
IGNvbnN0IGludCogYWR2YW5jZXMsIGZsb2F0IHN0YXJ0QWR2YW5jZSkgY29uc3Q7Ci0KLSBwcml2
YXRlOgotICAgIHZpcnR1YWwgSW50UmVjdCBlc3RpbWF0ZVRleHRCb3VuZHMoKTsKLQotICAgIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBtX2ZvbnQ7Ci0gICAgY29uc3QgR2x5cGhCdWZmZXImIG1fZ2x5
cGhCdWZmZXI7Ci0gICAgaW50IG1fZnJvbTsKLSAgICBpbnQgbV9udW1HbHlwaHM7Ci0KLSAgICAv
LyBXaGVuIG1fdXNlR2RpIGlzIHNldCwgdGhpcyBzdG9yZXMgdGhlIHByZXZpb3VzIEhGT05UIHNl
bGVjdGVkIGludG8gdGhlCi0gICAgLy8gbV9oZGMgc28gd2UgY2FuIHJlc3RvcmUgaXQuCi0gICAg
SEdESU9CSiBtX29sZEZvbnQ7IC8vIEZvciByZXN0b3JpbmcgdGhlIERDIHRvIGl0cyBvcmlnaW5h
bCBzdGF0ZS4KLX07Ci0KLVRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjpUcmFuc3BhcmVu
Y3lBd2FyZUdseXBoUGFpbnRlcigKLSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCi0gICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCi0gICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLAotICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLAotICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KQotICAgIDogVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihjb250ZXh0LCBw
b2ludCkKLSAgICAsIG1fZm9udChmb250KQotICAgICwgbV9nbHlwaEJ1ZmZlcihnbHlwaEJ1ZmZl
cikKLSAgICAsIG1fZnJvbShmcm9tKQotICAgICwgbV9udW1HbHlwaHMobnVtR2x5cGhzKQotICAg
ICwgbV9vbGRGb250KDApCi17Ci0gICAgaW5pdCgpOwotCi0gICAgaWYgKG1faGRjKQotICAgICAg
ICBtX29sZEZvbnQgPSA6OlNlbGVjdE9iamVjdChtX2hkYywgbV9mb250LT5wbGF0Zm9ybURhdGEo
KS5oZm9udCgpKTsKLX0KLQotVHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXI6On5UcmFuc3Bh
cmVuY3lBd2FyZUdseXBoUGFpbnRlcigpCi17Ci0gICAgaWYgKG1fdXNlR0RJICYmIG1faGRjKQot
ICAgICAgICA6OlNlbGVjdE9iamVjdChtX2hkYywgbV9vbGRGb250KTsKLX0KLQotCi0vLyBFc3Rp
bWF0ZXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgZ2l2ZW4gdGV4dC4gVGhpcyBpcyBjb3BpZWQg
ZnJvbQotLy8gRm9udENHV2luLmNwcCwgaXQgaXMgcG9zc2libGUsIGJ1dCBhIGxvdCBtb3JlIHdv
cmssIHRvIGdldCB0aGUgcHJlY2lkZQotLy8gYm91bmRzLgotSW50UmVjdCBUcmFuc3BhcmVuY3lB
d2FyZUdseXBoUGFpbnRlcjo6ZXN0aW1hdGVUZXh0Qm91bmRzKCkKLXsKLSAgICBpbnQgdG90YWxX
aWR0aCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX251bUdseXBoczsgaSsrKQotICAg
ICAgICB0b3RhbFdpZHRoICs9IGxyb3VuZGYobV9nbHlwaEJ1ZmZlci5hZHZhbmNlQXQobV9mcm9t
ICsgaSkpOwotCi0gICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gbV9mb250LT5m
b250TWV0cmljcygpOwotICAgIHJldHVybiBJbnRSZWN0KG1fcG9pbnQueCgpIC0gKGZvbnRNZXRy
aWNzLmFzY2VudCgpICsgZm9udE1ldHJpY3MuZGVzY2VudCgpKSAvIDIsCi0gICAgICAgICAgICAg
ICAgICAgbV9wb2ludC55KCkgLSBmb250TWV0cmljcy5hc2NlbnQoKSAtIGZvbnRNZXRyaWNzLmxp
bmVHYXAoKSwKLSAgICAgICAgICAgICAgICAgICB0b3RhbFdpZHRoICsgZm9udE1ldHJpY3MuYXNj
ZW50KCkgKyBmb250TWV0cmljcy5kZXNjZW50KCksCi0gICAgICAgICAgICAgICAgICAgZm9udE1l
dHJpY3MubGluZVNwYWNpbmcoKSk7IAotfQotCi1ib29sIFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQ
YWludGVyOjpkcmF3R2x5cGhzKGludCBudW1HbHlwaHMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPUkQqIGdseXBocywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50KiBhZHZhbmNlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgc3Rh
cnRBZHZhbmNlKSBjb25zdAotewotICAgIGlmICghbV91c2VHREkpIHsKLSAgICAgICAgU2tQb2lu
dCBvcmlnaW4gPSBtX3BvaW50OwotICAgICAgICBvcmlnaW4uZlggKz0gU2tGbG9hdFRvU2NhbGFy
KHN0YXJ0QWR2YW5jZSk7Ci0gICAgICAgIHBhaW50U2tpYVRleHQobV9ncmFwaGljc0NvbnRleHQs
IG1fZm9udC0+cGxhdGZvcm1EYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgbnVtR2x5cGhz
LCBnbHlwaHMsIGFkdmFuY2VzLCAwLCAmb3JpZ2luKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgaWYgKCFtX2dyYXBoaWNzQ29udGV4dCB8fCAhbV9oZGMpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgLy8gV2luZG93cycgb3JpZ2luIGlzIHRoZSB0b3AtbGVmdCBvZiB0
aGUgYm91bmRpbmcgYm94LCBzbyB3ZSBoYXZlCi0gICAgLy8gdG8gc3VidHJhY3Qgb2ZmIHRoZSBm
b250IGFzY2VudCB0byBnZXQgaXQuCi0gICAgaW50IHggPSBscm91bmRmKG1fcG9pbnQueCgpICsg
c3RhcnRBZHZhbmNlKTsKLSAgICBpbnQgeSA9IGxyb3VuZGYobV9wb2ludC55KCkgLSBtX2ZvbnQt
PmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotCi0gICAgLy8gSWYgdGhlcmUgaXMgYSBub24tYmx1
ciBzaGFkb3cgYW5kIGJvdGggdGhlIGZpbGwgY29sb3IgYW5kIHNoYWRvdyBjb2xvciAKLSAgICAv
LyBhcmUgb3BhcXVlLCBoYW5kbGUgd2l0aG91dCBza2lhLiAKLSAgICBGbG9hdFNpemUgc2hhZG93
T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0g
ICAgQ29sb3JTcGFjZSBzaGFkb3dDb2xvclNwYWNlOwotICAgIGlmIChtX2dyYXBoaWNzQ29udGV4
dC0+Z2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHNoYWRv
d0NvbG9yU3BhY2UpKSB7Ci0gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgc2hhZG93IGFuZCB0aGlz
IGNvZGUgaXMgcmVhY2hlZCwgd2luZG93c0NhbkhhbmRsZURyYXdUZXh0U2hhZG93KCkKLSAgICAg
ICAgLy8gd2lsbCBoYXZlIGFscmVhZHkgcmV0dXJuZWQgdHJ1ZSBkdXJpbmcgdGhlIGN0b3IgaW5p
dGlhdGl6YXRpb24gb2YgbV91c2VHREkKLSAgICAgICAgQVNTRVJUKHNoYWRvd0NvbG9yLmFscGhh
KCkgPT0gMjU1KTsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGhpY3NDb250ZXh0LT5maWxsQ29sb3Io
KS5hbHBoYSgpID09IDI1NSk7Ci0gICAgICAgIEFTU0VSVCghc2hhZG93Qmx1cik7Ci0gICAgICAg
IENPTE9SUkVGIHRleHRDb2xvciA9IHNraWE6OlNrQ29sb3JUb0NPTE9SUkVGKFNrQ29sb3JTZXRB
UkdCKDI1NSwgc2hhZG93Q29sb3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0Nv
bG9yLmJsdWUoKSkpOwotICAgICAgICBDT0xPUlJFRiBzYXZlZFRleHRDb2xvciA9IEdldFRleHRD
b2xvcihtX2hkYyk7Ci0gICAgICAgIFNldFRleHRDb2xvcihtX2hkYywgdGV4dENvbG9yKTsKLSAg
ICAgICAgRXh0VGV4dE91dChtX2hkYywgeCArIHNoYWRvd09mZnNldC53aWR0aCgpLCB5ICsgc2hh
ZG93T2Zmc2V0LmhlaWdodCgpLCBFVE9fR0xZUEhfSU5ERVgsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3Qgd2NoYXJfdCo+KCZnbHlwaHNbMF0pLCBudW1HbHlwaHMsICZhZHZhbmNlc1swXSk7Ci0g
ICAgICAgIFNldFRleHRDb2xvcihtX2hkYywgc2F2ZWRUZXh0Q29sb3IpOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gISFFeHRUZXh0T3V0KG1faGRjLCB4LCB5LCBFVE9fR0xZUEhfSU5ERVgsIDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KCZnbHlwaHNbMF0pLCBudW1HbHlwaHMs
ICZhZHZhbmNlc1swXSk7Ci19Ci0KLWNsYXNzIFRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFp
bnRlciA6IHB1YmxpYyBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyIHsKLSBwdWJsaWM6Ci0g
ICAgVHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyKEdyYXBoaWNzQ29udGV4dCosCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQqLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0UnVuJiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCB0bywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYpOwotICAgIH5U
cmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXIoKTsKLQotICAgIC8vIFVuaXNjaWJlIHdp
bGwgZHJhdyBkaXJlY3RseSBpbnRvIG91ciBidWZmZXIsIHNvIHdlIG5lZWQgdG8gZXhwb3NlIG91
ciBEQy4KLSAgICBIREMgaGRjKCkgY29uc3QgeyByZXR1cm4gbV9oZGM7IH0KLQotIHByaXZhdGU6
Ci0gICAgdmlydHVhbCBJbnRSZWN0IGVzdGltYXRlVGV4dEJvdW5kcygpOwotCi0gICAgY29uc3Qg
Rm9udCogbV9mb250OwotICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOwotICAgIGludCBtX2Zyb207
Ci0gICAgaW50IG1fdG87Ci19OwotCi1UcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXI6
OlRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcigKLSAgICBHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsCi0gICAgY29uc3QgRm9udCogZm9udCwKLSAgICBjb25zdCBUZXh0UnVuJiBydW4s
Ci0gICAgaW50IGZyb20sIGludCB0bywKLSAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLSAg
ICA6IFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIoY29udGV4dCwgcG9pbnQpCi0gICAgLCBt
X2ZvbnQoZm9udCkKLSAgICAsIG1fcnVuKHJ1bikKLSAgICAsIG1fZnJvbShmcm9tKQotICAgICwg
bV90byh0bykKLXsKLSAgICBpbml0KCk7Ci19Ci0KLVRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJl
UGFpbnRlcjo6flRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcigpCi17Ci19Ci0KLUlu
dFJlY3QgVHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjplc3RpbWF0ZVRleHRCb3Vu
ZHMoKQotewotICAgIC8vIFRoaXMgY2FzZSByZWFsbHkgcmVhbGx5IHN1Y2tzLiBUaGVyZSBpcyBu
byBjb252ZW5pZW50IHdheSB0byBlc3RpbWF0ZQotICAgIC8vIHRoZSBib3VuZGluZyBib3guIFNv
IHdlIHJ1biBVbmlzY3JpYmUgdHdpY2UuIElmIHdlIGZpbmQgdGhpcyBoYXBwZW5zIGEKLSAgICAv
LyBsb3QsIHRoZSB3YXkgdG8gZml4IGl0IGlzIHRvIG1ha2UgdGhlIGV4dHJhIGxheWVyIGFmdGVy
IHRoZQotICAgIC8vIFVuaXNjcmliZUhlbHBlciBoYXMgbWVhc3VyZWQgdGhlIHRleHQuCi0gICAg
SW50UG9pbnQgaW50UG9pbnQobHJvdW5kZihtX3BvaW50LngoKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgbHJvdW5kZihtX3BvaW50LnkoKSkpOwotCi0gICAgVW5pc2NyaWJlSGVscGVyVGV4dFJ1
biBzdGF0ZShtX3J1biwgKm1fZm9udCk7Ci0gICAgaW50IGxlZnQgPSBscm91bmRmKG1fcG9pbnQu
eCgpKSArIHN0YXRlLmNoYXJhY3RlclRvWChtX2Zyb20pOwotICAgIGludCByaWdodCA9IGxyb3Vu
ZGYobV9wb2ludC54KCkpICsgc3RhdGUuY2hhcmFjdGVyVG9YKG1fdG8pOwotICAgIAotICAgIC8v
IEFkanVzdCBmb3IgUlRMIHNjcmlwdCBzaW5jZSB3ZSBqdXN0IHdhbnQgdG8ga25vdyB0aGUgdGV4
dCBib3VuZHMuCi0gICAgaWYgKGxlZnQgPiByaWdodCkKLSAgICAgICAgc3RkOjpzd2FwKGxlZnQs
IHJpZ2h0KTsKLQotICAgIC8vIFRoaXMgYWxnb3JpdGhtIGZvciBlc3RpbWF0aW5nIGhvdyBtdWNo
IGV4dHJhIHNwYWNlIHdlIG5lZWQgKHRoZSB0ZXh0IG1heQotICAgIC8vIGdvIG91dHNpZGUgdGhl
IHNlbGVjdGlvbiByZWN0KSBpcyBiYXNlZCByb3VnaGx5IG9uCi0gICAgLy8gVHJhbnNwYXJlbmN5
QXdhcmVHbHlwaFBhaW50ZXI6OmVzdGltYXRlVGV4dEJvdW5kcyBhYm92ZS4KLSAgICBjb25zdCBG
b250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBtX2ZvbnQtPmZvbnRNZXRyaWNzKCk7Ci0gICAgcmV0
dXJuIEludFJlY3QobGVmdCAtIChmb250TWV0cmljcy5hc2NlbnQoKSArIGZvbnRNZXRyaWNzLmRl
c2NlbnQoKSkgLyAyLAotICAgICAgICAgICAgICAgICAgIG1fcG9pbnQueSgpIC0gZm9udE1ldHJp
Y3MuYXNjZW50KCkgLSBmb250TWV0cmljcy5saW5lR2FwKCksCi0gICAgICAgICAgICAgICAgICAg
KHJpZ2h0IC0gbGVmdCkgKyBmb250TWV0cmljcy5hc2NlbnQoKSArIGZvbnRNZXRyaWNzLmRlc2Nl
bnQoKSwKLSAgICAgICAgICAgICAgICAgICBmb250TWV0cmljcy5saW5lU3BhY2luZygpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UKLSNlbmRpZgotCi1ib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNr
Rm9udHNGb3JDb21wbGV4VGV4dCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEZv
bnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLSNpZiBVU0UoU0tJQV9URVhUKQotdm9pZCBGb250OjpkcmF3R2x5cGhz
KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJv
bSwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtR2x5cGhzLAotICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAotewotICAgIFNrQ29sb3IgY29s
b3IgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5lZmZlY3RpdmVGaWxsQ29s
b3IoKTsKLSAgICB1bnNpZ25lZCBjaGFyIGFscGhhID0gU2tDb2xvckdldEEoY29sb3IpOwotICAg
IC8vIFNraXAgMTAwJSB0cmFuc3BhcmVudCB0ZXh0OyBubyBuZWVkIHRvIGRyYXcgYW55dGhpbmcu
Ci0gICAgaWYgKCFhbHBoYSAmJiBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5n
ZXRTdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlICYmICFncmFwaGljc0NvbnRleHQtPmhhc1NoYWRv
dygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBkcmF3IHRoZSBnbHlwaHMgaW4gY2h1
bmtzIHRvIGF2b2lkIGhhdmluZyB0byBkbyBhIGhlYXAgYWxsb2NhdGlvbiBmb3IKLSAgICAvLyB0
aGUgYXJyYXlzIG9mIGNoYXJhY3RlcnMgYW5kIGFkdmFuY2VzLgotICAgIGNvbnN0IGludCBrTWF4
QnVmZmVyTGVuZ3RoID0gMjU2OwotICAgIFZlY3RvcjxpbnQsIGtNYXhCdWZmZXJMZW5ndGg+IGFk
dmFuY2VzOwotICAgIGludCBnbHlwaEluZGV4ID0gMDsgIC8vIFRoZSBzdGFydGluZyBnbHlwaCBv
ZiB0aGUgY3VycmVudCBjaHVuay4KLQotICAgIGZsb2F0IGhvcml6b250YWxPZmZzZXQgPSBwb2lu
dC54KCk7IC8vIFRoZSBmbG9hdGluZyBwb2ludCBvZmZzZXQgb2YgdGhlIGxlZnQgc2lkZSBvZiB0
aGUgY3VycmVudCBnbHlwaC4KLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgY29u
c3QgT3BlblR5cGVWZXJ0aWNhbERhdGEqIHZlcnRpY2FsRGF0YSA9IGZvbnQtPnZlcnRpY2FsRGF0
YSgpOwotICAgIGlmICh2ZXJ0aWNhbERhdGEpIHsKLSAgICAgICAgVmVjdG9yPEZsb2F0UG9pbnQs
IGtNYXhCdWZmZXJMZW5ndGg+IHRyYW5zbGF0aW9uczsKLSAgICAgICAgVmVjdG9yPEdPRkZTRVQs
IGtNYXhCdWZmZXJMZW5ndGg+IG9mZnNldHM7Ci0KLSAgICAgICAgLy8gU2tpYSBkb2Vzbid0IGhh
dmUgbWF0cml4IGZvciBnbHlwaCBjb29yZGluYXRlIHNwYWNlLCBzbyB3ZSByb3RhdGUgYmFjayB0
aGUgQ1RNLgotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gc2F2ZWRNYXRyaXggPSBncmFwaGljc0Nv
bnRleHQtPmdldENUTSgpOwotICAgICAgICBncmFwaGljc0NvbnRleHQtPmNvbmNhdENUTShBZmZp
bmVUcmFuc2Zvcm0oMCwgLTEsIDEsIDAsIHBvaW50LngoKSwgcG9pbnQueSgpKSk7Ci0gICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAxLCAt
cG9pbnQueCgpLCAtcG9pbnQueSgpKSk7Ci0KLSAgICAgICAgY29uc3QgRm9udE1ldHJpY3MmIG1l
dHJpY3MgPSBmb250LT5mb250TWV0cmljcygpOwotICAgICAgICBTa1NjYWxhciB2ZXJ0aWNhbE9y
aWdpblggPSBTa0Zsb2F0VG9TY2FsYXIocG9pbnQueCgpICsgbWV0cmljcy5mbG9hdEFzY2VudCgp
IC0gbWV0cmljcy5mbG9hdEFzY2VudChJZGVvZ3JhcGhpY0Jhc2VsaW5lKSk7Ci0gICAgICAgIHdo
aWxlIChnbHlwaEluZGV4IDwgbnVtR2x5cGhzKSB7Ci0gICAgICAgICAgICAvLyBIb3cgbWFueSBj
aGFycyB3aWxsIGJlIGluIHRoaXMgY2h1bms/Ci0gICAgICAgICAgICBpbnQgY3VyTGVuID0gc3Rk
OjptaW4oa01heEJ1ZmZlckxlbmd0aCwgbnVtR2x5cGhzIC0gZ2x5cGhJbmRleCk7Ci0KLSAgICAg
ICAgICAgIGNvbnN0IEdseXBoKiBnbHlwaHMgPSBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSArIGds
eXBoSW5kZXgpOwotICAgICAgICAgICAgdHJhbnNsYXRpb25zLnJlc2l6ZShjdXJMZW4pOwotICAg
ICAgICAgICAgdmVydGljYWxEYXRhLT5nZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhm
b250LCAmZ2x5cGhzWzBdLCBjdXJMZW4sIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPigmdHJhbnNs
YXRpb25zWzBdKSk7Ci0gICAgICAgICAgICAvLyBUbyBwb3NpdGlvbiBnbHlwaHMgdmVydGljYWxs
eSwgd2UgdXNlIG9mZnNldHMgaW5zdGVhZCBvZiBhZHZhbmNlcy4KLSAgICAgICAgICAgIGFkdmFu
Y2VzLnJlc2l6ZShjdXJMZW4pOwotICAgICAgICAgICAgYWR2YW5jZXMuZmlsbCgwKTsKLSAgICAg
ICAgICAgIG9mZnNldHMucmVzaXplKGN1ckxlbik7Ci0gICAgICAgICAgICBmbG9hdCBjdXJyZW50
V2lkdGggPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjdXJMZW47ICsraSwg
KytnbHlwaEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0c1tpXS5kdSA9IGxyb3VuZGYo
dHJhbnNsYXRpb25zW2ldLngoKSk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0c1tpXS5kdiA9IC1s
cm91bmRmKGN1cnJlbnRXaWR0aCAtIHRyYW5zbGF0aW9uc1tpXS55KCkpOwotICAgICAgICAgICAg
ICAgIGN1cnJlbnRXaWR0aCArPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoZnJvbSArIGdseXBoSW5k
ZXgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU2tQb2ludCBvcmlnaW47Ci0gICAgICAg
ICAgICBvcmlnaW4uc2V0KHZlcnRpY2FsT3JpZ2luWCwgU2tGbG9hdFRvU2NhbGFyKHBvaW50Lnko
KSArIGhvcml6b250YWxPZmZzZXQgLSBwb2ludC54KCkpKTsKLSAgICAgICAgICAgIGhvcml6b250
YWxPZmZzZXQgKz0gY3VycmVudFdpZHRoOwotICAgICAgICAgICAgcGFpbnRTa2lhVGV4dChncmFw
aGljc0NvbnRleHQsIGZvbnQtPnBsYXRmb3JtRGF0YSgpLCBjdXJMZW4sICZnbHlwaHNbMF0sICZh
ZHZhbmNlc1swXSwgJm9mZnNldHNbMF0sICZvcmlnaW4pOwotICAgICAgICB9Ci0KLSAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5zZXRDVE0oc2F2ZWRNYXRyaXgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotI2VuZGlmCi0KLSAgICAvLyBJbiBvcmRlciB0byByb3VuZCBhbGwgb2Zmc2V0cyB0byB0
aGUgY29ycmVjdCBwaXhlbCBib3VuZGFyeSwgdGhpcyBjb2RlIGtlZXBzIHRyYWNrIG9mIHRoZSBh
YnNvbHV0ZSBwb3NpdGlvbgotICAgIC8vIG9mIGVhY2ggZ2x5cGggaW4gZmxvYXRpbmcgcG9pbnQg
dW5pdHMgYW5kIHJvdW5kcyB0byBpbnRlZ2VyIGFkdmFuY2VzIGF0IHRoZSBsYXN0IHBvc3NpYmxl
IG1vbWVudC4KLQotICAgIGludCBsYXN0SG9yaXpvbnRhbE9mZnNldFJvdW5kZWQgPSBscm91bmRm
KGhvcml6b250YWxPZmZzZXQpOyAvLyBUaGUgcm91bmRlZCBvZmZzZXQgb2YgdGhlIGxlZnQgc2lk
ZSBvZiB0aGUgbGFzdCBnbHlwaCByZW5kZXJlZC4KLSAgICBWZWN0b3I8V09SRCwga01heEJ1ZmZl
ckxlbmd0aD4gZ2x5cGhzOwotICAgIHdoaWxlIChnbHlwaEluZGV4IDwgbnVtR2x5cGhzKSB7Ci0g
ICAgICAgIC8vIEhvdyBtYW55IGNoYXJzIHdpbGwgYmUgaW4gdGhpcyBjaHVuaz8KLSAgICAgICAg
aW50IGN1ckxlbiA9IHN0ZDo6bWluKGtNYXhCdWZmZXJMZW5ndGgsIG51bUdseXBocyAtIGdseXBo
SW5kZXgpOwotICAgICAgICBnbHlwaHMucmVzaXplKGN1ckxlbik7Ci0gICAgICAgIGFkdmFuY2Vz
LnJlc2l6ZShjdXJMZW4pOwotCi0gICAgICAgIGZsb2F0IGN1cnJlbnRXaWR0aCA9IDA7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3VyTGVuOyArK2ksICsrZ2x5cGhJbmRleCkgewotICAg
ICAgICAgICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZmZXIuZ2x5cGhBdChmcm9tICsgZ2x5cGhJbmRl
eCk7Ci0gICAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VB
dChmcm9tICsgZ2x5cGhJbmRleCk7Ci0gICAgICAgICAgICBhZHZhbmNlc1tpXSA9IGxyb3VuZGYo
aG9yaXpvbnRhbE9mZnNldCkgLSBsYXN0SG9yaXpvbnRhbE9mZnNldFJvdW5kZWQ7Ci0gICAgICAg
ICAgICBsYXN0SG9yaXpvbnRhbE9mZnNldFJvdW5kZWQgKz0gYWR2YW5jZXNbaV07Ci0gICAgICAg
ICAgICBjdXJyZW50V2lkdGggKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGZyb20gKyBnbHlwaElu
ZGV4KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQnVnIDI2MDg4IC0gdmVyeSBsYXJn
ZSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBydW5zIGNhbiBmYWlsIHRvCi0gICAgICAgICAgICAvLyBy
ZW5kZXIgc28gd2UgY2xhbXAgdGhlIHNpemUgaGVyZS4gSW4gdGhlIHNwZWNzLCBuZWdhdGl2ZQot
ICAgICAgICAgICAgLy8gbGV0dGVyLXNwYWNpbmcgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZCwg
c28gdGhpcyBzaG91bGQgYmUKLSAgICAgICAgICAgIC8vIGZpbmUsIGFuZCBpdCBtYXRjaGVzIFNh
ZmFyaSdzIGltcGxlbWVudGF0aW9uLiBUaGUgY2FsbCBhY3R1YWxseQotICAgICAgICAgICAgLy8g
c2VlbXMgdG8gY3Jhc2ggaWYga01heE5lZ2F0aXZlUnVuIGlzIHNldCB0byBzb21ld2hlcmUgYXJv
dW5kCi0gICAgICAgICAgICAvLyAtMzI4MzAsIHNvIHdlIGdpdmUgb3Vyc2VsdmVzIGEgbGl0dGxl
IGJyZWF0aGluZyByb29tLgotICAgICAgICAgICAgY29uc3QgaW50IG1heE5lZ2F0aXZlUnVuID0g
LTMyNzY4OwotICAgICAgICAgICAgY29uc3QgaW50IG1heFBvc2l0aXZlUnVuID0gIDMyNzY4Owot
ICAgICAgICAgICAgaWYgKChjdXJyZW50V2lkdGggKyBhZHZhbmNlc1tpXSA8IG1heE5lZ2F0aXZl
UnVuKSB8fCAoY3VycmVudFdpZHRoICsgYWR2YW5jZXNbaV0gPiBtYXhQb3NpdGl2ZVJ1bikpIAot
ICAgICAgICAgICAgICAgIGFkdmFuY2VzW2ldID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIFNr
UG9pbnQgb3JpZ2luID0gcG9pbnQ7Ci0gICAgICAgIG9yaWdpbi5mWCArPSBTa0Zsb2F0VG9TY2Fs
YXIoaG9yaXpvbnRhbE9mZnNldCAtIHBvaW50LngoKSAtIGN1cnJlbnRXaWR0aCk7Ci0gICAgICAg
IHBhaW50U2tpYVRleHQoZ3JhcGhpY3NDb250ZXh0LCBmb250LT5wbGF0Zm9ybURhdGEoKSwgY3Vy
TGVuLCAmZ2x5cGhzWzBdLCAmYWR2YW5jZXNbMF0sIDAsICZvcmlnaW4pOwotICAgIH0KLX0KLSNl
bHNlCi1zdGF0aWMgdm9pZCBkcmF3R2x5cGhzV2luKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IG51bUdseXBocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIHsKLSAgICBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFp
bnRlciBwYWludGVyKGdyYXBoaWNzQ29udGV4dCwgZm9udCwgZ2x5cGhCdWZmZXIsIGZyb20sIG51
bUdseXBocywgcG9pbnQpOwotCi0gICAgLy8gV2UgZHJhdyB0aGUgZ2x5cGhzIGluIGNodW5rcyB0
byBhdm9pZCBoYXZpbmcgdG8gZG8gYSBoZWFwIGFsbG9jYXRpb24gZm9yCi0gICAgLy8gdGhlIGFy
cmF5cyBvZiBjaGFyYWN0ZXJzIGFuZCBhZHZhbmNlcy4gU2luY2UgRXh0VGV4dE91dCBpcyB0aGUK
LSAgICAvLyBsb3dlc3QtbGV2ZWwgdGV4dCBvdXRwdXQgZnVuY3Rpb24gb24gV2luZG93cywgdGhl
cmUgc2hvdWxkIGJlIGxpdHRsZQotICAgIC8vIHBlbmFsdHkgZm9yIHNwbGl0dGluZyB1cCB0aGUg
dGV4dC4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBidWZmZXIgY2Fubm90Ci0gICAgLy8gYmUgYmln
Z2VyIHRoYW4gNDA5NCBvciB0aGUgZnVuY3Rpb24gd2lsbCBmYWlsLgotICAgIGNvbnN0IGludCBr
TWF4QnVmZmVyTGVuZ3RoID0gMjU2OwotICAgIFZlY3RvcjxXT1JELCBrTWF4QnVmZmVyTGVuZ3Ro
PiBnbHlwaHM7Ci0gICAgVmVjdG9yPGludCwga01heEJ1ZmZlckxlbmd0aD4gYWR2YW5jZXM7Ci0g
ICAgaW50IGdseXBoSW5kZXggPSAwOyAvLyBUaGUgc3RhcnRpbmcgZ2x5cGggb2YgdGhlIGN1cnJl
bnQgY2h1bmsuCi0KLSAgICAvLyBJbiBvcmRlciB0byByb3VuZCBhbGwgb2Zmc2V0cyB0byB0aGUg
Y29ycmVjdCBwaXhlbCBib3VuZGFyeSwgdGhpcyBjb2RlIGtlZXBzIHRyYWNrIG9mIHRoZSBhYnNv
bHV0ZSBwb3NpdGlvbgotICAgIC8vIG9mIGVhY2ggZ2x5cGggaW4gZmxvYXRpbmcgcG9pbnQgdW5p
dHMgYW5kIHJvdW5kcyB0byBpbnRlZ2VyIGFkdmFuY2VzIGF0IHRoZSBsYXN0IHBvc3NpYmxlIG1v
bWVudC4KLQotICAgIGZsb2F0IGhvcml6b250YWxPZmZzZXQgPSBwb2ludC54KCk7IC8vIFRoZSBm
bG9hdGluZyBwb2ludCBvZmZzZXQgb2YgdGhlIGxlZnQgc2lkZSBvZiB0aGUgY3VycmVudCBnbHlw
aC4KLSAgICBpbnQgbGFzdEhvcml6b250YWxPZmZzZXRSb3VuZGVkID0gbHJvdW5kZihob3Jpem9u
dGFsT2Zmc2V0KTsgLy8gVGhlIHJvdW5kZWQgb2Zmc2V0IG9mIHRoZSBsZWZ0IHNpZGUgb2YgdGhl
IGxhc3QgZ2x5cGggcmVuZGVyZWQuCi0gICAgd2hpbGUgKGdseXBoSW5kZXggPCBudW1HbHlwaHMp
IHsKLSAgICAgICAgLy8gSG93IG1hbnkgY2hhcnMgd2lsbCBiZSBpbiB0aGlzIGNodW5rPwotICAg
ICAgICBpbnQgY3VyTGVuID0gbWluKGtNYXhCdWZmZXJMZW5ndGgsIG51bUdseXBocyAtIGdseXBo
SW5kZXgpOwotICAgICAgICBnbHlwaHMucmVzaXplKGN1ckxlbik7Ci0gICAgICAgIGFkdmFuY2Vz
LnJlc2l6ZShjdXJMZW4pOwotCi0gICAgICAgIGZsb2F0IGN1cnJlbnRXaWR0aCA9IDA7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3VyTGVuOyArK2ksICsrZ2x5cGhJbmRleCkgewotICAg
ICAgICAgICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZmZXIuZ2x5cGhBdChmcm9tICsgZ2x5cGhJbmRl
eCk7Ci0gICAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VB
dChmcm9tICsgZ2x5cGhJbmRleCk7Ci0gICAgICAgICAgICBhZHZhbmNlc1tpXSA9IGxyb3VuZGYo
aG9yaXpvbnRhbE9mZnNldCkgLSBsYXN0SG9yaXpvbnRhbE9mZnNldFJvdW5kZWQ7Ci0gICAgICAg
ICAgICBsYXN0SG9yaXpvbnRhbE9mZnNldFJvdW5kZWQgKz0gYWR2YW5jZXNbaV07Ci0gICAgICAg
ICAgICBjdXJyZW50V2lkdGggKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGZyb20gKyBnbHlwaElu
ZGV4KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQnVnIDI2MDg4IC0gdmVyeSBsYXJn
ZSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBydW5zIGNhbiBmYWlsIHRvCi0gICAgICAgICAgICAvLyBy
ZW5kZXIgc28gd2UgY2xhbXAgdGhlIHNpemUgaGVyZS4gSW4gdGhlIHNwZWNzLCBuZWdhdGl2ZQot
ICAgICAgICAgICAgLy8gbGV0dGVyLXNwYWNpbmcgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZCwg
c28gdGhpcyBzaG91bGQgYmUKLSAgICAgICAgICAgIC8vIGZpbmUsIGFuZCBpdCBtYXRjaGVzIFNh
ZmFyaSdzIGltcGxlbWVudGF0aW9uLiBUaGUgY2FsbCBhY3R1YWxseQotICAgICAgICAgICAgLy8g
c2VlbXMgdG8gY3Jhc2ggaWYga01heE5lZ2F0aXZlUnVuIGlzIHNldCB0byBzb21ld2hlcmUgYXJv
dW5kCi0gICAgICAgICAgICAvLyAtMzI4MzAsIHNvIHdlIGdpdmUgb3Vyc2VsdmVzIGEgbGl0dGxl
IGJyZWF0aGluZyByb29tLgotICAgICAgICAgICAgY29uc3QgaW50IG1heE5lZ2F0aXZlUnVuID0g
LTMyNzY4OwotICAgICAgICAgICAgY29uc3QgaW50IG1heFBvc2l0aXZlUnVuID0gIDMyNzY4Owot
ICAgICAgICAgICAgaWYgKChjdXJyZW50V2lkdGggKyBhZHZhbmNlc1tpXSA8IG1heE5lZ2F0aXZl
UnVuKSB8fCAoY3VycmVudFdpZHRoICsgYWR2YW5jZXNbaV0gPiBtYXhQb3NpdGl2ZVJ1bikpIAot
ICAgICAgICAgICAgICAgIGFkdmFuY2VzW2ldID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IEFjdHVhbGx5IGRyYXcgdGhlIGdseXBocyAod2l0aCByZXRyeSBvbiBmYWlsdXJlKS4KLSAgICAg
ICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIGZvciAoaW50IGV4ZWN1dGlvbnMgPSAw
OyBleGVjdXRpb25zIDwgMjsgKytleGVjdXRpb25zKSB7Ci0gICAgICAgICAgICBzdWNjZXNzID0g
cGFpbnRlci5kcmF3R2x5cGhzKGN1ckxlbiwgJmdseXBoc1swXSwgJmFkdmFuY2VzWzBdLCBob3Jp
em9udGFsT2Zmc2V0IC0gcG9pbnQueCgpIC0gY3VycmVudFdpZHRoKTsKLSAgICAgICAgICAgIGlm
ICghc3VjY2VzcyAmJiAhZXhlY3V0aW9ucykgewotICAgICAgICAgICAgICAgIC8vIEFzayB0aGUg
YnJvd3NlciB0byBsb2FkIHRoZSBmb250IGZvciB1cyBhbmQgcmV0cnkuCi0gICAgICAgICAgICAg
ICAgRm9udFBsYXRmb3JtRGF0YTo6ZW5zdXJlRm9udExvYWRlZChmb250LT5wbGF0Zm9ybURhdGEo
KS5oZm9udCgpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAg
ICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZHJhdyB0aGUgZ2x5cGhzIGFmdGVyIHNlY29u
ZCBhdHRlbXB0Iik7Ci0gICAgfQotfQotCi12b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZm
ZXImIGdseXBoQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLAotICAgICAg
ICAgICAgICAgICAgICAgIGludCBudW1HbHlwaHMsCi0gICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgU2tDb2xvciBjb2xvciA9IGdyYXBo
aWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmVmZmVjdGl2ZUZpbGxDb2xvcigpOwotICAg
IHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBTa0NvbG9yR2V0QShjb2xvcik7Ci0gICAgLy8gU2tpcCAx
MDAlIHRyYW5zcGFyZW50IHRleHQ7IG5vIG5lZWQgdG8gZHJhdyBhbnl0aGluZy4KLSAgICBpZiAo
IWFscGhhICYmIGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmdldFN0cm9rZVN0
eWxlKCkgPT0gTm9TdHJva2UgJiYgIWdyYXBoaWNzQ29udGV4dC0+aGFzU2hhZG93KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIWFscGhhIHx8IHdpbmRvd3NDYW5IYW5kbGVEcmF3VGV4dFNo
YWRvdyhncmFwaGljc0NvbnRleHQpIHx8ICF3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmdXaXRo
b3V0U2hhZG93KGdyYXBoaWNzQ29udGV4dCkpIHsKLSAgICAgICAgZHJhd0dseXBoc1dpbihncmFw
aGljc0NvbnRleHQsIGZvbnQsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBEcmF3IGluIHR3byBwYXNzZXM6IHNraWEg
Zm9yIHRoZSBzaGFkb3csIEdESSBmb3IgZm9yZWdyb3VuZCB0ZXh0Ci0gICAgLy8gcGFzczE6IHNo
YWRvdyAod2lsbCB1c2Ugc2tpYSkKLSAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICBn
cmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQsIGdyYXBoaWNz
Q29udGV4dC0+ZmlsbENvbG9yU3BhY2UoKSk7Ci0gICAgZHJhd0dseXBoc1dpbihncmFwaGljc0Nv
bnRleHQsIGZvbnQsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsKLSAgICBn
cmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKLSAgICAvLyBwYXNzMjogZm9yZWdyb3VuZCB0ZXh0
ICh3aWxsIHVzZSBHREkpCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBz
aGFkb3dCbHVyOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIENvbG9yU3BhY2Ugc2hhZG93
Q29sb3JTcGFjZTsKLSAgICBncmFwaGljc0NvbnRleHQtPmdldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKLSAgICBncmFwaGlj
c0NvbnRleHQtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIENvbG9yOjp0cmFu
c3BhcmVudCwgc2hhZG93Q29sb3JTcGFjZSk7Ci0gICAgZHJhd0dseXBoc1dpbihncmFwaGljc0Nv
bnRleHQsIGZvbnQsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsKLSAgICBn
cmFwaGljc0NvbnRleHQtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRv
d0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKLX0KLSNlbmRpZgotCi1GbG9hdFJlY3QgRm9udDo6
c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRvKSBjb25zdAot
ewotICAgIFVuaXNjcmliZUhlbHBlclRleHRSdW4gc3RhdGUocnVuLCAqdGhpcyk7Ci0gICAgZmxv
YXQgbGVmdCA9IHN0YXRpY19jYXN0PGZsb2F0Pihwb2ludC54KCkgKyBzdGF0ZS5jaGFyYWN0ZXJU
b1goZnJvbSkpOwotICAgIGZsb2F0IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBvaW50Lngo
KSArIHN0YXRlLmNoYXJhY3RlclRvWCh0bykpOwotCi0gICAgLy8gSWYgdGhlIHRleHQgaXMgUlRM
LCBsZWZ0IHdpbGwgYWN0dWFsbHkgYmUgYWZ0ZXIgcmlnaHQuCi0gICAgaWYgKGxlZnQgPCByaWdo
dCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChsZWZ0LCBwb2ludC55KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgIHJpZ2h0IC0gbGVmdCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGgpKTsKLQotICAg
IHJldHVybiBGbG9hdFJlY3QocmlnaHQsIHBvaW50LnkoKSwKLSAgICAgICAgICAgICAgICAgICAg
IGxlZnQgLSByaWdodCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGgpKTsKLX0KLQotdm9pZCBGb250Ojpk
cmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0UnVuJiBydW4sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBmcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRvKSBjb25z
dAotewotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gZ3JhcGhpY3NDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBVbmlzY3JpYmVIZWxwZXJUZXh0UnVuIHN0YXRl
KHJ1biwgKnRoaXMpOwotCi0gICAgU2tDb2xvciBjb2xvciA9IGdyYXBoaWNzQ29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmVmZmVjdGl2ZUZpbGxDb2xvcigpOwotICAgIHVuc2lnbmVkIGNoYXIg
YWxwaGEgPSBTa0NvbG9yR2V0QShjb2xvcik7Ci0gICAgLy8gU2tpcCAxMDAlIHRyYW5zcGFyZW50
IHRleHQ7IG5vIG5lZWQgdG8gZHJhdyBhbnl0aGluZy4KLSAgICBpZiAoIWFscGhhICYmIGdyYXBo
aWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmdldFN0cm9rZVN0eWxlKCkgPT0gTm9TdHJv
a2UpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShTS0lBX1RFWFQpCi0gICAgSERDIGhkYyA9
IDA7Ci0jZWxzZQotICAgIFRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlciBwYWludGVy
KGdyYXBoaWNzQ29udGV4dCwgdGhpcywgcnVuLCBmcm9tLCB0bywgcG9pbnQpOwotCi0gICAgSERD
IGhkYyA9IHBhaW50ZXIuaGRjKCk7Ci0gICAgaWYgKHdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2lu
ZyhncmFwaGljc0NvbnRleHQpICYmICFoZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRP
RE8obWFydWVsKTogaHR0cDovL2IvNzAwNDY0IFNldFRleHRDb2xvciBkb2Vzbid0IHN1cHBvcnQg
dHJhbnNwYXJlbmN5LgotICAgIC8vIEVuZm9yY2Ugbm9uLXRyYW5zcGFyZW50IGNvbG9yLgotICAg
IGNvbG9yID0gU2tDb2xvclNldFJHQihTa0NvbG9yR2V0Uihjb2xvciksIFNrQ29sb3JHZXRHKGNv
bG9yKSwgU2tDb2xvckdldEIoY29sb3IpKTsKLSAgICBpZiAoaGRjKSB7Ci0gICAgICAgIFNldFRl
eHRDb2xvcihoZGMsIHNraWE6OlNrQ29sb3JUb0NPTE9SUkVGKGNvbG9yKSk7Ci0gICAgICAgIFNl
dEJrTW9kZShoZGMsIFRSQU5TUEFSRU5UKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBh
IG5vbi1ibHVyIHNoYWRvdyBhbmQgYm90aCB0aGUgZmlsbCBjb2xvciBhbmQgc2hhZG93IGNvbG9y
IAotICAgIC8vIGFyZSBvcGFxdWUsIGhhbmRsZSB3aXRob3V0IHNraWEuIAotICAgIEZsb2F0U2l6
ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dD
b2xvcjsKLSAgICBDb2xvclNwYWNlIHNoYWRvd0NvbG9yU3BhY2U7Ci0gICAgaWYgKGdyYXBoaWNz
Q29udGV4dC0+Z2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3Is
IHNoYWRvd0NvbG9yU3BhY2UpICYmIHdpbmRvd3NDYW5IYW5kbGVEcmF3VGV4dFNoYWRvdyhncmFw
aGljc0NvbnRleHQpKSB7Ci0gICAgICAgIENPTE9SUkVGIHRleHRDb2xvciA9IHNraWE6OlNrQ29s
b3JUb0NPTE9SUkVGKFNrQ29sb3JTZXRBUkdCKDI1NSwgc2hhZG93Q29sb3IucmVkKCksIHNoYWRv
d0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSkpOwotICAgICAgICBDT0xPUlJFRiBz
YXZlZFRleHRDb2xvciA9IEdldFRleHRDb2xvcihoZGMpOwotICAgICAgICBTZXRUZXh0Q29sb3Io
aGRjLCB0ZXh0Q29sb3IpOwotICAgICAgICBzdGF0ZS5kcmF3KGdyYXBoaWNzQ29udGV4dCwgaGRj
LCBzdGF0aWNfY2FzdDxpbnQ+KHBvaW50LngoKSkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKSwKLSAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHBvaW50LnkoKSAtIGZvbnRNZXRyaWNz
KCkuYXNjZW50KCkpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpLCBmcm9tLCB0byk7Ci0gICAgICAg
IFNldFRleHRDb2xvcihoZGMsIHNhdmVkVGV4dENvbG9yKTsgCi0gICAgfQotI2VuZGlmCi0gICAg
Ly8gVW5pc2NyaWJlIGNvdW50cyB0aGUgY29vcmRpbmF0ZXMgZnJvbSB0aGUgdXBwZXIgbGVmdCwg
d2hpbGUgV2ViS2l0IHVzZXMKLSAgICAvLyB0aGUgYmFzZWxpbmUsIHNvIHdlIGhhdmUgdG8gc3Vi
dHJhY3Qgb2ZmIHRoZSBhc2NlbnQuCi0gICAgc3RhdGUuZHJhdyhncmFwaGljc0NvbnRleHQsIGhk
YywgbHJvdW5kZihwb2ludC54KCkpLCBscm91bmRmKHBvaW50LnkoKSAtIGZvbnRNZXRyaWNzKCku
YXNjZW50KCkpLCBmcm9tLCB0byk7Ci19Ci0KLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NG
b3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRS
dW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9h
dFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykgY29uc3QK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoRm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnRE
YXRhKj4qIC8qIGZhbGxiYWNrRm9udHMgKi8sIEdseXBoT3ZlcmZsb3cqIC8qIGdseXBoT3ZlcmZs
b3cgKi8pIGNvbnN0Ci17Ci0gICAgVW5pc2NyaWJlSGVscGVyVGV4dFJ1biBzdGF0ZShydW4sICp0
aGlzKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRlLndpZHRoKCkpOwotfQot
Ci1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIGZsb2F0IHhGbG9hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6
IFRoaXMgdHJ1bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGZvciBIVE1MLCBidXQgb25seSBhZmZl
Y3RzIFNWRywgd2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50IG51bWJlcnMKLSAgICAvLyB0byBG
b250OjpvZmZzZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5vcmcvYi80MDY3MyB0
cmFja3MgZml4aW5nIHRoaXMgcHJvYmxlbS4KLSAgICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4o
eEZsb2F0KTsKLQotICAgIC8vIE1hYyBjb2RlIGlnbm9yZXMgaW5jbHVkZVBhcnRpYWxHbHlwaHMs
IGFuZCB0aGV5IGRvbid0IGtub3cgd2hhdCBpdCdzCi0gICAgLy8gc3VwcG9zZWQgdG8gZG8sIHNv
IHdlIGp1c3QgaWdub3JlIGl0IGFzIHdlbGwuCi0gICAgVW5pc2NyaWJlSGVscGVyVGV4dFJ1biBz
dGF0ZShydW4sICp0aGlzKTsKLSAgICBpbnQgY2hhckluZGV4ID0gc3RhdGUueFRvQ2hhcmFjdGVy
KHgpOwotCi0gICAgLy8gWFRvQ2hhcmFjdGVyIHdpbGwgcmV0dXJuIC0xIGlmIHRoZSBwb3NpdGlv
biBpcyBiZWZvcmUgdGhlIGZpcnN0Ci0gICAgLy8gY2hhcmFjdGVyICh3ZSBnZXQgY2FsbGVkIGxp
a2UgdGhpcyBzb21ldGltZXMpLgotICAgIGlmIChjaGFySW5kZXggPCAwKQotICAgICAgICBjaGFy
SW5kZXggPSAwOwotICAgIHJldHVybiBjaGFySW5kZXg7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Zv
bnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDE0NzczMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChj
KSAyMDA3LCAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRm9u
dFBsYXRmb3JtRGF0YV9oCi0jZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFfaAotCi0jaWYgT1MoV0lO
RE9XUykKLSNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uaCIKLSNlbGlmIE9T
KFVOSVgpICYmICFPUyhEQVJXSU4pCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YUhhcmZCdXp6
LmgiCi0jZW5kaWYKLQotI2VuZGlmICAvLyBGb250UGxhdGZvcm1EYXRhX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFDaHJv
bWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gMTQ3
NzMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBs
YXRmb3JtRGF0YUNocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMzQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBDb21wdXRlciwgSW5jLgot
ICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRQ
bGF0Zm9ybURhdGEuaCIKLQotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkhXbmRE
Qy5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlNrVHlwZWZhY2Vfd2lu
LmgiCi0jaW5jbHVkZSAiU2tpYUZvbnRXaW4uaCIKLSNpbmNsdWRlIDxtbGFuZy5oPgotI2luY2x1
ZGUgPG9iamlkbC5oPgotI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHB1
YmxpYy93aW4vV2ViU2FuZGJveFN1cHBvcnQuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNrVHlw
ZWZhY2UqIENyZWF0ZVR5cGVmYWNlRnJvbUhGb250KEhGT05UIGhmb250LCBpbnQqIHNpemUsIGlu
dCogbGZRdWFsaXR5KQotewotICAgIExPR0ZPTlQgaW5mbzsKLSAgICBHZXRPYmplY3QoaGZvbnQs
IHNpemVvZihpbmZvKSwgJmluZm8pOwotICAgIGlmIChzaXplKSB7Ci0gICAgICAgIGludCBoZWln
aHQgPSBpbmZvLmxmSGVpZ2h0OwotICAgICAgICBpZiAoaGVpZ2h0IDwgMCkKLSAgICAgICAgICAg
IGhlaWdodCA9IC1oZWlnaHQ7Ci0gICAgICAgICpzaXplID0gaGVpZ2h0OwotICAgIH0KLSAgICBp
ZiAobGZRdWFsaXR5KQotICAgICAgICAqbGZRdWFsaXR5ID0gaW5mby5sZlF1YWxpdHk7Ci0gICAg
cmV0dXJuIFNrQ3JlYXRlVHlwZWZhY2VGcm9tTE9HRk9OVChpbmZvKTsKLX0KLQotRm9udFBsYXRm
b3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
Ci0gICAgOiBtX2ZvbnQoaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpKQotICAgICwgbV9zaXpl
KC0xKQotICAgICwgbV9vcmllbnRhdGlvbihIb3Jpem9udGFsKQotICAgICwgbV9zY3JpcHRDYWNo
ZSgwKQotICAgICwgbV9zY3JpcHRGb250UHJvcGVydGllcygwKQotICAgICwgbV90eXBlZmFjZSgw
KQotICAgICwgbV9sZlF1YWxpdHkoREVGQVVMVF9RVUFMSVRZKQotewotfQotCi1Gb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKCkKLSAgICA6IG1fZm9udCgwKQotICAgICwgbV9zaXpl
KDApCi0gICAgLCBtX29yaWVudGF0aW9uKEhvcml6b250YWwpCi0gICAgLCBtX3NjcmlwdENhY2hl
KDApCi0gICAgLCBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzKDApCi0gICAgLCBtX3R5cGVmYWNlKDAp
Ci0gICAgLCBtX2xmUXVhbGl0eShERUZBVUxUX1FVQUxJVFkpCi17Ci19Ci0KLUZvbnRQbGF0Zm9y
bURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgRm9udE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKQotICAgIDogbV9mb250KFJlZkNvdW50ZWRIRk9OVDo6Y3JlYXRl
KGZvbnQpKQotICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX29yaWVudGF0aW9uKG9yaWVudGF0
aW9uKQotICAgICwgbV9zY3JpcHRDYWNoZSgwKQotICAgICwgbV9zY3JpcHRGb250UHJvcGVydGll
cygwKQotICAgICwgbV90eXBlZmFjZShDcmVhdGVUeXBlZmFjZUZyb21IRm9udChmb250LCAwLCAm
bV9sZlF1YWxpdHkpKQotewotfQotCi0vLyBGSVhNRTogdGhpcyBjb25zdHJ1Y3RvciBpcyBuZWVk
ZWQgZm9yIFNWRyBmb250cyBidXQgZG9lc24ndCBzZWVtIHRvIGRvIG11Y2gKLUZvbnRQbGF0Zm9y
bURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlx
dWUpCi0gICAgOiBtX2ZvbnQoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9vcmllbnRh
dGlvbihIb3Jpem9udGFsKQotICAgICwgbV9zY3JpcHRDYWNoZSgwKQotICAgICwgbV9zY3JpcHRG
b250UHJvcGVydGllcygwKQotICAgICwgbV90eXBlZmFjZSgwKQotICAgICwgbV9sZlF1YWxpdHko
REVGQVVMVF9RVUFMSVRZKQotewotfQotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGRhdGEpCi0gICAgOiBtX2ZvbnQoZGF0YS5tX2Zv
bnQpCi0gICAgLCBtX3NpemUoZGF0YS5tX3NpemUpCi0gICAgLCBtX29yaWVudGF0aW9uKGRhdGEu
bV9vcmllbnRhdGlvbikKLSAgICAsIG1fc2NyaXB0Q2FjaGUoMCkKLSAgICAsIG1fc2NyaXB0Rm9u
dFByb3BlcnRpZXMoMCkKLSAgICAsIG1fdHlwZWZhY2UoZGF0YS5tX3R5cGVmYWNlKQotICAgICwg
bV9sZlF1YWxpdHkoZGF0YS5tX2xmUXVhbGl0eSkKLXsKLSAgICBTa1NhZmVSZWYobV90eXBlZmFj
ZSk7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBkYXRhKQotewotICAgIGlmICh0aGlzICE9ICZkYXRhKSB7
Ci0gICAgICAgIG1fZm9udCA9IGRhdGEubV9mb250OwotICAgICAgICBtX3NpemUgPSBkYXRhLm1f
c2l6ZTsKLSAgICAgICAgbV9vcmllbnRhdGlvbiA9IGRhdGEubV9vcmllbnRhdGlvbjsKLSAgICAg
ICAgU2tSZWZDbnRfU2FmZUFzc2lnbihtX3R5cGVmYWNlLCBkYXRhLm1fdHlwZWZhY2UpOwotICAg
ICAgICBtX2xmUXVhbGl0eSA9IGRhdGEubV9sZlF1YWxpdHk7Ci0KLSAgICAgICAgLy8gVGhlIGZv
bGxvd2luZyBmaWVsZHMgd2lsbCBnZXQgcmUtY29tcHV0ZWQgaWYgbmVjZXNzYXJ5LgotICAgICAg
ICBTY3JpcHRGcmVlQ2FjaGUoJm1fc2NyaXB0Q2FjaGUpOwotICAgICAgICBtX3NjcmlwdENhY2hl
ID0gMDsKLQotICAgICAgICBkZWxldGUgbV9zY3JpcHRGb250UHJvcGVydGllczsKLSAgICAgICAg
bV9zY3JpcHRGb250UHJvcGVydGllcyA9IDA7Ci0gICAgfSAKLSAgICByZXR1cm4gKnRoaXM7Ci19
Ci0KLUZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKLXsKLSAgICBTa1NhZmVV
bnJlZihtX3R5cGVmYWNlKTsKLQotICAgIFNjcmlwdEZyZWVDYWNoZSgmbV9zY3JpcHRDYWNoZSk7
Ci0gICAgbV9zY3JpcHRDYWNoZSA9IDA7Ci0KLSAgICBkZWxldGUgbV9zY3JpcHRGb250UHJvcGVy
dGllczsKLSAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gMDsKLX0KLQotRm9udFBsYXRmb3Jt
RGF0YTo6UmVmQ291bnRlZEhGT05UOjp+UmVmQ291bnRlZEhGT05UKCkKLXsKLSAgICBpZiAobV9o
Zm9udCAhPSByZWludGVycHJldF9jYXN0PEhGT05UPigtMSkpIHsKLSAgICAgICAgRGVsZXRlT2Jq
ZWN0KG1faGZvbnQpOwotICAgIH0KLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6UmVmQ291bnRlZEhG
T05UKiBGb250UGxhdGZvcm1EYXRhOjpoYXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkKLXsKLSAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxSZWZDb3VudGVkSEZPTlQ+LCBkZWxldGVkVmFs
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAoUmVmQ291bnRlZEhGT05UOjpjcmVhdGUocmVp
bnRlcnByZXRfY2FzdDxIRk9OVD4oLTEpKSkpOwotICAgIHJldHVybiBkZWxldGVkVmFsdWUuZ2V0
KCk7Ci19Ci0KLVNDUklQVF9GT05UUFJPUEVSVElFUyogRm9udFBsYXRmb3JtRGF0YTo6c2NyaXB0
Rm9udFByb3BlcnRpZXMoKSBjb25zdAotewotICAgIGlmICghbV9zY3JpcHRGb250UHJvcGVydGll
cykgewotICAgICAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gbmV3IFNDUklQVF9GT05UUFJP
UEVSVElFUzsKLSAgICAgICAgbWVtc2V0KG1fc2NyaXB0Rm9udFByb3BlcnRpZXMsIDAsIHNpemVv
ZihTQ1JJUFRfRk9OVFBST1BFUlRJRVMpKTsKLSAgICAgICAgbV9zY3JpcHRGb250UHJvcGVydGll
cy0+Y0J5dGVzID0gc2l6ZW9mKFNDUklQVF9GT05UUFJPUEVSVElFUyk7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gU2NyaXB0R2V0Rm9udFByb3BlcnRpZXMoMCwgc2NyaXB0Q2FjaGUoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NjcmlwdEZv
bnRQcm9wZXJ0aWVzKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKLSAgICAg
ICAgICAgIEhXbmREQyBkYygwKTsKLSAgICAgICAgICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVj
dE9iamVjdChkYywgaGZvbnQoKSk7Ci0gICAgICAgICAgICBIUkVTVUxUIGhyID0gU2NyaXB0R2V0
Rm9udFByb3BlcnRpZXMoZGMsIHNjcmlwdENhY2hlKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zY3JpcHRGb250UHJvcGVydGllcyk7Ci0gICAg
ICAgICAgICBpZiAoU19PSyAhPSBocikgewotICAgICAgICAgICAgICAgIGlmIChGb250UGxhdGZv
cm1EYXRhOjplbnN1cmVGb250TG9hZGVkKGhmb250KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBIYW5kbGUgZ3JhY2VmdWxseSB0aGUgZXJyb3IgaWYgdGhpcyBjYWxsIGFsc28g
ZmFpbHMuCi0gICAgICAgICAgICAgICAgICAgIGhyID0gU2NyaXB0R2V0Rm9udFByb3BlcnRpZXMo
ZGMsIHNjcmlwdENhY2hlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zY3JpcHRGb250UHJvcGVydGllcyk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChTX09LICE9IGhyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVu
YWJsZSB0byBnZXQgdGhlIGZvbnQgcHJvcGVydGllcyBhZnRlciBzZWNvbmQgYXR0ZW1wdCIpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEZvbnQpOwotICAgICAgICB9Ci0gICAg
fQotICAgIHJldHVybiBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzOwotfQotCi0jaWYgRU5BQkxFKE9Q
RU5UWVBFX1ZFUlRJQ0FMKQotUGFzc1JlZlB0cjxPcGVuVHlwZVZlcnRpY2FsRGF0YT4gRm9udFBs
YXRmb3JtRGF0YTo6dmVydGljYWxEYXRhKCkgY29uc3QKLXsKLSAgICBTa0ZvbnRJRCBpZCA9IHR5
cGVmYWNlKCktPnVuaXF1ZUlEKCk7Ci0gICAgcmV0dXJuIGZvbnRDYWNoZSgpLT5nZXRWZXJ0aWNh
bERhdGEoaWQsICp0aGlzKTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IEZvbnRQbGF0
Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUodWludDMyX3QgdGFibGUpIGNvbnN0Ci17Ci0gICAgSFdu
ZERDIGhkYygwKTsKLSAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBoZm9u
dCgpKTsKLQotICAgIERXT1JEIHNpemUgPSBHZXRGb250RGF0YShoZGMsIHRhYmxlLCAwLCAwLCAw
KTsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXI7Ci0gICAgaWYgKHNpemUgIT0gR0RJ
X0VSUk9SKSB7Ci0gICAgICAgIGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHNpemUpOwot
ICAgICAgICBEV09SRCByZXN1bHQgPSBHZXRGb250RGF0YShoZGMsIHRhYmxlLCAwLCAoUFZPSUQp
YnVmZmVyLT5kYXRhKCksIHNpemUpOwotICAgICAgICBBU1NFUlQocmVzdWx0ID09IHNpemUpOwot
ICAgIH0KLQotICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwotICAgIHJldHVybiBidWZm
ZXIucmVsZWFzZSgpOwotfQotI2VuZGlmCi0KLSNpZm5kZWYgTkRFQlVHCi1TdHJpbmcgRm9udFBs
YXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsK
LX0KLSNlbmRpZgotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6OmVuc3VyZUZvbnRMb2FkZWQoSEZP
TlQgZm9udCkKLXsKLSAgICBXZWJLaXQ6OldlYlNhbmRib3hTdXBwb3J0KiBzYW5kYm94U3VwcG9y
dCA9IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+c2FuZGJveFN1cHBvcnQoKTsKLSAgICAv
LyBpZiB0aGVyZSBpcyBubyBzYW5kYm94LCB0aGVuIHdlIGNhbiBhc3N1bWUgdGhlIGZvbnQKLSAg
ICAvLyB3YXMgYWJsZSB0byBiZSBsb2FkZWQgc3VjY2Vzc2Z1bGx5IGFscmVhZHkKLSAgICByZXR1
cm4gc2FuZGJveFN1cHBvcnQgPyBzYW5kYm94U3VwcG9ydC0+ZW5zdXJlRm9udExvYWRlZChmb250
KSA6IHRydWU7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFDaHJvbWl1bVdpbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFD
aHJvbWl1bVdpbi5oCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBDb21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRm9udFBsYXRm
b3JtRGF0YUNocm9taXVtV2luX2gKLSNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2lu
X2gKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiRm9udE9yaWVudGF0aW9uLmgi
Ci0jaW5jbHVkZSAiT3BlblR5cGVWZXJ0aWNhbERhdGEuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKLSNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPiAKLQotI2luY2x1ZGUgPHVzcDEwLmg+
Ci0KLXR5cGVkZWYgc3RydWN0IEhGT05UX18gKkhGT05UOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLS8vIFJldHVybiBhIHR5cGVmYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaGZvbnQsIGFuZCBy
ZXR1cm4gaXRzIHNpemUgYW5kCi0vLyBsZlF1YWxpdHkgZnJvbSB0aGUgaGZvbnQncyBMT0dGT05U
LiBUaGUgY2FsbGVyIGlzIG5vdyBhbiBvd25lciBvZiB0aGUKLS8vIHR5cGVmYWNlLgotU2tUeXBl
ZmFjZSogQ3JlYXRlVHlwZWZhY2VGcm9tSEZvbnQoSEZPTlQsIGludCogc2l6ZSwgaW50KiBsZlF1
YWxpdHkpOwotCi1jbGFzcyBGb250RGVzY3JpcHRpb247Ci0KLWNsYXNzIEZvbnRQbGF0Zm9ybURh
dGEgewotcHVibGljOgotICAgIC8vIFVzZWQgZm9yIGRlbGV0ZWQgdmFsdWVzIGluIHRoZSBmb250
IGNhY2hlJ3MgaGFzaCB0YWJsZXMuIFRoZSBoYXNoIHRhYmxlCi0gICAgLy8gd2lsbCBjcmVhdGUg
dXMgd2l0aCB0aGlzIHN0cnVjdHVyZSwgYW5kIGl0IHdpbGwgY29tcGFyZSBvdGhlciB2YWx1ZXMK
LSAgICAvLyB0byB0aGlzICJEZWxldGVkIiBvbmUuIEl0IGV4cGVjdHMgdGhlIERlbGV0ZWQgb25l
IHRvIGJlIGRpZmZlcmVudGlhYmxlCi0gICAgLy8gZnJvbSB0aGUgTlVMTCBvbmUgKGNyZWF0ZWQg
d2l0aCB0aGUgZW1wdHkgY29uc3RydWN0b3IpLCBzbyB3ZSBjYW4ndCBqdXN0Ci0gICAgLy8gc2V0
IGV2ZXJ5dGhpbmcgdG8gTlVMTC4KLSAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YSgpOwotICAgIC8vIFRoaXMg
Y29uc3RydWN0b3IgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBIRk9OVAotICAgIEZvbnRQbGF0Zm9y
bURhdGEoSEZPTlQsIGZsb2F0IHNpemUsIEZvbnRPcmllbnRhdGlvbik7Ci0gICAgRm9udFBsYXRm
b3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7Ci0gICAgRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7Ci0KLSAgICBGb250UGxhdGZvcm1E
YXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotCi0gICAgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udCA9PSBoYXNoVGFibGVE
ZWxldGVkRm9udFZhbHVlKCk7IH0KLQotICAgIH5Gb250UGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBI
Rk9OVCBoZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udCA/IG1fZm9udC0+aGZvbnQoKSA6IDA7
IH0KLSAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgU2tUeXBl
ZmFjZSogdHlwZWZhY2UoKSBjb25zdCB7IHJldHVybiBtX3R5cGVmYWNlOyB9Ci0gICAgaW50IGxm
UXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGZRdWFsaXR5OyB9Ci0KLSAgICBGb250T3JpZW50
YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9Ci0gICAg
dm9pZCBzZXRPcmllbnRhdGlvbihGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmll
bnRhdGlvbiA9IG9yaWVudGF0aW9uOyB9Ci0KLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2ZvbnQgPyBtX2ZvbnQtPmhhc2goKSA6IE5VTEw7Ci0gICAg
fQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBj
b25zdAotICAgIHsgCi0gICAgICAgIHJldHVybiBtX2ZvbnQgPT0gb3RoZXIubV9mb250ICYmIG1f
c2l6ZSA9PSBvdGhlci5tX3NpemUgJiYgbV9vcmllbnRhdGlvbiA9PSBvdGhlci5tX29yaWVudGF0
aW9uOwotICAgIH0KLQotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBQYXNzUmVm
UHRyPE9wZW5UeXBlVmVydGljYWxEYXRhPiB2ZXJ0aWNhbERhdGEoKSBjb25zdDsKLSAgICBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gb3BlblR5cGVUYWJsZSh1aW50MzJfdCB0YWJsZSkgY29uc3Q7
Ci0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25z
dDsKLSNlbmRpZgotCi0gICAgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBzY3JpcHRGb250UHJvcGVy
dGllcygpIGNvbnN0OwotICAgIFNDUklQVF9DQUNIRSogc2NyaXB0Q2FjaGUoKSBjb25zdCB7IHJl
dHVybiAmbV9zY3JpcHRDYWNoZTsgfQotCi0gICAgc3RhdGljIGJvb2wgZW5zdXJlRm9udExvYWRl
ZChIRk9OVCk7Ci0KLXByaXZhdGU6Ci0gICAgLy8gV2UgcmVmY291bnQgdGhlIGludGVybmFsIEhG
T05UIHNvIHRoYXQgRm9udFBsYXRmb3JtRGF0YSBjYW4gYmUKLSAgICAvLyBlZmZpY2llbnRseSBj
b3BpZWQuIFdlYktpdCBkZXBlbmRzIG9uIGJlaW5nIGFibGUgdG8gY29weSBpdCwgYW5kIHdlCi0g
ICAgLy8gZG9uJ3QgcmVhbGx5IHdhbnQgdG8gcmUtY3JlYXRlIHRoZSBIRk9OVC4KLSAgICBjbGFz
cyBSZWZDb3VudGVkSEZPTlQgOiBwdWJsaWMgUmVmQ291bnRlZDxSZWZDb3VudGVkSEZPTlQ+IHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlZkNvdW50ZWRIRk9OVD4g
Y3JlYXRlKEhGT05UIGhmb250KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFJlZkNvdW50ZWRIRk9OVChoZm9udCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgflJl
ZkNvdW50ZWRIRk9OVCgpOwotCi0gICAgICAgIEhGT05UIGhmb250KCkgY29uc3QgeyByZXR1cm4g
bV9oZm9udDsgfQotICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoSEZPTlQpPigm
bV9oZm9udCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVm
Q291bnRlZEhGT05UJiBvdGhlcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG1faGZvbnQgPT0gb3RoZXIubV9oZm9udDsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgLy8gVGhlIGNyZWF0ZSgpIGZ1bmN0aW9uIGFzc3VtZXMgdGhlcmUgaXMgYWxyZWFkeSBh
IHJlZmNvdW50IG9mIG9uZSAKLSAgICAgICAgLy8gc28gaXQgY2FuIGRvIGFkb3B0UmVmLgotICAg
ICAgICBSZWZDb3VudGVkSEZPTlQoSEZPTlQgaGZvbnQpIDogbV9oZm9udChoZm9udCkKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgSEZPTlQgbV9oZm9udDsKLSAgICB9OwotCi0gICAg
c3RhdGljIFJlZkNvdW50ZWRIRk9OVCogaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpOwotCi0g
ICAgUmVmUHRyPFJlZkNvdW50ZWRIRk9OVD4gbV9mb250OwotICAgIGZsb2F0IG1fc2l6ZTsgIC8v
IFBvaW50IHNpemUgb2YgdGhlIGZvbnQgaW4gcGl4ZWxzLgotICAgIEZvbnRPcmllbnRhdGlvbiBt
X29yaWVudGF0aW9uOwotCi0gICAgU2tUeXBlZmFjZSogbV90eXBlZmFjZTsgLy8gY2FjaGVkIGZy
b20gbV9mb250Ci0gICAgaW50IG1fbGZRdWFsaXR5OyAvLyBjYWNoZWQgZnJvbSBtX2ZvbnQKLQot
ICAgIG11dGFibGUgU0NSSVBUX0NBQ0hFIG1fc2NyaXB0Q2FjaGU7Ci0gICAgbXV0YWJsZSBTQ1JJ
UFRfRk9OVFBST1BFUlRJRVMqIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7Ci19OwotCi19IC8vIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEZvbnRQbGF0Zm9ybURhdGFDaHJvbWl1bVdpbl9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UmVuZGVyU3R5bGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250UmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFJlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNzcgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgRm9udFJlbmRlclN0eWxlX2gKLSNkZWZpbmUgRm9udFJl
bmRlclN0eWxlX2gKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGb250UmVuZGVyU3R5bGUg
ZGVzY3JpYmVzIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZXMgZm9yIHJlbmRlcmluZyBhIGZvbnQgYXQg
YQotLy8gZ2l2ZW4gc2l6ZS4KLXN0cnVjdCBGb250UmVuZGVyU3R5bGUgewotICAgIGVudW0gewot
ICAgICAgICBOb1ByZWZlcmVuY2UgPSAyLAotICAgIH07Ci0KLSAgICBGb250UmVuZGVyU3R5bGUo
KQotICAgICAgICA6IHVzZUJpdG1hcHMoMCkKLSAgICAgICAgLCB1c2VBdXRvSGludCgwKQotICAg
ICAgICAsIHVzZUhpbnRpbmcoMCkKLSAgICAgICAgLCBoaW50U3R5bGUoMCkKLSAgICAgICAgLCB1
c2VBbnRpQWxpYXMoMCkKLSAgICAgICAgLCB1c2VTdWJwaXhlbFJlbmRlcmluZygwKQotICAgICAg
ICAsIHVzZVN1YnBpeGVsUG9zaXRpb25pbmcoMCkgeyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgRm9udFJlbmRlclN0eWxlJiBhKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHVz
ZUJpdG1hcHMgPT0gYS51c2VCaXRtYXBzCi0gICAgICAgICAgICAmJiB1c2VBdXRvSGludCA9PSBh
LnVzZUF1dG9IaW50Ci0gICAgICAgICAgICAmJiB1c2VIaW50aW5nID09IGEudXNlSGludGluZwot
ICAgICAgICAgICAgJiYgaGludFN0eWxlID09IGEuaGludFN0eWxlCi0gICAgICAgICAgICAmJiB1
c2VBbnRpQWxpYXMgPT0gYS51c2VBbnRpQWxpYXMKLSAgICAgICAgICAgICYmIHVzZVN1YnBpeGVs
UmVuZGVyaW5nID09IGEudXNlU3VicGl4ZWxSZW5kZXJpbmcKLSAgICAgICAgICAgICYmIHVzZVN1
YnBpeGVsUG9zaXRpb25pbmcgPT0gYS51c2VTdWJwaXhlbFBvc2l0aW9uaW5nOwotICAgIH0KLQot
ICAgIC8vIEVhY2ggb2YgdGhlIHVzZSogbWVtYmVycyBiZWxvdyBjYW4gdGFrZSBvbmUgb2YgdGhy
ZWUgdmFsdWVzOgotICAgIC8vICAgMDogb2ZmCi0gICAgLy8gICAxOiBvbgotICAgIC8vICAgTm9Q
cmVmZXJlbmNlOiBubyBwcmVmZXJlbmNlIGV4cHJlc3NlZAotICAgIGNoYXIgdXNlQml0bWFwczsg
Ly8gdXNlIGVtYmVkZGVkIGJpdG1hcCBzdHJpa2UgaWYgcG9zc2libGUKLSAgICBjaGFyIHVzZUF1
dG9IaW50OyAvLyB1c2UgJ2F1dG8nIGhpbnRpbmcgKEZyZWVUeXBlIHNwZWNpZmljKQotICAgIGNo
YXIgdXNlSGludGluZzsgLy8gaGludCBnbHlwaHMgdG8gdGhlIHBpeGVsIGdyaWQKLSAgICBjaGFy
IGhpbnRTdHlsZTsgLy8gbGV2ZWwgb2YgaGludGluZywgMC4uMwotICAgIGNoYXIgdXNlQW50aUFs
aWFzOyAvLyBhbnRpYWxpYXMgZ2x5cGggc2hhcGVzCi0gICAgY2hhciB1c2VTdWJwaXhlbFJlbmRl
cmluZzsgLy8gdXNlIHN1YnBpeGVsIHJlbmRlcmluZyAocGFydGlhbGx5LWZpbGxlZCBwaXhlbHMp
Ci0gICAgY2hhciB1c2VTdWJwaXhlbFBvc2l0aW9uaW5nOyAvLyB1c2Ugc3VicGl4ZWwgcG9zaXRp
b25pbmcgKGZyYWN0aW9uYWwgWCBwb3NpdGlvbnMgZm9yIGdseXBocykKLX07Ci0KLX0KLQotI2Vu
ZGlmIC8vIEZvbnRSZW5kZXJTdHlsZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hyb21p
dW1XaW4uY3BwCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDksIDIwMTAsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udFV0aWxzQ2hyb21pdW1XaW4uaCIKLQotI2luY2x1
ZGUgPGxpbWl0cz4KLQotI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIlVuaXNjcmliZUhl
bHBlci5oIgotI2luY2x1ZGUgPHVuaWNvZGUvbG9jaWQuaD4KLSNpbmNsdWRlIDx1bmljb2RlL3Vj
aGFyLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotbmFtZXNwYWNlIHsKLQotYm9vbCBpc0ZvbnRQcmVzZW50KGNvbnN0IFVDaGFy
KiBmb250TmFtZSkKLXsKLSAgICBIRk9OVCBoZm9udCA9IENyZWF0ZUZvbnQoMTIsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvbnROYW1lKTsKLSAgICBpZiAoIWhmb250KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
SFduZERDIGRjKDApOwotICAgIEhHRElPQkogb2xkRm9udCA9IHN0YXRpY19jYXN0PEhGT05UPihT
ZWxlY3RPYmplY3QoZGMsIGhmb250KSk7Ci0gICAgV0NIQVIgYWN0dWFsRm9udE5hbWVbTEZfRkFD
RVNJWkVdOwotICAgIEdldFRleHRGYWNlKGRjLCBMRl9GQUNFU0laRSwgYWN0dWFsRm9udE5hbWUp
OwotICAgIGFjdHVhbEZvbnROYW1lW0xGX0ZBQ0VTSVpFIC0gMV0gPSAwOwotICAgIFNlbGVjdE9i
amVjdChkYywgb2xkRm9udCk7Ci0gICAgRGVsZXRlT2JqZWN0KGhmb250KTsKLSAgICAvLyBXZSBk
b24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IEVhc3QgQXNpYW4gZm9udHMgd2l0aCBsb2NhbGUtZGVw
ZW5kZW50Ci0gICAgLy8gbmFtZXMgaGVyZSBmb3Igbm93LgotICAgIHJldHVybiAhd2NzY21wKGZv
bnROYW1lLCBhY3R1YWxGb250TmFtZSk7Ci19Ci0KLS8vIEEgc2ltcGxlIG1hcHBpbmcgZnJvbSBV
U2NyaXB0Q29kZSB0byBmYW1pbHkgbmFtZS4gIFRoaXMgaXMgYSBzcGFyc2UgYXJyYXksCi0vLyB3
aGljaCB3b3JrcyB3ZWxsIHNpbmNlIHRoZSByYW5nZSBvZiBVU2NyaXB0Q29kZSB2YWx1ZXMgaXMg
c21hbGwuCi10eXBlZGVmIGNvbnN0IFVDaGFyKiBTY3JpcHRUb0ZvbnRNYXBbVVNDUklQVF9DT0RF
X0xJTUlUXTsKLQotdm9pZCBpbml0aWFsaXplU2NyaXB0Rm9udE1hcChTY3JpcHRUb0ZvbnRNYXAm
IHNjcmlwdEZvbnRNYXApCi17Ci0gICAgc3RydWN0IEZvbnRNYXAgewotICAgICAgICBVU2NyaXB0
Q29kZSBzY3JpcHQ7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBmYW1pbHk7Ci0gICAgfTsKLQotICAg
IHN0YXRpYyBjb25zdCBGb250TWFwIGZvbnRNYXBbXSA9IHsKLSAgICAgICAge1VTQ1JJUFRfTEFU
SU4sIEwidGltZXMgbmV3IHJvbWFuIn0sCi0gICAgICAgIHtVU0NSSVBUX0dSRUVLLCBMInRpbWVz
IG5ldyByb21hbiJ9LAotICAgICAgICB7VVNDUklQVF9DWVJJTExJQywgTCJ0aW1lcyBuZXcgcm9t
YW4ifSwKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIHRyeWluZyBuZXcgVmlzdGEgZm9udHMg
YmVmb3JlIFhQIGZvbnRzIGZvciBDSksuCi0gICAgICAgIC8vIFNvbWUgVmlzdGEgdXNlcnMgZG8g
d2FudCB0byB1c2UgVmlzdGEgY2xlYXJ0eXBlIENKSyBmb250cy4gSWYgd2UKLSAgICAgICAgLy8g
ZGlkLCB0aGUgcmVzdWx0cyBvZiB0ZXN0cyB3aXRoIENKSyBjaGFyYWN0ZXJzIHdvdWxkIGhhdmUg
dG8gYmUKLSAgICAgICAgLy8gcmVnZW5lcmF0ZWQgZm9yIFZpc3RhLgotICAgICAgICB7VVNDUklQ
VF9TSU1QTElGSUVEX0hBTiwgTCJzaW1zdW4ifSwKLSAgICAgICAge1VTQ1JJUFRfVFJBRElUSU9O
QUxfSEFOLCBMInBtaW5nbGl1In0sCi0gICAgICAgIHtVU0NSSVBUX0hJUkFHQU5BLCBMIm1zIHBn
b3RoaWMifSwKLSAgICAgICAge1VTQ1JJUFRfS0FUQUtBTkEsIEwibXMgcGdvdGhpYyJ9LAotICAg
ICAgICB7VVNDUklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSwgTCJtcyBwZ290aGljIn0sCi0gICAg
ICAgIHtVU0NSSVBUX0hBTkdVTCwgTCJndWxpbSJ9LAotICAgICAgICB7VVNDUklQVF9USEFJLCBM
InRhaG9tYSJ9LAotICAgICAgICB7VVNDUklQVF9IRUJSRVcsIEwiZGF2aWQifSwKLSAgICAgICAg
e1VTQ1JJUFRfQVJBQklDLCBMInRhaG9tYSJ9LAotICAgICAgICB7VVNDUklQVF9ERVZBTkFHQVJJ
LCBMIm1hbmdhbCJ9LAotICAgICAgICB7VVNDUklQVF9CRU5HQUxJLCBMInZyaW5kYSJ9LAotICAg
ICAgICB7VVNDUklQVF9HVVJNVUtISSwgTCJyYWF2aSJ9LAotICAgICAgICB7VVNDUklQVF9HVUpB
UkFUSSwgTCJzaHJ1dGkifSwKLSAgICAgICAge1VTQ1JJUFRfVEFNSUwsIEwibGF0aGEifSwKLSAg
ICAgICAge1VTQ1JJUFRfVEVMVUdVLCBMImdhdXRhbWkifSwKLSAgICAgICAge1VTQ1JJUFRfS0FO
TkFEQSwgTCJ0dW5nYSJ9LAotICAgICAgICB7VVNDUklQVF9HRU9SR0lBTiwgTCJzeWxmYWVuIn0s
Ci0gICAgICAgIHtVU0NSSVBUX0FSTUVOSUFOLCBMInN5bGZhZW4ifSwKLSAgICAgICAge1VTQ1JJ
UFRfVEhBQU5BLCBMIm12IGJvbGkifSwKLSAgICAgICAge1VTQ1JJUFRfQ0FOQURJQU5fQUJPUklH
SU5BTCwgTCJldXBoZW1pYSJ9LAotICAgICAgICB7VVNDUklQVF9DSEVST0tFRSwgTCJwbGFudGFn
ZW5ldCBjaGVyb2tlZSJ9LAotICAgICAgICB7VVNDUklQVF9NT05HT0xJQU4sIEwibW9uZ29saWFu
IGJhbHRpIn0sCi0gICAgICAgIC8vIEZvciBVU0NSSVBUX0NPTU1PTiwgd2UgbWFwIGJsb2NrcyB0
byBzY3JpcHRzIHdoZW4KLSAgICAgICAgLy8gdGhhdCBtYWtlcyBzZW5zZS4KLSAgICB9OwotCi0g
ICAgc3RydWN0IFNjcmlwdFRvRm9udEZhbWlsaWVzIHsKLSAgICAgICAgVVNjcmlwdENvZGUgc2Ny
aXB0OwotICAgICAgICBjb25zdCBVQ2hhcioqIGZhbWlsaWVzOwotICAgIH07Ci0KLSAgICAvLyBL
YXJ0aWthIG9uIFZpc3RhIG9yIGVhcmxpZXIgbGFja3MgdGhlIHN1cHBvcnQgZm9yIENoaWxsdSAK
LSAgICAvLyBsZXR0ZXJzIGFkZGVkIHRvIFVuaWNvZGUgNS4xLgotICAgIC8vIFRyeSBBbmphbGlP
bGRMaXBpIChhIHZlcnkgd2lkZWx5IHVzZWQgTWFsYXlsYWxhbSBmb250IHdpdGggdGhlIGZ1bGwK
LSAgICAvLyBVbmljb2RlIDUueCBzdXBwb3J0KSBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIEthcnRp
a2EuCi0gICAgc3RhdGljIGNvbnN0IFVDaGFyKiBtYWxheWFsYW1Gb250c1tdID0ge0wiQW5qYWxp
T2xkTGlwaSIsIEwiTG9oaXQgTWFsYXlhbGFtIiwgTCJLYXJ0aWthIiwgTCJSYWNoYW5hIiwgMH07
Ci0gICAgLy8gVHJ5IEtobWVyIE9TIGJlZm9yZSBWaXN0YSBmb250cyBiZWNhdXNlICdLaG1lciBP
UycgZ29lcyBhbG9uZyBiZXR0ZXIKLSAgICAvLyB3aXRoIExhdGluIGFuZCBsb29rcyBiZXR0ZXIv
bGFyZ2VyIGZvciB0aGUgc2FtZSBzaXplLgotICAgIHN0YXRpYyBjb25zdCBVQ2hhcioga2htZXJG
b250c1tdID0ge0wiS2htZXIgT1MiLCBMIk1vb2xCb3JhbiIsIEwiRGF1blBlbmgiLCBMIkNvZGUy
MDAwIiwgMH07Ci0gICAgLy8gRm9yIHRoZSBmb2xsb3dpbmcgNiBzY3JpcHRzLCB0d28gb3IgZm9u
dHMgYXJlIGxpc3RlZC4gVGhlIGZvbnRzIGluIAotICAgIC8vIHRoZSAxc3Qgc2xvdCBhcmUgbm90
IGF2YWlsYWJsZSBvbiBXaW5kb3dzIFhQLiBUbyBzdXBwb3J0IHRoZXNlCi0gICAgLy8gc2NyaXB0
cyBvbiBYUCwgbGlzdGVkIGluIHRoZSByZXN0IG9mIHNsb3RzIGFyZSB3aWRlbHkgdXNlZAotICAg
IC8vIGZvbnRzLgotICAgIHN0YXRpYyBjb25zdCBVQ2hhciogZXRoaW9waWNGb250c1tdID0ge0wi
TnlhbGEiLCBMIkFieXNzaW5pY2EgU0lMIiwgTCJFdGhpb3BpYSBKaXJldCIsIEwiVmlzdWFsIEdl
ZXogVW5pY29kZSIsIEwiR0YgWmVtZW4gVW5pY29kZSIsIDB9OwotICAgIHN0YXRpYyBjb25zdCBV
Q2hhciogb3JpeWFGb250c1tdID0ge0wiS2FsaW5nYSIsIEwib3JpMVVuaSIsIEwiTG9oaXQgT3Jp
eWEiLCAwfTsKLSAgICBzdGF0aWMgY29uc3QgVUNoYXIqIGxhb0ZvbnRzW10gPSB7TCJEb2tDaGFt
cGEiLCBMIlNheXNldHRoYSBPVCIsIEwiUGhldHNhcmF0aCBPVCIsIEwiQ29kZTIwMDAiLCAwfTsK
LSAgICBzdGF0aWMgY29uc3QgVUNoYXIqIHRpYmV0YW5Gb250c1tdID0ge0wiTWljcm9zb2Z0IEhp
bWFsYXlhIiwgTCJKb21vbGhhcmkiLCBMIlRpYmV0YW4gTWFjaGluZSBVbmkiLCAwfTsKLSAgICBz
dGF0aWMgY29uc3QgVUNoYXIqIHNpbmhhbGFGb250c1tdID0ge0wiSXNrb29sYSBQb3RhIiwgTCJB
a3NoYXJVbmljb2RlIiwgMH07Ci0gICAgc3RhdGljIGNvbnN0IFVDaGFyKiB5aUZvbnRzW10gPSB7
TCJNaWNyb3NvZnQgWWkgQmFsdGkiLCBMIk51b3N1IFNJTCIsIEwiQ29kZTIwMDAiLCAwfTsKLSAg
ICAvLyBodHRwOi8vd3d3LmJldGhtYXJkdXRoby5vcmcvc3VwcG9ydC9tZWx0aG8vZG93bmxvYWQv
aW5kZXgucGhwCi0gICAgc3RhdGljIGNvbnN0IFVDaGFyKiBzeXJpYWNGb250c1tdID0ge0wiRXN0
cmFuZ2VsbyBFZGVzc2EiLCBMIkVzdHJhbmdlbG8gTmlzaWJpbiIsIEwiQ29kZTIwMDAiLCAwfTsK
LSAgICAvLyBObyBNeWFubWFyL0J1cm1lc2UgZm9udCBpcyBzaGlwcGVkIHdpdGggV2luZG93cywg
eWV0LiBUcnkgYSBmZXcKLSAgICAvLyB3aWRlbHkgYXZhaWxhYmxlL3VzZWQgb25lcyB0aGF0IHN1
cHBvcnRzIFVuaWNvZGUgNS4xIG9yIGxhdGVyLiAKLSAgICBzdGF0aWMgY29uc3QgVUNoYXIqIG15
YW5tYXJGb250c1tdID0ge0wiUGFkYXVrIiwgTCJQYXJhYmFpayIsIEwiTXlhbm1hcjMiLCBMIkNv
ZGUyMDAwIiwgMH07Ci0KLSAgICBzdGF0aWMgY29uc3QgU2NyaXB0VG9Gb250RmFtaWxpZXMgc2Ny
aXB0VG9Gb250RmFtaWxpZXNbXSA9IHsKLSAgICAgICAge1VTQ1JJUFRfTUFMQVlBTEFNLCBtYWxh
eWFsYW1Gb250c30sCi0gICAgICAgIHtVU0NSSVBUX0tITUVSLCBraG1lckZvbnRzfSwKLSAgICAg
ICAge1VTQ1JJUFRfRVRISU9QSUMsIGV0aGlvcGljRm9udHN9LAotICAgICAgICB7VVNDUklQVF9P
UklZQSwgb3JpeWFGb250c30sCi0gICAgICAgIHtVU0NSSVBUX0xBTywgbGFvRm9udHN9LAotICAg
ICAgICB7VVNDUklQVF9USUJFVEFOLCB0aWJldGFuRm9udHN9LAotICAgICAgICB7VVNDUklQVF9T
SU5IQUxBLCBzaW5oYWxhRm9udHN9LAotICAgICAgICB7VVNDUklQVF9ZSSwgeWlGb250c30sCi0g
ICAgICAgIHtVU0NSSVBUX1NZUklBQywgc3lyaWFjRm9udHN9LAotICAgICAgICB7VVNDUklQVF9N
WUFOTUFSLCBteWFubWFyRm9udHN9LAotICAgIH07Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IFdURl9BUlJBWV9MRU5HVEgoZm9udE1hcCk7ICsraSkKLSAgICAgICAgc2NyaXB0Rm9udE1h
cFtmb250TWFwW2ldLnNjcmlwdF0gPSBmb250TWFwW2ldLmZhbWlseTsKLQotICAgIC8vIEZJWE1F
OiBJbnN0ZWFkIG9mIHNjYW5uaW5nIHRoZSBoYXJkLWNvZGVkIGxpc3QsIHdlIGhhdmUgdG8gCi0g
ICAgLy8gdXNlIEVudW1Gb250KiB0byAnaW5zcGVjdCcgZm9udHMgdG8gcGljayB1cCBmb250cyBj
b3ZlcmluZyBzY3JpcHRzCi0gICAgLy8gd2hlbiBpdCdzIHBvc3NpYmxlIChlLmcuIHVzaW5nIE9T
LzIgdGFibGUpLiBJZiB3ZSBkbyB0aGF0LCB0aGlzIAotICAgIC8vIGhhZCBiZXR0ZXIgYmUgcHVs
bGVkIG91dCBvZiBoZXJlLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xF
TkdUSChzY3JpcHRUb0ZvbnRGYW1pbGllcyk7ICsraSkgewotICAgICAgICBVU2NyaXB0Q29kZSBz
Y3JpcHQgPSBzY3JpcHRUb0ZvbnRGYW1pbGllc1tpXS5zY3JpcHQ7Ci0gICAgICAgIHNjcmlwdEZv
bnRNYXBbc2NyaXB0XSA9IDA7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiogZmFtaWx5UHRyID0gc2Ny
aXB0VG9Gb250RmFtaWxpZXNbaV0uZmFtaWxpZXM7Ci0gICAgICAgIHdoaWxlICgqZmFtaWx5UHRy
KSB7Ci0gICAgICAgICAgICBpZiAoaXNGb250UHJlc2VudCgqZmFtaWx5UHRyKSkgewotICAgICAg
ICAgICAgICAgIHNjcmlwdEZvbnRNYXBbc2NyaXB0XSA9ICpmYW1pbHlQdHI7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICArK2ZhbWlseVB0cjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIEluaXRpYWxpemUgdGhlIGxvY2FsZS1kZXBlbmRlbnQg
bWFwcGluZy4KLSAgICAvLyBTaW5jZSBDaHJvbWUgc3luY2hyb25pemVzIHRoZSBJQ1UgZGVmYXVs
dCBsb2NhbGUgd2l0aCBpdHMgVUkgbG9jYWxlLAotICAgIC8vIHRoaXMgSUNVIGxvY2FsZSB0ZWxs
cyB0aGUgY3VycmVudCBVSSBsb2NhbGUgb2YgQ2hyb21lLgotICAgIGljdTo6TG9jYWxlIGxvY2Fs
ZSA9IGljdTo6TG9jYWxlOjpnZXREZWZhdWx0KCk7Ci0gICAgY29uc3QgVUNoYXIqIGxvY2FsZUZh
bWlseSA9IDA7Ci0gICAgaWYgKGxvY2FsZSA9PSBpY3U6OkxvY2FsZTo6Z2V0SmFwYW5lc2UoKSkK
LSAgICAgICAgbG9jYWxlRmFtaWx5ID0gc2NyaXB0Rm9udE1hcFtVU0NSSVBUX0hJUkFHQU5BXTsK
LSAgICBlbHNlIGlmIChsb2NhbGUgPT0gaWN1OjpMb2NhbGU6OmdldEtvcmVhbigpKQotICAgICAg
ICBsb2NhbGVGYW1pbHkgPSBzY3JpcHRGb250TWFwW1VTQ1JJUFRfSEFOR1VMXTsKLSAgICBlbHNl
IGlmIChsb2NhbGUgPT0gaWN1OjpMb2NhbGU6OmdldFRyYWRpdGlvbmFsQ2hpbmVzZSgpKQotICAg
ICAgICBsb2NhbGVGYW1pbHkgPSBzY3JpcHRGb250TWFwW1VTQ1JJUFRfVFJBRElUSU9OQUxfSEFO
XTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gRm9yIG90aGVyIGxvY2FsZXMsIHVzZSB0aGUgc2lt
cGxpZmllZCBDaGluZXNlIGZvbnQgZm9yIEhhbi4KLSAgICAgICAgbG9jYWxlRmFtaWx5ID0gc2Ny
aXB0Rm9udE1hcFtVU0NSSVBUX1NJTVBMSUZJRURfSEFOXTsKLSAgICB9Ci0gICAgaWYgKGxvY2Fs
ZUZhbWlseSkKLSAgICAgICAgc2NyaXB0Rm9udE1hcFtVU0NSSVBUX0hBTl0gPSBsb2NhbGVGYW1p
bHk7Ci19Ci0KLS8vIFRoZXJlIGFyZSBhIGxvdCBvZiBjaGFyYWN0ZXJzIGluIFVTQ1JJUFRfQ09N
TU9OIHRoYXQgY2FuIGJlIGNvdmVyZWQKLS8vIGJ5IGZvbnRzIGZvciBzY3JpcHRzIGNsb3NlbHkg
cmVsYXRlZCB0byB0aGVtLiBTZWUKLS8vIGh0dHA6Ly91bmljb2RlLm9yZy9jbGRyL3V0aWxpdHkv
bGlzdC11bmljb2Rlc2V0LmpzcD9hPVs6U2NyaXB0PUNvbW1vbjpdCi0vLyBGSVhNRTogbWFrZSB0
aGlzIG1vcmUgZWZmaWNpZW50IHdpdGggYSB3aWRlciBjb3ZlcmFnZQotVVNjcmlwdENvZGUgZ2V0
U2NyaXB0QmFzZWRPblVuaWNvZGVCbG9jayhpbnQgdWNzNCkKLXsKLSAgICBVQmxvY2tDb2RlIGJs
b2NrID0gdWJsb2NrX2dldENvZGUodWNzNCk7Ci0gICAgc3dpdGNoIChibG9jaykgewotICAgIGNh
c2UgVUJMT0NLX0NKS19TWU1CT0xTX0FORF9QVU5DVFVBVElPTjoKLSAgICAgICAgcmV0dXJuIFVT
Q1JJUFRfSEFOOwotICAgIGNhc2UgVUJMT0NLX0hJUkFHQU5BOgotICAgIGNhc2UgVUJMT0NLX0tB
VEFLQU5BOgotICAgICAgICByZXR1cm4gVVNDUklQVF9ISVJBR0FOQTsKLSAgICBjYXNlIFVCTE9D
S19BUkFCSUM6Ci0gICAgICAgIHJldHVybiBVU0NSSVBUX0FSQUJJQzsKLSAgICBjYXNlIFVCTE9D
S19USEFJOgotICAgICAgICByZXR1cm4gVVNDUklQVF9USEFJOwotICAgIGNhc2UgVUJMT0NLX0dS
RUVLOgotICAgICAgICByZXR1cm4gVVNDUklQVF9HUkVFSzsKLSAgICBjYXNlIFVCTE9DS19ERVZB
TkFHQVJJOgotICAgICAgICAvLyBGb3IgRGFuZGEgYW5kIERvdWJsZSBEYW5kYSAoVSswOTY0LCBV
KzA5NjUpLCB1c2UgYSBEZXZhbmFnYXJpCi0gICAgICAgIC8vIGZvbnQgZm9yIG5vdyBhbHRob3Vn
aCB0aGV5J3JlIHVzZWQgYnkgb3RoZXIgc2NyaXB0cyBhcyB3ZWxsLgotICAgICAgICAvLyBXaXRo
b3V0IGEgY29udGV4dCwgd2UgY2FuJ3QgZG8gYW55IGJldHRlci4KLSAgICAgICAgcmV0dXJuIFVT
Q1JJUFRfREVWQU5BR0FSSTsKLSAgICBjYXNlIFVCTE9DS19BUk1FTklBTjoKLSAgICAgICAgcmV0
dXJuIFVTQ1JJUFRfQVJNRU5JQU47Ci0gICAgY2FzZSBVQkxPQ0tfR0VPUkdJQU46Ci0gICAgICAg
IHJldHVybiBVU0NSSVBUX0dFT1JHSUFOOwotICAgIGNhc2UgVUJMT0NLX0tBTk5BREE6Ci0gICAg
ICAgIHJldHVybiBVU0NSSVBUX0tBTk5BREE7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IFVTQ1JJUFRfQ09NTU9OOwotICAgIH0KLX0KLQotVVNjcmlwdENvZGUgZ2V0U2NyaXB0KGludCB1
Y3M0KQotewotICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOwotICAgIFVTY3JpcHRD
b2RlIHNjcmlwdCA9IHVzY3JpcHRfZ2V0U2NyaXB0KHVjczQsICZlcnIpOwotICAgIC8vIElmIHNj
cmlwdCBpcyBpbnZhbGlkLCBjb21tb24gb3IgaW5oZXJpdGVkIG9yIHRoZXJlJ3MgYW4gZXJyb3Is
Ci0gICAgLy8gaW5mZXIgYSBzY3JpcHQgYmFzZWQgb24gdGhlIHVuaWNvZGUgYmxvY2sgb2YgYSBj
aGFyYWN0ZXIuCi0gICAgaWYgKHNjcmlwdCA8PSBVU0NSSVBUX0lOSEVSSVRFRCB8fCBVX0ZBSUxV
UkUoZXJyKSkKLSAgICAgICAgc2NyaXB0ID0gZ2V0U2NyaXB0QmFzZWRPblVuaWNvZGVCbG9jayh1
Y3M0KTsKLSAgICByZXR1cm4gc2NyaXB0OwotfQotCi1jb25zdCBpbnQga1VuZGVmaW5lZEFzY2Vu
dCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7Ci0KLS8vIEdpdmVuIGFuIEhGT05U
LCByZXR1cm4gdGhlIGFzY2VudC4gSWYgR2V0VGV4dE1ldHJpY3MgZmFpbHMsCi0vLyBrVW5kZWZp
bmVkQXNjZW50IGlzIHJldHVybmVkLCBpbnN0ZWFkLgotaW50IGdldEFzY2VudChIRk9OVCBoZm9u
dCkKLXsKLSAgICBIV25kREMgZGMoMCk7Ci0gICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2Jq
ZWN0KGRjLCBoZm9udCk7Ci0gICAgVEVYVE1FVFJJQyB0bTsKLSAgICBCT09MIGdvdE1ldHJpY3Mg
PSBHZXRUZXh0TWV0cmljcyhkYywgJnRtKTsKLSAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEZvbnQp
OwotICAgIHJldHVybiBnb3RNZXRyaWNzID8gdG0udG1Bc2NlbnQgOiBrVW5kZWZpbmVkQXNjZW50
OwotfQotCi1XT1JEIGdldFNwYWNlR2x5cGgoSEZPTlQgaGZvbnQpIAotewotICAgIEhXbmREQyBk
YygwKTsKLSAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoZGMsIGhmb250KTsKLSAg
ICBXQ0hBUiBzcGFjZSA9IEwnICc7Ci0gICAgV09SRCBzcGFjZUdseXBoID0gMDsKLSAgICBHZXRH
bHlwaEluZGljZXMoZGMsICZzcGFjZSwgMSwgJnNwYWNlR2x5cGgsIDApOwotICAgIFNlbGVjdE9i
amVjdChkYywgb2xkRm9udCk7Ci0gICAgcmV0dXJuIHNwYWNlR2x5cGg7Ci19Ci0KLXN0cnVjdCBG
b250RGF0YSB7Ci0gICAgRm9udERhdGEoKQotICAgICAgICA6IGhmb250KDApCi0gICAgICAgICwg
YXNjZW50KGtVbmRlZmluZWRBc2NlbnQpCi0gICAgICAgICwgc2NyaXB0Q2FjaGUoMCkKLSAgICAg
ICAgLCBzcGFjZUdseXBoKDApCi0gICAgewotICAgIH0KLQotICAgIEhGT05UIGhmb250OwotICAg
IGludCBhc2NlbnQ7Ci0gICAgbXV0YWJsZSBTQ1JJUFRfQ0FDSEUgc2NyaXB0Q2FjaGU7Ci0gICAg
V09SRCBzcGFjZUdseXBoOwotfTsKLQotLy8gQWdhaW4sIHVzaW5nIGhhc2hfbWFwIGRvZXMgbm90
IGVhcm4gdXMgbXVjaCBoZXJlLiAgcGFnZV9jeWNsZXJfdGVzdCBpbnRsMgotLy8gZ2F2ZSB1cyBh
ICdiZXR0ZXInIHJlc3VsdCB3aXRoIG1hcCB0aGFuIHdpdGggaGFzaF9tYXAgZXZlbiB0aG91Z2gg
dGhleSdyZQotLy8gd2VsbC13aXRoaW4gMS1zaWdtYSBvZiBlYWNoIG90aGVyIHNvIHRoYXQgdGhl
IGRpZmZlcmVuY2UgaXMgbm90IHNpZ25pZmljYW50LgotLy8gT24gdGhlIG90aGVyIGhhbmQsIHNv
bWUgcGFnZXMgaW4gaW50bDIgc2VlbSB0byB0YWtlIGxvbmdlciB0byBsb2FkIHdpdGggbWFwCi0v
LyBpbiB0aGUgMXN0IHBhc3MuIE5lZWQgdG8gZXhwZXJpbWVudCBmdXJ0aGVyLgotdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgRm9udERhdGE+IEZvbnREYXRhQ2FjaGU7Ci0KLX0gLy8gbmFtZXNwYWNl
Ci0KLS8vIEZJWE1FOiB0aGlzIGlzIGZvbnQgZmFsbGJhY2sgY29kZSB2ZXJzaW9uIDAuMQotLy8g
IC0gQ292ZXIgYWxsIHRoZSBzY3JpcHRzCi0vLyAgLSBHZXQgdGhlIGRlZmF1bHQgZm9udCBmb3Ig
ZWFjaCBzY3JpcHQvZ2VuZXJpYyBmYW1pbHkgZnJvbSB0aGUKLS8vICAgIHByZWZlcmVuY2UgaW5z
dGVhZCBvZiBoYXJkY29kaW5nIGluIHRoZSBzb3VyY2UuCi0vLyAgICAoYXQgbGVhc3QsIHJlYWQg
dmFsdWVzIGZyb20gdGhlIHJlZ2lzdHJ5IGZvciBJRSBmb250IHNldHRpbmdzKS4KLS8vICAtIFN1
cHBvcnQgZ2VuZXJpYyBmYW1pbGllcyAoZnJvbSBGb250RGVzY3JpcHRpb24pCi0vLyAgLSBJZiB0
aGUgZGVmYXVsdCBmb250IGZvciBhIHNjcmlwdCBpcyBub3QgYXZhaWxhYmxlLAotLy8gICAgdHJ5
IHNvbWUgbW9yZSBmb250cyBrbm93biB0byBzdXBwb3J0IGl0LiBGaW5hbGx5LCB3ZSBjYW4KLS8v
ICAgIHVzZSBFbnVtRm9udEZhbWlsaWVzIG9yIHNpbWlsYXIgQVBJcyB0byBjb21lIHVwIHdpdGgg
YSBsaXN0IG9mCi0vLyAgICBmb250cyBzdXBwb3J0aW5nIHRoZSBzY3JpcHQgYW5kIGNhY2hlIHRo
ZSByZXN1bHQuCi0vLyAgLSBDb25zaWRlciB1c2luZyBVbmljb2RlU2V0IChvciBVbmljb2RlTWFw
KSBjb252ZXJ0ZWQgZnJvbQotLy8gICAgR0xZUEhTRVQgKEJNUCkgb3IgZGlyZWN0bHkgcmVhZCBm
cm9tIHRydWV0eXBlIGNtYXAgdGFibGVzIHRvCi0vLyAgICBrZWVwIHRyYWNrIG9mIHdoaWNoIGNo
YXJhY3RlciBpcyBzdXBwb3J0ZWQgYnkgd2hpY2ggZm9udAotLy8gIC0gVXBkYXRlIHNjcmlwdF9m
b250X2NhY2hlIGluIHJlc3BvbnNlIHRvIFdNX0ZPTlRDSEFOR0UKLQotY29uc3QgVUNoYXIqIGdl
dEZvbnRGYW1pbHlGb3JTY3JpcHQoVVNjcmlwdENvZGUgc2NyaXB0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpHZW5lcmljRmFtaWx5VHlwZSBn
ZW5lcmljKQotewotICAgIHN0YXRpYyBTY3JpcHRUb0ZvbnRNYXAgc2NyaXB0Rm9udE1hcDsKLSAg
ICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIGlmICghaW5pdGlhbGl6ZWQp
IHsKLSAgICAgICAgaW5pdGlhbGl6ZVNjcmlwdEZvbnRNYXAoc2NyaXB0Rm9udE1hcCk7Ci0gICAg
ICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHNjcmlwdCA9PSBVU0NSSVBU
X0lOVkFMSURfQ09ERSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKHNjcmlwdCA8IFVT
Q1JJUFRfQ09ERV9MSU1JVCk7Ci0gICAgcmV0dXJuIHNjcmlwdEZvbnRNYXBbc2NyaXB0XTsKLX0K
LQotLy8gRklYTUU6Ci0vLyAgLSBIYW5kbGUgJ0luaGVyaXRlZCcsICdDb21tb24nIGFuZCAnVW5r
bm93bicKLS8vICAgIChzZWUgaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMjQvI1Vz
YWdlX01vZGVsICkKLS8vICAgIEZvciAnSW5oZXJpdGVkJyBhbmQgJ0NvbW1vbicsIHBlcmhhcHMg
d2UgbmVlZCB0bwotLy8gICAgYWNjZXB0IGFub3RoZXIgcGFyYW1ldGVyIGluZGljYXRpbmcgdGhl
IHByZXZpb3VzIGZhbWlseQotLy8gICAgYW5kIGp1c3QgcmV0dXJuIGl0LgotLy8gIC0gQWxsIHRo
ZSBjaGFyYWN0ZXJzIChvciBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBwb2ludCBhIHNpbmdsZQotLy8g
ICAgZm9udCBjYW4gY292ZXIpIG5lZWQgdG8gYmUgdGFrZW4gaW50byBhY2NvdW50Ci1jb25zdCBV
Q2hhciogZ2V0RmFsbGJhY2tGYW1pbHkoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGb250RGVzY3JpcHRpb246OkdlbmVyaWNGYW1pbHlUeXBlIGdlbmVyaWMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiogY2hhckNoZWNrZWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdENvZGUqIHNjcmlwdENoZWNrZWQpCi17
Ci0gICAgQVNTRVJUKGNoYXJhY3RlcnMgJiYgY2hhcmFjdGVyc1swXSAmJiBsZW5ndGggPiAwKTsK
LSAgICBVU2NyaXB0Q29kZSBzY3JpcHQgPSBVU0NSSVBUX0NPTU1PTjsKLQotICAgIC8vIFNvbWV0
aW1lcyBjaGFyYWN0ZXJzIGNvbW1vbiB0byBzY3JpcHQgKGUuZy4gc3BhY2UpIGlzIGF0Ci0gICAg
Ly8gdGhlIGJlZ2lubmluZyBvZiBhIHN0cmluZyBzbyB0aGF0IHdlIG5lZWQgdG8gc2tpcCB0aGVt
Ci0gICAgLy8gdG8gZ2V0IGEgZm9udCByZXF1aXJlZCB0byByZW5kZXIgdGhlIHN0cmluZy4KLSAg
ICBpbnQgaSA9IDA7Ci0gICAgVUNoYXIzMiB1Y3M0ID0gMDsKLSAgICB3aGlsZSAoaSA8IGxlbmd0
aCAmJiBzY3JpcHQgPT0gVVNDUklQVF9DT01NT04pIHsKLSAgICAgICAgVTE2X05FWFQoY2hhcmFj
dGVycywgaSwgbGVuZ3RoLCB1Y3M0KTsKLSAgICAgICAgc2NyaXB0ID0gZ2V0U2NyaXB0KHVjczQp
OwotICAgIH0KLQotICAgIC8vIEZvciB0aGUgZnVsbC13aWR0aCBBU0NJSSBjaGFyYWN0ZXJzIChV
K0ZGMDAgLSBVK0ZGNUUpLCB1c2UgdGhlIGZvbnQgZm9yCi0gICAgLy8gSGFuIChkZXRlcm1pbmVk
IGluIGEgbG9jYWxlLWRlcGVuZGVudCB3YXkgYWJvdmUpLiBGdWxsLXdpZHRoIEFTQ0lJCi0gICAg
Ly8gY2hhcmFjdGVycyBhcmUgcmF0aGVyIHdpZGVseSB1c2VkIGluIEphcGFuZXNlIGFuZCBDaGlu
ZXNlIGRvY3VtZW50cyBhbmQKLSAgICAvLyB0aGV5J3JlIGZ1bGx5IGNvdmVyZWQgYnkgQ2hpbmVz
ZSwgSmFwYW5lc2UgYW5kIEtvcmVhbiBmb250cy4KLSAgICBpZiAoMHhGRjAwIDwgdWNzNCAmJiB1
Y3M0IDwgMHhGRjVGKQotICAgICAgICBzY3JpcHQgPSBVU0NSSVBUX0hBTjsKLQotICAgIGlmIChz
Y3JpcHQgPT0gVVNDUklQVF9DT01NT04pCi0gICAgICAgIHNjcmlwdCA9IGdldFNjcmlwdEJhc2Vk
T25Vbmljb2RlQmxvY2sodWNzNCk7Ci0KLSAgICBjb25zdCBVQ2hhciogZmFtaWx5ID0gZ2V0Rm9u
dEZhbWlseUZvclNjcmlwdChzY3JpcHQsIGdlbmVyaWMpOwotICAgIC8vIEFub3RoZXIgbGFtZSB3
b3JrLWFyb3VuZCB0byBjb3ZlciBub24tQk1QIGNoYXJhY3RlcnMuCi0gICAgLy8gSWYgdGhlIGZv
bnQgZmFtaWx5IGZvciBzY3JpcHQgaXMgbm90IGZvdW5kIG9yIHRoZSBjaGFyYWN0ZXIgaXMKLSAg
ICAvLyBub3QgaW4gQk1QICg+IFUrRkZGRiksIHdlIHJlc29ydCB0byB0aGUgaGFyZC1jb2RlZCBs
aXN0IG9mCi0gICAgLy8gZmFsbGJhY2sgZm9udHMgZm9yIG5vdy4KLSAgICBpZiAoIWZhbWlseSB8
fCB1Y3M0ID4gMHhGRkZGKSB7Ci0gICAgICAgIGludCBwbGFuZSA9IHVjczQgPj4gMTY7Ci0gICAg
ICAgIHN3aXRjaCAocGxhbmUpIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgZmFtaWx5
ID0gTCJjb2RlMjAwMSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAg
ICAgICAgICAgLy8gVXNlIGEgVHJhZGl0aW9uYWwgQ2hpbmVzZSBFeHRCIGZvbnQgaWYgaW4gVHJh
ZGl0aW9uYWwgQ2hpbmVzZSBsb2NhbGUuCi0gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHVzZSBh
IFNpbXBsaWZpZWQgQ2hpbmVzZSBFeHRCIGZvbnQuIFdpbmRvd3MgSmFwYW5lc2UKLSAgICAgICAg
ICAgIC8vIGZvbnRzIGRvIHN1cHBvcnQgYSBzbWFsbCBzdWJzZXQgb2YgRXh0QiAodGhhdCBhcmUg
aW5jbHVkZWQgaW4gSklTIFggMDIxMyksCi0gICAgICAgICAgICAvLyBidXQgaXRzIGNvdmVyYWdl
IGlzIHJhdGhlciBzcGFyc2UuCi0gICAgICAgICAgICAvLyBFdmVudHVhbGx5LCB0aGlzIHNob3Vs
ZCBiZSBjb250cm9sbGVkIGJ5IGxhbmcveG1sOmxhbmcuCi0gICAgICAgICAgICBpZiAoaWN1OjpM
b2NhbGU6OmdldERlZmF1bHQoKSA9PSBpY3U6OkxvY2FsZTo6Z2V0VHJhZGl0aW9uYWxDaGluZXNl
KCkpCi0gICAgICAgICAgICAgIGZhbWlseSA9IEwicG1pbmdsaXUtZXh0YiI7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgIGZhbWlseSA9IEwic2ltc3VuLWV4dGIiOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmYW1pbHkgPSBMImx1Y2lk
YSBzYW5zIHVuaWNvZGUiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNoYXJDaGVja2Vk
KQotICAgICAgICAqY2hhckNoZWNrZWQgPSB1Y3M0OwotICAgIGlmIChzY3JpcHRDaGVja2VkKQot
ICAgICAgICAqc2NyaXB0Q2hlY2tlZCA9IHNjcmlwdDsKLSAgICByZXR1cm4gZmFtaWx5OwotfQot
Ci0vLyBCZSBhd2FyZSB0aGF0IHRoaXMgaXMgbm90IHRocmVhZC1zYWZlLgotYm9vbCBnZXREZXJp
dmVkRm9udERhdGEoY29uc3QgVUNoYXIqIGZhbWlseSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGludCBzdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR0ZPTlQqIGxvZ2ZvbnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGFzY2VudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIEhGT05UKiBoZm9udCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNDUklQVF9DQUNIRSoq
IHNjcmlwdENhY2hlLAotICAgICAgICAgICAgICAgICAgICAgICAgV09SRCogc3BhY2VHbHlwaCkK
LXsKLSAgICBBU1NFUlQobG9nZm9udCk7Ci0gICAgQVNTRVJUKGZhbWlseSk7Ci0gICAgQVNTRVJU
KCpmYW1pbHkpOwotCi0gICAgLy8gSXQgZG9lcyBub3QgbWF0dGVyIHRoYXQgd2UgbGVhayBmb250
IGRhdGEgd2hlbiB3ZSBleGl0LgotICAgIHN0YXRpYyBGb250RGF0YUNhY2hlIGZvbnREYXRhQ2Fj
aGU7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBjb21lcyB1cCBwcmV0dHkgaGlnaCBpbiB0aGUgcHJv
ZmlsZSBzbyB0aGF0Ci0gICAgLy8gd2UgbmVlZCB0byBtZWFzdXJlIHdoZXRoZXIgdXNpbmcgU0hB
MjU2IChhZnRlciBjb2VyY2luZyBhbGwgdGhlCi0gICAgLy8gZmllbGRzIHRvIGNoYXIqKSBpcyBm
YXN0ZXIgdGhhbiBTdHJpbmc6OmZvcm1hdC4KLSAgICBTdHJpbmcgZm9udEtleSA9IFN0cmluZzo6
Zm9ybWF0KCIlMWQ6JWQ6JWxzIiwgc3R5bGUsIGxvZ2ZvbnQtPmxmSGVpZ2h0LCBmYW1pbHkpOwot
ICAgIEZvbnREYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ZXIgPSBmb250RGF0YUNhY2hlLmZpbmQoZm9u
dEtleSk7Ci0gICAgRm9udERhdGEqIGRlcml2ZWQ7Ci0gICAgaWYgKGl0ZXIgPT0gZm9udERhdGFD
YWNoZS5lbmQoKSkgewotICAgICAgICBBU1NFUlQod2NzbGVuKGZhbWlseSkgPCBMRl9GQUNFU0la
RSk7Ci0gICAgICAgIHdjc2NweV9zKGxvZ2ZvbnQtPmxmRmFjZU5hbWUsIExGX0ZBQ0VTSVpFLCBm
YW1pbHkpOwotICAgICAgICAvLyBGSVhNRTogQ3JlYXRlRm9udEluZGlyZWN0IGFsd2F5cyBjb21l
cyB1cCB3aXRoCi0gICAgICAgIC8vIGEgZm9udCBldmVuIGlmIHRoZXJlJ3Mgbm8gZm9udCBtYXRj
aGluZyB0aGUgbmFtZS4gTmVlZCB0bwotICAgICAgICAvLyBjaGVjayBpdCBhZ2FpbnN0IHdoYXQg
d2UgYWN0dWFsbHkgd2FudCAoYXMgaXMgZG9uZSBpbgotICAgICAgICAvLyBGb250Q2FjaGVXaW4u
Y3BwKQotICAgICAgICBGb250RGF0YUNhY2hlOjpBZGRSZXN1bHQgZW50cnkgPSBmb250RGF0YUNh
Y2hlLmFkZChmb250S2V5LCBGb250RGF0YSgpKTsKLSAgICAgICAgZGVyaXZlZCA9ICZlbnRyeS5p
dGVyYXRvci0+dmFsdWU7Ci0gICAgICAgIGRlcml2ZWQtPmhmb250ID0gQ3JlYXRlRm9udEluZGly
ZWN0KGxvZ2ZvbnQpOwotICAgICAgICAvLyBHZXRBc2NlbnQgbWF5IHJldHVybiBrVW5kZWZpbmVk
QXNjZW50LCBidXQgd2Ugc3RpbGwgd2FudCB0bwotICAgICAgICAvLyBjYWNoZSBpdCBzbyB0aGF0
IHdlIHdvbid0IGhhdmUgdG8gY2FsbCBDcmVhdGVGb250SW5kaXJlY3Qgb25jZQotICAgICAgICAv
LyBtb3JlIGZvciBIRk9OVCBuZXh0IHRpbWUuCi0gICAgICAgIGRlcml2ZWQtPmFzY2VudCA9IGdl
dEFzY2VudChkZXJpdmVkLT5oZm9udCk7Ci0gICAgICAgIGRlcml2ZWQtPnNwYWNlR2x5cGggPSBn
ZXRTcGFjZUdseXBoKGRlcml2ZWQtPmhmb250KTsKLSAgICB9IGVsc2UgewotICAgICAgICBkZXJp
dmVkID0gJml0ZXItPnZhbHVlOwotICAgICAgICAvLyBMYXN0IHRpbWUsIEdldEFzY2VudCBmYWls
ZWQgc28gdGhhdCBvbmx5IEhGT05UIHdhcwotICAgICAgICAvLyBjYWNoZWQuIFRyeSBvbmNlIG1v
cmUgYXNzdW1pbmcgdGhhdCBUcnlQcmVsb2FkRm9udAotICAgICAgICAvLyB3YXMgY2FsbGVkIGJ5
IGEgY2FsbGVyIGJldHdlZW4gY2FsbHMuCi0gICAgICAgIGlmIChrVW5kZWZpbmVkQXNjZW50ID09
IGRlcml2ZWQtPmFzY2VudCkKLSAgICAgICAgICAgIGRlcml2ZWQtPmFzY2VudCA9IGdldEFzY2Vu
dChkZXJpdmVkLT5oZm9udCk7Ci0gICAgfQotICAgICpoZm9udCA9IGRlcml2ZWQtPmhmb250Owot
ICAgICphc2NlbnQgPSBkZXJpdmVkLT5hc2NlbnQ7Ci0gICAgKnNjcmlwdENhY2hlID0gJihkZXJp
dmVkLT5zY3JpcHRDYWNoZSk7Ci0gICAgKnNwYWNlR2x5cGggPSBkZXJpdmVkLT5zcGFjZUdseXBo
OwotICAgIHJldHVybiAqYXNjZW50ICE9IGtVbmRlZmluZWRBc2NlbnQ7Ci19Ci0KLWludCBnZXRT
dHlsZUZyb21Mb2dmb250KGNvbnN0IExPR0ZPTlQqIGxvZ2ZvbnQpCi17Ci0gICAgLy8gRklYTUU6
IGNvbnNpZGVyIGRlZmluaW5nIFVOREVGSU5FRCBvciBJTlZBTElEIGZvciBzdHlsZSBhbmQKLSAg
ICAvLyAgICAgICAgICAgICAgICAgIHJldHVybmluZyBpdCB3aGVuIGxvZ2ZvbnQgaXMgMAotICAg
IGlmICghbG9nZm9udCkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIEZvbnRTdHlsZU5vcm1hbDsKLSAgICB9Ci0gICAgcmV0dXJuIChsb2dmb250LT5sZkl0
YWxpYyA/IEZvbnRTdHlsZUl0YWxpYyA6IEZvbnRTdHlsZU5vcm1hbCkgfAotICAgICAgICAgICAo
bG9nZm9udC0+bGZVbmRlcmxpbmUgPyBGb250U3R5bGVVbmRlcmxpbmVkIDogRm9udFN0eWxlTm9y
bWFsKSB8Ci0gICAgICAgICAgIChsb2dmb250LT5sZldlaWdodCA+PSA3MDAgPyBGb250U3R5bGVC
b2xkIDogRm9udFN0eWxlTm9ybWFsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFV0aWxzQ2hy
b21pdW1XaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1bVdpbi5oCShyZXZpc2lvbiAxNDc3MzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250VXRpbHNDaHJvbWl1
bVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KGMpIDIwMDYsIDIwMDcsIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
QSBjb2xsZWN0aW9uIG9mIHV0aWxpdGllcyBmb3IgZm9udCBoYW5kbGluZy4KLQotLy8gRklYTUU6
IE1vdmUgYWxsIG1ldGhvZHMgdG8gdGhlIGZpbGVzIHRoYXQgaGF2ZSB0aGVpciBjYWxsc2l0ZXMg
YW5kIHJlbW92ZSB0aGlzIGZpbGUuCi0vLyAqVXRpbHMgZmlsZXMgYXJlIG5vdCB2ZXJ5IFdlYktp
dC10eS4KLQotI2lmbmRlZiBGb250VXRpbHNDaHJvbWl1bVdpbl9oCi0jZGVmaW5lIEZvbnRVdGls
c0Nocm9taXVtV2luX2gKLQotI2luY2x1ZGUgPHVzcDEwLmg+Ci0jaW5jbHVkZSA8d2NoYXIuaD4K
LSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLSNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKLSNp
bmNsdWRlIDx1bmljb2RlL3VzY3JpcHQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBS
ZXR1cm4gYSBmb250IGZhbWlseSB0aGF0IHN1cHBvcnRzIGEgc2NyaXB0IGFuZCBiZWxvbmdzIHRv
IHxnZW5lcmljfCBmb250Ci0vLyBmYW1pbHkuICBJdCBjYW4gcmV0dXJuIE5VTEwgYW5kIGEgY2Fs
bGVyIGhhcyB0byBpbXBsZW1lbnQgaXRzIG93biBmYWxsYmFjay4KLWNvbnN0IFVDaGFyKiBnZXRG
b250RmFtaWx5Rm9yU2NyaXB0KFVTY3JpcHRDb2RlLCBGb250RGVzY3JpcHRpb246OkdlbmVyaWNG
YW1pbHlUeXBlKTsKLQotLy8gUmV0dXJuIGEgZm9udCBmYW1pbHkgdGhhdCBjYW4gcmVuZGVyIHxj
aGFyYWN0ZXJzfCBiYXNlZCBvbgotLy8gd2hhdCBzY3JpcHQgY2hhcmFjdGVycyBiZWxvbmcgdG8u
IFdoZW4gY2hhcl9jaGVja2VkIGlzIG5vbi1OVUxMLAotLy8gaXQncyBmaWxsZWQgd2l0aCB0aGUg
Y2hhcmFjdGVyIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBzY3JpcHQuCi0vLyBXaGVuIHNjcmlwdF9j
aGVja2VkIGlzIG5vbi1OVUxMLCB0aGUgc2NyaXB0IHVzZWQgdG8gZGV0ZXJtaW5lCi0vLyB0aGUg
ZmFtaWx5IGlzIHJldHVybmVkLgotLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gbmVlZHMgYSB0b3Rh
bCBvdmVyaGF1bC4KLWNvbnN0IFVDaGFyKiBnZXRGYWxsYmFja0ZhbWlseShjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
b250RGVzY3JpcHRpb246OkdlbmVyaWNGYW1pbHlUeXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVDaGFyMzIqIGNoYXJDaGVja2VkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVTY3JpcHRDb2RlKiBzY3JpcHRDaGVja2VkKTsKLQotLy8gRGVyaXZlIGEgbmV3IEhG
T05UIGJ5IHJlcGxhY2luZyBsZkZhY2VOYW1lIG9mIExPR0ZPTlQgd2l0aCB8ZmFtaWx5fCwKLS8v
IGNhbGN1bGF0ZSB0aGUgYXNjZW50IGZvciB0aGUgZGVyaXZlZCBIRk9OVCwgYW5kIGluaXRpYWxp
emUgU0NSSVBUX0NBQ0hFCi0vLyBpbiBGb250RGF0YS4KLS8vIHxzdHlsZXwgaXMgb25seSB1c2Vk
IGZvciBjYWNoZSBrZXkgZ2VuZXJhdGlvbi4gfHN0eWxlfCBpcwotLy8gYml0LXdpc2UgT1Igb2Yg
Qk9MRCgxKSwgVU5ERVJMSU5FRCgyKSBhbmQgSVRBTElDKDQpIGFuZAotLy8gc2hvdWxkIG1hdGNo
IHdoYXQncyBjb250YWluZWQgaW4gTE9HRk9OVC4gSXQgc2hvdWxkIGJlIGNhbGN1bGF0ZWQKLS8v
IGJ5IGNhbGxpbmcgR2V0U3R5bGVGcm9tTG9nRm9udC4KLS8vIFJldHVybnMgZmFsc2UgaWYgdGhl
IGZvbnQgaXMgbm90IGFjY2Vzc2libGUsIGluIHdoaWNoIGNhc2UgfGFzY2VudHwgZmllbGQKLS8v
IG9mIHxmb250ZGF0YXwgaXMgc2V0IHRvIGtVbmRlZmluZWRBc2NlbnQuCi0vLyBCZSBhd2FyZSB0
aGF0IHRoaXMgaXMgbm90IHRocmVhZC1zYWZlLgotLy8gRklYTUU6IEluc3RlYWQgb2YgaGF2aW5n
IHRocmVlIG91dCBwYXJhbXMsIHdlJ2QgYmV0dGVyIGhhdmUgb25lCi0vLyAofCpGb250RGF0YXwp
LCBidXQgc29tZWhvdyBpdCBteXN0ZXJpb3VzbHkgbWVzc2VzIHVwIHRoZSBsYXlvdXQgZm9yCi0v
LyBjZXJ0YWluIGNvbXBsZXggc2NyaXB0IHBhZ2VzIChlLmcuIGhpLndpa2lwZWRpYS5vcmcpIGFu
ZCBhbHNvIGNyYXNoZXMKLS8vIGF0IHRoZSBzdGFydC11cCBpZiByZWNlbnRseSB2aXNpdGVkIHBh
Z2UgbGlzdCBpbmNsdWRlcyBwYWdlcyB3aXRoIGNvbXBsZXgKLS8vIHNjcmlwdHMgaW4gdGhlaXIg
dGl0bGUuIE1vcmVvdmVyLCBzb21laG93IHRoZSB2ZXJ5IGZpcnN0LXBhc3Mgb2YKLS8vIGludGwy
IHBhZ2UtY3ljbGVyIHRlc3QgaXMgbm90aWNlYWJseSBzbG93ZXIgd2l0aCBvbmUgb3V0IHBhcmFt
IHRoYW4KLS8vIHRoZSBjdXJyZW50IHZlcnNpb24gYWx0aG91Z2ggdGhlIHN1YnNlcXVlbnQgOSBw
YXNzZXMgdGFrZSBhYm91dCB0aGUKLS8vIHNhbWUgdGltZS4KLWJvb2wgZ2V0RGVyaXZlZEZvbnRE
YXRhKGNvbnN0IFVDaGFyKiBmYW1pbHksIGludCBzdHlsZSwgTE9HRk9OVCosIGludCogYXNjZW50
LCBIRk9OVCosIFNDUklQVF9DQUNIRSoqLCBXT1JEKiBzcGFjZUdseXBoKTsKLQotZW51bSB7Ci0g
ICAgRm9udFN0eWxlTm9ybWFsID0gMCwKLSAgICBGb250U3R5bGVCb2xkID0gMSwKLSAgICBGb250
U3R5bGVJdGFsaWMgPSAyLAotICAgIEZvbnRTdHlsZVVuZGVybGluZWQgPSA0Ci19OwotCi0vLyBE
ZXJpdmUgc3R5bGUgKGJpdC13aXNlIE9SIG9mIEZPTlRfU1RZTEVfQk9MRCwgRk9OVF9TVFlMRV9V
TkRFUkxJTkVELCBhbmQKLS8vIEZPTlRfU1RZTEVfSVRBTElDKSBmcm9tIExPR0ZPTlQuIFJldHVy
bnMgMCBpZiB8KmxvZ2ZvbnR8IGlzIE5VTEwuCi1pbnQgZ2V0U3R5bGVGcm9tTG9nZm9udChjb25z
dCBMT0dGT05UKik7Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAgLy8gRm9u
dFV0aWxzQ2hyb21pdW1XaW5faApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJl
ZU5vZGVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChj
KSAyMDA4LCAyMDA5LCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0K
LSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2lu
LmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKLSNpbmNsdWRlICJIV25kREMuaCIK
LSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgIlN5c3RlbUluZm8uaCIKLSNp
bmNsdWRlICJVbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotLy8gRmlsbHMgb25lIHBhZ2Ugb2YgZm9udCBkYXRhIHBvaW50ZXJzIHdpdGggMCB0byBpbmRp
Y2F0ZSB0aGF0IHRoZXJlCi0vLyBhcmUgbm8gZ2x5cGhzIGZvciB0aGUgY2hhcmFjdGVycy4KLXN0
YXRpYyB2b2lkIGZpbGxFbXB0eUdseXBocyhHbHlwaFBhZ2UqIHBhZ2UpCi17Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkKLSAgICAgICAgcGFnZS0+c2V0R2x5
cGhEYXRhRm9ySW5kZXgoaSwgMCwgMCk7Ci19Ci0KLS8vIENvbnZlcnQgY2hhcmFjdGVycyB0byBn
bHlwaCBpZHMgYnkgR2V0R2x5cGhJbmRpY2VzKCksIGR1cmluZyB3aGljaCwgd2UKLS8vIGVuc3Vy
ZSB0aGUgZm9udCBpcyBsb2FkZWQgaW4gbWVtb3J5IHRvIG1ha2UgaXQgd29yayBpbiBhIHNhbmRi
b3hlZCBwcm9jZXNzLgotc3RhdGljIGJvb2wgZ2V0R2x5cGhJbmRpY2VzKEhGT05UIGZvbnQsIEhE
QyBkYywgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGNoYXJhY3RlcnNMZW5ndGgs
IFdPUkQqIGdseXBoQnVmZmVyLCBEV09SRCBmbGFnKQotewotICAgIGlmIChHZXRHbHlwaEluZGlj
ZXMoZGMsIGNoYXJhY3RlcnMsIGNoYXJhY3RlcnNMZW5ndGgsIGdseXBoQnVmZmVyLCBmbGFnKSAh
PSBHRElfRVJST1IpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChGb250UGxhdGZvcm1E
YXRhOjplbnN1cmVGb250TG9hZGVkKGZvbnQpKSB7Ci0gICAgICAgIGlmIChHZXRHbHlwaEluZGlj
ZXMoZGMsIGNoYXJhY3RlcnMsIGNoYXJhY3RlcnNMZW5ndGgsIGdseXBoQnVmZmVyLCBmbGFnKSAh
PSBHRElfRVJST1IpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgLy8gRklYTUU6
IEhhbmRsZSBncmFjZWZ1bGx5IHRoZSBlcnJvciBpZiB0aGlzIGNhbGwgYWxzbyBmYWlscy4KLSAg
ICAgICAgLy8gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vNjQwMQotICAgICAgICBMT0dfRVJST1IoIlVu
YWJsZSB0byBnZXQgdGhlIGdseXBoIGluZGljZXMgYWZ0ZXIgc2Vjb25kIGF0dGVtcHQiKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBJbml0aWFsaXplcyBzcGFjZSBnbHlwaAot
c3RhdGljIGJvb2wgaW5pdFNwYWNlR2x5cGgoSEZPTlQgZm9udCwgSERDIGRjLCBHbHlwaCogc3Bh
Y2VHbHlwaCkKLXsKLSAgICBzdGF0aWMgd2NoYXJfdCBzcGFjZSA9ICcgJzsKLSAgICByZXR1cm4g
Z2V0R2x5cGhJbmRpY2VzKGZvbnQsIGRjLCAmc3BhY2UsIDEsIHNwYWNlR2x5cGgsIDApOwotfQot
Ci0vLyBGaWxscyB8bGVuZ3RofCBnbHlwaHMgc3RhcnRpbmcgYXQgfG9mZnNldHwgaW4gYSB8cGFn
ZXwgaW4gdGhlIEJhc2ljIAotLy8gTXVsdGlsaW5ndWFsIFBsYW5lICg8PSBVK0ZGRkYpLiBUaGUg
aW5wdXQgYnVmZmVyIHNpemUgc2hvdWxkIGJlIHRoZQotLy8gc2FtZSBhcyB8bGVuZ3RofC4gV2Ug
Y2FuIHVzZSB0aGUgc3RhbmRhcmQgV2luZG93cyBHREkgZnVuY3Rpb25zIGhlcmUuIAotLy8gUmV0
dXJucyB0cnVlIGlmIGFueSBnbHlwaHMgd2VyZSBmb3VuZC4KLXN0YXRpYyBib29sIGZpbGxCTVBH
bHlwaHModW5zaWduZWQgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyKiBidWZmZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIEdseXBoUGFnZSogcGFnZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQotewotICAgIEhXbmREQyBk
YygwKTsKLSAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoZGMsIGZvbnREYXRhLT5w
bGF0Zm9ybURhdGEoKS5oZm9udCgpKTsKLQotICAgIFRFWFRNRVRSSUMgdG0gPSB7MH07Ci0gICAg
aWYgKCFHZXRUZXh0TWV0cmljcyhkYywgJnRtKSkgewotICAgICAgICBpZiAoRm9udFBsYXRmb3Jt
RGF0YTo6ZW5zdXJlRm9udExvYWRlZChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSkp
IHsKLSAgICAgICAgICAgIGlmICghR2V0VGV4dE1ldHJpY3MoZGMsICZ0bSkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogSGFuZGxlIGdyYWNlZnVsbHkgdGhlIGVycm9yIGlmIHRoaXMgY2Fs
bCBhbHNvIGZhaWxzLgotICAgICAgICAgICAgICAgIC8vIFNlZSBodHRwOi8vY3JidWcuY29tLzY0
MDEKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBnZXQgdGhlIHRleHQgbWV0
cmljcyBhZnRlciBzZWNvbmQgYXR0ZW1wdCIpOwotCi0gICAgICAgICAgICAgICAgU2VsZWN0T2Jq
ZWN0KGRjLCBvbGRGb250KTsKLSAgICAgICAgICAgICAgICBmaWxsRW1wdHlHbHlwaHMocGFnZSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRGb250KTsKLSAgICAgICAg
ICAgIGZpbGxFbXB0eUdseXBocyhwYWdlKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIEZJWE1FOiBHZXRHbHlwaEluZGljZXMoKSBzZXRzIGVh
Y2ggaXRlbSBvZiBsb2NhbEdseXBoQnVmZmVyW10KLSAgICAvLyB3aXRoIHRoZSBvbmUgb2YgdGhl
IHZhbHVlcyBsaXN0ZWQgYmVsb3cuCi0gICAgLy8gICogV2l0aCB0aGUgR0dJX01BUktfTk9ORVhJ
U1RJTkdfR0xZUEhTIGZsYWcKLSAgICAvLyAgICArIElmIHRoZSBmb250IGhhcyBhIGdseXBoIGF2
YWlsYWJsZSBmb3IgdGhlIGNoYXJhY3RlciwKLSAgICAvLyAgICAgIGxvY2FsR2x5cGhCdWZmZXJb
aV0gPiAweDAuCi0gICAgLy8gICAgKyBJZiB0aGUgZm9udCBkb2VzIG5vdCBoYXZlIGdseXBocyBh
dmFpbGFibGUgZm9yIHRoZSBjaGFyYWN0ZXIsCi0gICAgLy8gICAgICBsb2NhbEdseXBoQnVmZmVy
W2ldID0gMHgxRiAoVHJ1ZVR5cGUgQ29sbGVjdGlvbj8pIG9yCi0gICAgLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHhGRkZGIChPcGVuVHlwZT8pLgotICAgIC8vICAqIFdpdGhvdXQgdGhl
IEdHSV9NQVJLX05PTkVYSVNUSU5HX0dMWVBIUyBmbGFnCi0gICAgLy8gICAgKyBJZiB0aGUgZm9u
dCBoYXMgYSBnbHlwaCBhdmFpbGFibGUgZm9yIHRoZSBjaGFyYWN0ZXIsCi0gICAgLy8gICAgICBs
b2NhbEdseXBoQnVmZmVyW2ldID4gMHgwLgotICAgIC8vICAgICsgSWYgdGhlIGZvbnQgZG9lcyBu
b3QgaGF2ZSBnbHlwaHMgYXZhaWxhYmxlIGZvciB0aGUgY2hhcmFjdGVyLAotICAgIC8vICAgICAg
bG9jYWxHbHlwaEJ1ZmZlcltpXSA9IDB4ODAuCi0gICAgLy8gICAgICAoV2luZG93cyBhdXRvbWF0
aWNhbGx5IGFzc2lnbnMgdGhlIGdseXBoIGZvciBhIGJveCBjaGFyYWN0ZXIgdG8KLSAgICAvLyAg
ICAgIHByZXZlbnQgRXh0VGV4dE91dCgpIGZyb20gcmV0dXJuaW5nIGVycm9ycy4pCi0gICAgLy8g
VG8gYXZvaWQgZnJvbSBodXJ0aW5nIHRoZSByZW5kZXJpbmcgcGVyZm9ybWFuY2UsIHRoaXMgY29k
ZSBqdXN0Ci0gICAgLy8gdGVsbHMgV2ViS2l0IHdoZXRoZXIgb3Igbm90IHRoZSBhbGwgZ2x5cGgg
aW5kaWNlcyBmb3IgdGhlIGdpdmVuCi0gICAgLy8gY2hhcmFjdGVycyBhcmUgMHg4MCAoaS5lLiBh
IHBvc3NpYmx5LWludmFsaWQgZ2x5cGgpIGFuZCBsZXQgaXQKLSAgICAvLyB1c2UgYWx0ZXJuYXRp
dmUgZm9udHMgZm9yIHRoZSBjaGFyYWN0ZXJzLgotICAgIC8vIEFsdGhvdWdoIHRoaXMgbWF5IGNh
dXNlIGEgcHJvYmxlbSwgaXQgc2VlbXMgdG8gd29yayBmaW5lIGFzIGZhciBhcyBJCi0gICAgLy8g
aGF2ZSB0ZXN0ZWQuIChPYnZpb3VzbHksIEkgbmVlZCBtb3JlIHRlc3RzLikKLSAgICBXT1JEIGxv
Y2FsR2x5cGhCdWZmZXJbR2x5cGhQYWdlOjpzaXplXTsKLQotICAgIC8vIEZJWE1FOiBJIGZpbmQg
c29tZSBDaGluZXNlIGNoYXJhY3RlcnMgY2FuIG5vdCBiZSBjb3JyZWN0bHkgZGlzcGxheWVkCi0g
ICAgLy8gd2hlbiBjYWxsIEdldEdseXBoSW5kaWNlcyB3aXRob3V0IGZsYWcgR0dJX01BUktfTk9O
RVhJU1RJTkdfR0xZUEhTLAotICAgIC8vIGJlY2F1c2UgdGhlIGNvcnJlc3BvbmRpbmcgZ2x5cGgg
aW5kZXggaXMgc2V0IGFzIDB4MjAgd2hlbiBjdXJyZW50IGZvbnQKLSAgICAvLyBkb2VzIG5vdCBo
YXZlIGdseXBocyBhdmFpbGFibGUgZm9yIHRoZSBjaGFyYWN0ZXIuIEFjY29yZGluZyBhIGJsb2cg
cG9zdAotICAgIC8vIGh0dHA6Ly9ibG9ncy5tc2RuLmNvbS9taWNoa2FwL2FyY2hpdmUvMjAwNi8w
Ni8yOC82NDk3OTEuYXNweAotICAgIC8vIEkgdGhpbmsgd2Ugc2hvdWxkIHN3aXRjaCB0byB0aGUg
d2F5IGFib3V0IGNhbGxpbmcgR2V0R2x5cGhJbmRpY2VzIHdpdGgKLSAgICAvLyBmbGFnIEdHSV9N
QVJLX05PTkVYSVNUSU5HX0dMWVBIUywgaXQgc2hvdWxkIGJlIE9LIGFjY29yZGluZyB0aGUKLSAg
ICAvLyBkZXNjcmlwdGlvbiBvZiBNU0ROLgotICAgIC8vIEFsc28gYWNjb3JkaW5nIHRvIEp1bmdz
aGlrIGFuZCBIaXJvbm9yaSdzIHN1Z2dlc3Rpb24gYW5kIG1vZGlmaWNhdGlvbgotICAgIC8vIHdl
IHRyZWF0IHR1cmV0eXBlIGFuZCByYXN0ZXIgRm9udCBhcyBkaWZmZXJlbnQgd2F5IHdoZW4gd2lu
ZG93cyB2ZXJzaW9uCi0gICAgLy8gaXMgbGVzcyB0aGFuIFZpc3RhLgotICAgIGlmICghZ2V0R2x5
cGhJbmRpY2VzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpLCBkYywgYnVmZmVyLCBs
ZW5ndGgsIGxvY2FsR2x5cGhCdWZmZXIsIEdHSV9NQVJLX05PTkVYSVNUSU5HX0dMWVBIUykpIHsK
LSAgICAgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRGb250KTsKLSAgICAgICAgZmlsbEVtcHR5R2x5
cGhzKHBhZ2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gQ29weSB0
aGUgb3V0cHV0IHRvIHRoZSBHbHlwaFBhZ2UKLSAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsK
LSAgICBpbnQgaW52YWxpZEdseXBoID0gMHhGRkZGOwotICAgIGNvbnN0IERXT1JEIGNmZlRhYmxl
VGFnID0gMHgyMDQ2NDY0MzsgLy8gNC1ieXRlIGlkZW50aWZpZXIgZm9yIE9wZW5UeXBlIENGRiB0
YWJsZSAoJ0NGRiAnKS4KLSAgICBpZiAoKHdpbmRvd3NWZXJzaW9uKCkgPCBXaW5kb3dzVmlzdGEp
ICYmICEodG0udG1QaXRjaEFuZEZhbWlseSAmIFRNUEZfVFJVRVRZUEUpICYmIChHZXRGb250RGF0
YShkYywgY2ZmVGFibGVUYWcsIDAsIDAsIDApID09IEdESV9FUlJPUikpCi0gICAgICAgIGludmFs
aWRHbHlwaCA9IDB4MUY7Ci0KLSAgICBHbHlwaCBzcGFjZUdseXBoID0gMDsgIC8vIEdseXBoIGZv
ciBhIHNwYWNlLiBMYXppbHkgZmlsbGVkLgotICAgIGJvb2wgc3BhY2VHbHlwaEluaXRpYWxpemVk
ID0gZmFsc2U7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgVUNoYXIgYyA9IGJ1ZmZlcltpXTsKLSAgICAgICAgR2x5cGggZ2x5cGggPSBsb2Nh
bEdseXBoQnVmZmVyW2ldOwotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZ2x5cGhGb250
RGF0YSA9IGZvbnREYXRhOwotICAgICAgICAvLyBXaGVuIHRoaXMgY2hhcmFjdGVyIHNob3VsZCBi
ZSBhIHNwYWNlLCB3ZSBpZ25vcmUgd2hhdGV2ZXIgdGhlIGZvbnQKLSAgICAgICAgLy8gc2F5cyBh
bmQgdXNlIGEgc3BhY2UuIE90aGVyd2lzZSwgaWYgZm9udHMgZG9uJ3QgbWFwIG9uZSBvZiB0aGVz
ZQotICAgICAgICAvLyBzcGFjZSBvciB6ZXJvIHdpZHRoIGdseXBocywgd2Ugd2lsbCBnZXQgYSBi
b3guCi0gICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3BhY2UoYykpIHsKLSAgICAgICAgICAgIC8v
IEhhcmQgY29kZSB0aGUgZ2x5cGggaW5kaWNlcyBmb3IgY2hhcmFjdGVycyB0aGF0IHNob3VsZCBi
ZQotICAgICAgICAgICAgLy8gdHJlYXRlZCBsaWtlIHNwYWNlcy4KLSAgICAgICAgICAgIGlmICgh
c3BhY2VHbHlwaEluaXRpYWxpemVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgaW5pdFNwYWNl
R2x5cGggZmFpbHMsIHNwYWNlR2x5cGggc3RheXMgMCAoPSBnbHlwaCBpcyBub3QgcHJlc2VudCku
Ci0gICAgICAgICAgICAgICAgaW5pdFNwYWNlR2x5cGgoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgp
Lmhmb250KCksIGRjLCAmc3BhY2VHbHlwaCk7Ci0gICAgICAgICAgICAgICAgc3BhY2VHbHlwaElu
aXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdseXBoID0gc3Bh
Y2VHbHlwaDsKLSAgICAgICAgfSBlbHNlIGlmIChnbHlwaCA9PSBpbnZhbGlkR2x5cGgpIHsKLSAg
ICAgICAgICAgIC8vIFdlYktpdCBleHBlY3RzIGJvdGggdGhlIGdseXBoIGluZGV4IGFuZCBGb250
RGF0YQotICAgICAgICAgICAgLy8gcG9pbnRlciB0byBiZSAwIGlmIHRoZSBnbHlwaCBpcyBub3Qg
cHJlc2VudAotICAgICAgICAgICAgZ2x5cGggPSAwOwotICAgICAgICAgICAgZ2x5cGhGb250RGF0
YSA9IDA7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7Ci0g
ICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihvZmZzZXQgKyBpLCBnbHlwaCwg
Z2x5cGhGb250RGF0YSk7Ci0gICAgfQotCi0gICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRGb250KTsK
LSAgICByZXR1cm4gaGF2ZUdseXBoczsKLX0KLQotLy8gRm9yIG5vbi1CTVAgY2hhcmFjdGVycywg
ZWFjaCBpcyB0d28gd29yZHMgKFVURi0xNikgYW5kIHRoZSBpbnB1dCBidWZmZXIKLS8vIHNpemUg
aXMgMiAqIHxsZW5ndGh8LiBTaW5jZSBHREkgZG9lc24ndCBrbm93IGhvdyB0byBoYW5kbGUgbm9u
LUJNUAotLy8gY2hhcmFjdGVycywgd2UgbXVzdCB1c2UgVW5pc2NyaWJlIHRvIHRlbGwgdXMgdGhl
IGdseXBoIGluZGljZXMuCi0vLwotLy8gV2UgZG9uJ3Qgd2FudCB0byBjYWxsIHRoaXMgaW4gdGhl
IGNhc2Ugb2YgInJlZ3VsYXIiIGNoYXJhY3RlcnMgc2luY2Ugc29tZQotLy8gZm9udHMgbWF5IG5v
dCBoYXZlIHRoZSBjb3JyZWN0IGNvbWJpbmluZyBydWxlcyBmb3IgYWNjZW50cy4gU2VlIHRoZSBu
b3RlcwotLy8gYXQgdGhlIGJvdHRvbSBvZiBTY3JpcHRHZXRDTWFwLiBXZSBjYW4ndCB1c2UgU2Ny
aXB0R2V0Q01hcCwgdGhvdWdoLCBzaW5jZQotLy8gaXQgZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQg
VVRGLTE2LCBkZXNwaXRlIHdoYXQgdGhpcyBibG9nIHBvc3Qgc2F5czoKLS8vICAgaHR0cDovL2Js
b2dzLm1zZG4uY29tL21pY2hrYXAvYXJjaGl2ZS8yMDA2LzA2LzI5LzY1MDY4MC5hc3B4Ci0vLwot
Ly8gU28gd2UgZmlyZSB1cCB0aGUgZnVsbCBVbmlzY3JpYmUgZG9vaGlja3ksIGdpdmUgaXQgb3Vy
IHN0cmluZywgYW5kIGl0IHdpbGwKLS8vIGNvcnJlY3RseSBoYW5kbGUgdGhlIFVURi0xNiBmb3Ig
dXMuIFRoZSBoYXJkIHBhcnQgaXMgdGFraW5nIHRoaXMgYW5kIGdldHRpbmcKLS8vIHRoZSBnbHlw
aCBpbmRpY2VzIGJhY2sgb3V0IHRoYXQgY29ycmVzcG9uZCB0byB0aGUgY29ycmVjdCBpbnB1dCBj
aGFyYWN0ZXJzLAotLy8gc2luY2UgdGhleSBtYXkgYmUgbWlzc2luZy4KLS8vCi0vLyBSZXR1cm5z
IHRydWUgaWYgYW55IGdseXBocyB3ZXJlIGZvdW5kLgotc3RhdGljIGJvb2wgZmlsbE5vbkJNUEds
eXBocyh1bnNpZ25lZCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIqIGJ1ZmZlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhQYWdlKiBwYWdlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCi17Ci0g
ICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7Ci0KLSAgICBVbmlzY3JpYmVIZWxwZXJUZXh0UnVu
IHN0YXRlKGJ1ZmZlciwgbGVuZ3RoICogMiwgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5zY3JpcHRDYWNo
ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERhdGEtPnBsYXRmb3Jt
RGF0YSgpLnNjcmlwdEZvbnRQcm9wZXJ0aWVzKCkpOwotICAgIHN0YXRlLnNldEluaGliaXRMaWdh
dGUodHJ1ZSk7Ci0gICAgc3RhdGUuc2V0RGlzYWJsZUZvbnRGYWxsYmFjayh0cnVlKTsKLSAgICBz
dGF0ZS5pbml0KCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgLy8gRWFjaCBjaGFyYWN0ZXIgaW4gdGhpcyBpbnB1dCBidWZmZXIgaXMgYSBz
dXJyb2dhdGUgcGFpciwgd2hpY2gKLSAgICAgICAgLy8gY29uc2lzdHMgb2YgdHdvIFVDaGFycy4g
U28sIHRoZSBvZmZzZXQgZm9yIGl0cyBpLXRoIGNoYXJhY3RlciBpcwotICAgICAgICAvLyAoaSAq
IDIpLgotICAgICAgICBXT1JEIGdseXBoID0gc3RhdGUuZmlyc3RHbHlwaEZvckNoYXJhY3Rlcihp
ICogMik7Ci0gICAgICAgIGlmIChnbHlwaCkgewotICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRy
dWU7Ci0gICAgICAgICAgICBwYWdlLT5zZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBn
bHlwaCwgZm9udERhdGEpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIC8vIENsZWFyIGJv
dGggZ2x5cGggYW5kIGZvbnREYXRhIGZpZWxkcy4KLSAgICAgICAgICAgIHBhZ2UtPnNldEdseXBo
RGF0YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOwotICAgIH0KLSAgICByZXR1cm4gaGF2ZUds
eXBoczsKLX0KLQotLy8gV2UncmUgc3VwcG9zZWQgdG8gcmV0dXJuIHRydWUgaWYgdGhlcmUgYXJl
IGFueSBnbHlwaHMgaW4gdGhlIHJhbmdlCi0vLyBzcGVjaWZpZWQgYnkgfG9mZnNldHwgYW5kIHxs
ZW5ndGh8IGluICBvdXIgZm9udCwKLS8vIGZhbHNlIGlmIHRoZXJlIGFyZSBub25lLgotYm9vbCBH
bHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBj
aGFyYWN0ZXJCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBidWZmZXJMZW5n
dGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKLXsKLSAgICAvLyBXZSBoYXZlIHRv
IGhhbmRsZSBCTVAgYW5kIG5vbi1CTVAgY2hhcmFjdGVycyBkaWZmZXJlbnRseS4KLSAgICAvLyBG
SVhNRTogQWRkIGFzc2VydGlvbnMgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzIGVudGlyZWx5
IGluIEJNUAotICAgIC8vIG9yIGVudGlyZWx5IGluIG5vbi1CTVAuIAotICAgIGlmIChidWZmZXJM
ZW5ndGggPT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmlsbEJNUEdseXBocyhvZmZzZXQsIGxl
bmd0aCwgY2hhcmFjdGVyQnVmZmVyLCB0aGlzLCBmb250RGF0YSk7Ci0KLSAgICBpZiAoYnVmZmVy
TGVuZ3RoID09IDIgKiBsZW5ndGgpIHsKLSAgICAgICAgLy8gQSBub24tQk1QIGlucHV0IGJ1ZmZl
ciB3aWxsIGJlIHR3aWNlIGFzIGxvbmcgYXMgb3V0cHV0IGdseXBoIGJ1ZmZlcgotICAgICAgICAv
LyBiZWNhdXNlIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBub24tQk1QIGlucHV0IGJ1ZmZlciB3aWxs
IGJlIAotICAgICAgICAvLyByZXByZXNlbnRlZCBieSBhIHN1cnJvZ2F0ZSBwYWlyICh0d28gVUNo
YXIncykuCi0gICAgICAgIHJldHVybiBmaWxsTm9uQk1QR2x5cGhzKG9mZnNldCwgbGVuZ3RoLCBj
aGFyYWN0ZXJCdWZmZXIsIHRoaXMsIGZvbnREYXRhKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFw
aGljc0xheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTE4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0v
KiogRklYTUUKLSAqIFRoaXMgZmlsZSBib3Jyb3dzIGNvZGUgaGVhdmlseSBmcm9tIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyQ0FDRi5jcHAKLSAqIChhbmQgaGVuY2UgaXQgaW5j
bHVkZXMgYm90aCBjb3B5cmlnaHRzKQotICogSWRlYWxseSB0aGUgY29tbW9uIGNvZGUgKG1vc3Rs
eSB0aGUgY29kZSB0aGF0IGtlZXBzIHRyYWNrIG9mIHRoZSBsYXllciBoaWVyYXJjaHkpCi0gKiBz
aG91bGQgYmUga2VwdCBzZXBhcmF0ZSBhbmQgc2hhcmVkIGJldHdlZW4gcGxhdGZvcm1zLiBJdCB3
b3VsZCBiZSBhIHdlbGwgd29ydGh3aGlsZQotICogZWZmb3J0IG9uY2UgdGhlIFdpbmRvd3MgaW1w
bGVtZW50YXRpb24gKGJpbmFyaWVzIGFuZCBoZWFkZXJzKSBvZiBDb3JlQW5pbWF0aW9uIGlzCi0g
KiBjaGVja2VkIGluIHRvIHRoZSBXZWJLaXQgcmVwb3NpdG9yeS4gVW50aWwgdGhlbiBvbmx5IEFw
cGxlIGNhbiBtYWtlIHRoaXMgaGFwcGVuLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5oIgotCi0jaW5jbHVkZSAiQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmgiCi0j
aW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllckZhY3Rvcnku
aCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1lbW9yeUlu
c3RydW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCi0jaW5jbHVkZSAi
U2tJbWFnZUZpbHRlci5oIgotI2luY2x1ZGUgIlNrTWF0cml4NDQuaCIKLSNpbmNsdWRlICJTa2lh
SW1hZ2VGaWx0ZXJCdWlsZGVyLmgiCi0jaW5jbHVkZSAiU3lzdGVtVGltZS5oIgotI2luY2x1ZGUg
IlRyYW5zZm9ybVNrTWF0cml4NDRDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPHB1YmxpYy9QbGF0
Zm9ybS5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJBbmltYXRpb24uaD4KLSNpbmNsdWRlIDxwdWJs
aWMvV2ViQ29tcG9zaXRvclN1cHBvcnQuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViQ29udGVudExh
eWVyLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbi5oPgotI2luY2x1ZGUg
PHB1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb25zLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYkZsb2F0
UG9pbnQuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViRmxvYXRSZWN0Lmg+Ci0jaW5jbHVkZSA8cHVi
bGljL1dlYkltYWdlTGF5ZXIuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViU2l6ZS5oPgotI2luY2x1
ZGUgPHB1YmxpYy9XZWJTb2xpZENvbG9yTGF5ZXIuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0
cnVtZW50YXRpb25IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBz
dGQ7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBh
c3NPd25QdHI8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5
ZXJGYWN0b3J5KiBmYWN0b3J5LCBHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCi17Ci0gICAg
cmV0dXJuIGZhY3RvcnktPmNyZWF0ZUdyYXBoaWNzTGF5ZXIoY2xpZW50KTsKLX0KLQotUGFzc093
blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckNs
aWVudCogY2xpZW50KQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi1HcmFwaGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1
bShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCi0gICAgOiBHcmFwaGljc0xheWVyKGNsaWVu
dCkKLSAgICAsIG1fY29udGVudHNMYXllcigwKQotICAgICwgbV9jb250ZW50c0xheWVySWQoMCkK
LSAgICAsIG1fbGlua0hpZ2hsaWdodCgwKQotICAgICwgbV9jb250ZW50c0xheWVyUHVycG9zZShO
b0NvbnRlbnRzTGF5ZXIpCi0gICAgLCBtX2luU2V0Q2hpbGRyZW4oZmFsc2UpCi0gICAgLCBtX3Nj
cm9sbGFibGVBcmVhKDApCi17Ci0gICAgbV9vcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJE
ZWxlZ2F0ZSA9IGFkb3B0UHRyKG5ldyBPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxl
Z2F0ZSh0aGlzKSk7Ci0gICAgbV9sYXllciA9IGFkb3B0UHRyKFBsYXRmb3JtOjpjdXJyZW50KCkt
PmNvbXBvc2l0b3JTdXBwb3J0KCktPmNyZWF0ZUNvbnRlbnRMYXllcihtX29wYXF1ZVJlY3RUcmFj
a2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmdldCgpKSk7Ci0gICAgbV9sYXllci0+bGF5ZXIoKS0+
c2V0RHJhd3NDb250ZW50KG1fZHJhd3NDb250ZW50ICYmIG1fY29udGVudHNWaXNpYmxlKTsKLSAg
ICBtX2xheWVyLT5sYXllcigpLT5zZXRTY3JvbGxDbGllbnQodGhpcyk7Ci0gICAgbV9sYXllci0+
c2V0QXV0b21hdGljYWxseUNvbXB1dGVSYXN0ZXJTY2FsZSh0cnVlKTsKLX0KLQotR3JhcGhpY3NM
YXllckNocm9taXVtOjp+R3JhcGhpY3NMYXllckNocm9taXVtKCkKLXsKLSAgICB3aWxsQmVEZXN0
cm95ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OndpbGxCZURlc3Ryb3ll
ZCgpCi17Ci0gICAgaWYgKG1fbGlua0hpZ2hsaWdodCkgewotICAgICAgICBtX2xpbmtIaWdobGln
aHQtPmNsZWFyQ3VycmVudEdyYXBoaWNzTGF5ZXIoKTsKLSAgICAgICAgbV9saW5rSGlnaGxpZ2h0
ID0gMDsKLSAgICB9Ci0KLSAgICBHcmFwaGljc0xheWVyOjp3aWxsQmVEZXN0cm95ZWQoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE5hbWUoY29uc3QgU3RyaW5nJiBpbk5h
bWUpCi17Ci0gICAgbV9uYW1lQmFzZSA9IGluTmFtZTsKLSAgICBTdHJpbmcgbmFtZSA9IFN0cmlu
Zzo6Zm9ybWF0KCJHcmFwaGljc0xheWVyKCVwKSAiLCB0aGlzKSArIGluTmFtZTsKLSAgICBHcmFw
aGljc0xheWVyOjpzZXROYW1lKG5hbWUpOwotICAgIHVwZGF0ZU5hbWVzKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVOYW1lcygpCi17Ci0gICAgU3RyaW5nIGRlYnVn
TmFtZSA9ICJMYXllciBmb3IgIiArIG1fbmFtZUJhc2U7Ci0gICAgbV9sYXllci0+bGF5ZXIoKS0+
c2V0RGVidWdOYW1lKGRlYnVnTmFtZSk7Ci0KLSAgICBpZiAobV90cmFuc2Zvcm1MYXllcikgewot
ICAgICAgICBTdHJpbmcgZGVidWdOYW1lID0gIlRyYW5zZm9ybUxheWVyIGZvciAiICsgbV9uYW1l
QmFzZTsKLSAgICAgICAgbV90cmFuc2Zvcm1MYXllci0+c2V0RGVidWdOYW1lKGRlYnVnTmFtZSk7
Ci0gICAgfQotICAgIGlmIChXZWJMYXllciogY29udGVudHNMYXllciA9IGNvbnRlbnRzTGF5ZXJJ
ZlJlZ2lzdGVyZWQoKSkgewotICAgICAgICBTdHJpbmcgZGVidWdOYW1lID0gIkNvbnRlbnRzTGF5
ZXIgZm9yICIgKyBtX25hbWVCYXNlOwotICAgICAgICBjb250ZW50c0xheWVyLT5zZXREZWJ1Z05h
bWUoZGVidWdOYW1lKTsKLSAgICB9Ci0gICAgaWYgKG1fbGlua0hpZ2hsaWdodCkgewotICAgICAg
ICBTdHJpbmcgZGVidWdOYW1lID0gIkxpbmtIaWdobGlnaHQgZm9yICIgKyBtX25hbWVCYXNlOwot
ICAgICAgICBtX2xpbmtIaWdobGlnaHQtPmxheWVyKCktPnNldERlYnVnTmFtZShkZWJ1Z05hbWUp
OwotICAgIH0KLX0KLQotYm9vbCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENoaWxkcmVuKGNv
bnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQotewotICAgIG1faW5TZXRDaGls
ZHJlbiA9IHRydWU7Ci0gICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQgPSBHcmFwaGljc0xheWVyOjpz
ZXRDaGlsZHJlbihjaGlsZHJlbik7Ci0KLSAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkKQotICAgICAg
ICB1cGRhdGVDaGlsZExpc3QoKTsKLSAgICBtX2luU2V0Q2hpbGRyZW4gPSBmYWxzZTsKLQotICAg
IHJldHVybiBjaGlsZHJlbkNoYW5nZWQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVt
OjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBjaGlsZExheWVyKQotewotICAgIEdyYXBoaWNzTGF5
ZXI6OmFkZENoaWxkKGNoaWxkTGF5ZXIpOwotICAgIGlmICghbV9pblNldENoaWxkcmVuKQotICAg
ICAgICB1cGRhdGVDaGlsZExpc3QoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OmFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBjaGlsZExheWVyLCBpbnQgaW5kZXgpCi17
Ci0gICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KGNoaWxkTGF5ZXIsIGluZGV4KTsK
LSAgICB1cGRhdGVDaGlsZExpc3QoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OmFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciogY2hpbGRMYXllciwgR3JhcGhpY3NMYXllciog
c2libGluZykKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGNoaWxkTGF5ZXIs
IHNpYmxpbmcpOwotICAgIHVwZGF0ZUNoaWxkTGlzdCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBjaGlsZExheWVyLCBHcmFw
aGljc0xheWVyICpzaWJsaW5nKQotewotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUo
Y2hpbGRMYXllciwgc2libGluZyk7Ci0gICAgdXBkYXRlQ2hpbGRMaXN0KCk7Ci19Ci0KLWJvb2wg
R3JhcGhpY3NMYXllckNocm9taXVtOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hp
bGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKQotewotICAgIGlmIChHcmFwaGljc0xheWVyOjpy
ZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKSkgewotICAgICAgICB1cGRhdGVDaGlsZExp
c3QoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlbW92ZUZyb21QYXJlbnQoKQotewotICAg
IEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBwbGF0Zm9ybUxheWVyKCkt
PnJlbW92ZUZyb21QYXJlbnQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNl
dFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQotewotICAgIEdyYXBoaWNzTGF5ZXI6
OnNldFBvc2l0aW9uKHBvaW50KTsKLSAgICB1cGRhdGVMYXllclBvc2l0aW9uKCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50
M0QmIHBvaW50KQotewotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KHBvaW50KTsK
LSAgICB1cGRhdGVBbmNob3JQb2ludCgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bTo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgLy8gV2UgYXJlIHJlY2Vp
dmluZyBuZWdhdGl2ZSBzaXplcyBoZXJlIHRoYXQgY2F1c2UgYXNzZXJ0aW9ucyB0byBmYWlsIGlu
IHRoZSBjb21wb3NpdG9yLiBDbGFtcCB0aGVtIHRvIDAgdG8KLSAgICAvLyBhdm9pZCB0aG9zZSBh
c3NlcnRpb25zLgotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhbiBBU1NFUlQgaW5zdGVh
ZCwgYXMgbmVnYXRpdmUgc2l6ZXMgc2hvdWxkIG5vdCBleGlzdCBpbiBXZWJDb3JlLgotICAgIEZs
b2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IHNpemU7Ci0gICAgaWYgKGNsYW1wZWRTaXplLndpZHRoKCkg
PCAwIHx8IGNsYW1wZWRTaXplLmhlaWdodCgpIDwgMCkKLSAgICAgICAgY2xhbXBlZFNpemUgPSBG
bG9hdFNpemUoKTsKLQotICAgIGlmIChjbGFtcGVkU2l6ZSA9PSBtX3NpemUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoY2xhbXBlZFNpemUpOwotICAgIHVw
ZGF0ZUxheWVyU2l6ZSgpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0VHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCi17Ci0gICAgR3Jh
cGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgdXBkYXRlVHJhbnNmb3Jt
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDaGlsZHJlblRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQotewotICAgIEdyYXBoaWNz
TGF5ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgdXBkYXRlQ2hpbGRy
ZW5UcmFuc2Zvcm0oKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldFByZXNl
cnZlczNEKGJvb2wgcHJlc2VydmVzM0QpCi17Ci0gICAgaWYgKHByZXNlcnZlczNEID09IG1fcHJl
c2VydmVzM0QpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFByZXNl
cnZlczNEKHByZXNlcnZlczNEKTsKLSAgICB1cGRhdGVMYXllclByZXNlcnZlczNEKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgbWFza3NU
b0JvdW5kcykKLXsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKG1hc2tzVG9C
b3VuZHMpOwotICAgIHVwZGF0ZU1hc2tzVG9Cb3VuZHMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkKLXsKLSAgICAv
LyBOb3RlIGNhcmVmdWxseSB0aGlzIGVhcmx5LWV4aXQgaXMgb25seSBjb3JyZWN0IGJlY2F1c2Ug
d2UgYWxzbyBwcm9wZXJseSBjYWxsCi0gICAgLy8gV2ViTGF5ZXI6OnNldERyYXdzQ29udGVudCB3
aGVuZXZlciBtX2NvbnRlbnRzTGF5ZXIgaXMgc2V0IHRvIGEgbmV3IGxheWVyIGluIHNldHVwQ29u
dGVudHNMYXllcigpLgotICAgIGlmIChkcmF3c0NvbnRlbnQgPT0gbV9kcmF3c0NvbnRlbnQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudChkcmF3
c0NvbnRlbnQpOwotICAgIHVwZGF0ZUxheWVySXNEcmF3YWJsZSgpOwotfQotCi12b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNWaXNpYmxlKGJvb2wgY29udGVudHNWaXNpYmxl
KQotewotICAgIC8vIE5vdGUgY2FyZWZ1bGx5IHRoaXMgZWFybHktZXhpdCBpcyBvbmx5IGNvcnJl
Y3QgYmVjYXVzZSB3ZSBhbHNvIHByb3Blcmx5IGNhbGwKLSAgICAvLyBXZWJMYXllcjo6c2V0RHJh
d3NDb250ZW50IHdoZW5ldmVyIG1fY29udGVudHNMYXllciBpcyBzZXQgdG8gYSBuZXcgbGF5ZXIg
aW4gc2V0dXBDb250ZW50c0xheWVyKCkuCi0gICAgaWYgKGNvbnRlbnRzVmlzaWJsZSA9PSBtX2Nv
bnRlbnRzVmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNWaXNpYmxlKGNvbnRlbnRzVmlzaWJsZSk7Ci0gICAgdXBkYXRlTGF5ZXJJc0RyYXdh
YmxlKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNrZ3JvdW5kQ29s
b3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlmIChjb2xvciA9PSBtX2JhY2tncm91bmRD
b2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2dyb3Vu
ZENvbG9yKGNvbG9yKTsKLSAgICB1cGRhdGVMYXllckJhY2tncm91bmRDb2xvcigpOwotfQotCi12
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCBvcGFxdWUp
Ci17Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUob3BhcXVlKTsKLSAgICBt
X2xheWVyLT5sYXllcigpLT5zZXRPcGFxdWUobV9jb250ZW50c09wYXF1ZSk7Ci0gICAgbV9vcGFx
dWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS0+c2V0T3BhcXVlKG1fY29udGVudHNP
cGFxdWUpOwotfQotCi1zdGF0aWMgYm9vbCBjb3B5V2ViQ29yZUZpbHRlck9wZXJhdGlvbnNUb1dl
YkZpbHRlck9wZXJhdGlvbnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgV2ViRmls
dGVyT3BlcmF0aW9ucyYgd2ViRmlsdGVycykKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBv
cCA9ICpmaWx0ZXJzLmF0KGkpOwotICAgICAgICBzd2l0Y2ggKG9wLmdldE9wZXJhdGlvblR5cGUo
KSkgewotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBOb3Qgc3VwcG9ydGVkLgotICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6
Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPigmb3Ap
LT5hbW91bnQoKTsKLSAgICAgICAgICAgIHN3aXRjaCAob3AuZ2V0T3BlcmF0aW9uVHlwZSgpKSB7
Ci0gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgICAgICAg
ICAgICAgIHdlYkZpbHRlcnMuYXBwZW5kKFdlYkZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlR3JheXNj
YWxlRmlsdGVyKGFtb3VudCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAgICAgICAgICAgICAgIHdlYkZpbHRlcnMu
YXBwZW5kKFdlYkZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlU2VwaWFGaWx0ZXIoYW1vdW50KSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0FUVVJBVEU6Ci0gICAgICAgICAgICAgICAgd2ViRmlsdGVycy5hcHBlbmQoV2ViRmlsdGVyT3Bl
cmF0aW9uOjpjcmVhdGVTYXR1cmF0ZUZpbHRlcihhbW91bnQpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAg
ICAgICAgICAgICAgIHdlYkZpbHRlcnMuYXBwZW5kKFdlYkZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
SHVlUm90YXRlRmlsdGVyKGFtb3VudCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpP
UEFDSVRZOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7Ci0gICAgICAgICAgICBmbG9hdCBh
bW91bnQgPSBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uKj4oJm9wKS0+YW1vdW50KCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG9wLmdldE9wZXJh
dGlvblR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoK
LSAgICAgICAgICAgICAgICB3ZWJGaWx0ZXJzLmFwcGVuZChXZWJGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZUludmVydEZpbHRlcihhbW91bnQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICAgICAgICAgIHdl
YkZpbHRlcnMuYXBwZW5kKFdlYkZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlT3BhY2l0eUZpbHRlcihh
bW91bnQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpCUklHSFRORVNTOgotICAgICAgICAgICAgICAgIHdlYkZpbHRlcnMuYXBwZW5k
KFdlYkZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlQnJpZ2h0bmVzc0ZpbHRlcihhbW91bnQpKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpD
T05UUkFTVDoKLSAgICAgICAgICAgICAgICB3ZWJGaWx0ZXJzLmFwcGVuZChXZWJGaWx0ZXJPcGVy
YXRpb246OmNyZWF0ZUNvbnRyYXN0RmlsdGVyKGFtb3VudCkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7Ci0gICAgICAgICAgICBmbG9hdCBw
aXhlbFJhZGl1cyA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24qPigmb3Ap
LT5zdGREZXZpYXRpb24oKS5nZXRGbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICB3ZWJGaWx0ZXJz
LmFwcGVuZChXZWJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZUJsdXJGaWx0ZXIocGl4ZWxSYWRpdXMp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpEUk9QX1NIQURPVzogewotICAgICAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRl
ck9wZXJhdGlvbiYgZHJvcFNoYWRvd09wID0gKnN0YXRpY19jYXN0PGNvbnN0IERyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb24qPigmb3ApOwotICAgICAgICAgICAgd2ViRmlsdGVycy5hcHBlbmQoV2Vi
RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGVEcm9wU2hhZG93RmlsdGVyKFdlYlBvaW50KGRyb3BTaGFk
b3dPcC54KCksIGRyb3BTaGFkb3dPcC55KCkpLCBkcm9wU2hhZG93T3Auc3RkRGV2aWF0aW9uKCks
IGRyb3BTaGFkb3dPcC5jb2xvcigpLnJnYigpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkNVU1RPTToKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlZBTElEQVRFRF9DVVNU
T006Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBzdXBwb3J0ZWQuCi0jZW5kaWYK
LSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlBBU1NUSFJPVUdIOgotICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6Tk9ORToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIC8vIEZJ
WE1FOiBGb3Igbm93LCB3ZSBvbmx5IHVzZSBTa0ltYWdlRmlsdGVycyBpZiB0aGVyZSBpcyBhIHJl
ZmVyZW5jZQotICAgIC8vIGZpbHRlciBpbiB0aGUgY2hhaW4uIE9uY2UgYWxsIGlzc3VlcyBoYXZl
IGJlZW4gaXJvbmVkIG91dCwgd2Ugc2hvdWxkCi0gICAgLy8gc3dpdGNoIGFsbCBmaWx0ZXJpbmcg
b3ZlciB0byB0aGlzIHBhdGgsIGFuZCByZW1vdmUgc2V0RmlsdGVycygpIGFuZAotICAgIC8vIFdl
YkZpbHRlck9wZXJhdGlvbnMgYWx0b2dldGhlci4KLSAgICBpZiAoZmlsdGVycy5oYXNSZWZlcmVu
Y2VGaWx0ZXIoKSkgewotICAgICAgICBpZiAoZmlsdGVycy5oYXNDdXN0b21GaWx0ZXIoKSkgewot
ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBmaWx0ZXJzIGFyZSByZW1vdmVkIGZyb20gdGhl
IHBsYXRmb3JtIGxheWVyLCBhcyB0aGV5IGFyZQotICAgICAgICAgICAgLy8gZ29pbmcgdG8gZmFs
bGJhY2sgdG8gc29mdHdhcmUgbW9kZS4KLSAgICAgICAgICAgIG1fbGF5ZXItPmxheWVyKCktPnNl
dEZpbHRlcigwKTsKLSAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMoRmlsdGVy
T3BlcmF0aW9ucygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICBTa2lhSW1hZ2VGaWx0ZXJCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgIFNrQXV0b1RVbnJl
ZjxTa0ltYWdlRmlsdGVyPiBpbWFnZUZpbHRlcihidWlsZGVyLmJ1aWxkKGZpbHRlcnMpKTsKLSAg
ICAgICAgbV9sYXllci0+bGF5ZXIoKS0+c2V0RmlsdGVyKGltYWdlRmlsdGVyKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBXZWJGaWx0ZXJPcGVyYXRpb25zIHdlYkZpbHRlcnM7Ci0gICAgICAgIGlm
ICghY29weVdlYkNvcmVGaWx0ZXJPcGVyYXRpb25zVG9XZWJGaWx0ZXJPcGVyYXRpb25zKGZpbHRl
cnMsIHdlYkZpbHRlcnMpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGZpbHRlcnMg
YXJlIHJlbW92ZWQgZnJvbSB0aGUgcGxhdGZvcm0gbGF5ZXIsIGFzIHRoZXkgYXJlCi0gICAgICAg
ICAgICAvLyBnb2luZyB0byBmYWxsYmFjayB0byBzb2Z0d2FyZSBtb2RlLgotICAgICAgICAgICAg
bV9sYXllci0+bGF5ZXIoKS0+c2V0RmlsdGVycyhXZWJGaWx0ZXJPcGVyYXRpb25zKCkpOwotICAg
ICAgICAgICAgR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhGaWx0ZXJPcGVyYXRpb25zKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1fbGF5ZXItPmxh
eWVyKCktPnNldEZpbHRlcnMod2ViRmlsdGVycyk7Ci0gICAgfQotICAgIHJldHVybiBHcmFwaGlj
c0xheWVyOjpzZXRGaWx0ZXJzKGZpbHRlcnMpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6c2V0QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVy
cykKLXsKLSAgICBXZWJGaWx0ZXJPcGVyYXRpb25zIHdlYkZpbHRlcnM7Ci0gICAgaWYgKCFjb3B5
V2ViQ29yZUZpbHRlck9wZXJhdGlvbnNUb1dlYkZpbHRlck9wZXJhdGlvbnMoZmlsdGVycywgd2Vi
RmlsdGVycykpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2xheWVyLT5sYXllcigpLT5zZXRCYWNr
Z3JvdW5kRmlsdGVycyh3ZWJGaWx0ZXJzKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiBtYXNrTGF5ZXIpCi17Ci0gICAgaWYgKG1h
c2tMYXllciA9PSBtX21hc2tMYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NM
YXllcjo6c2V0TWFza0xheWVyKG1hc2tMYXllcik7Ci0KLSAgICBXZWJMYXllciogbWFza1dlYkxh
eWVyID0gbV9tYXNrTGF5ZXIgPyBtX21hc2tMYXllci0+cGxhdGZvcm1MYXllcigpIDogMDsKLSAg
ICBtX2xheWVyLT5sYXllcigpLT5zZXRNYXNrTGF5ZXIobWFza1dlYkxheWVyKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIHZpc2li
bGUpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KHZpc2libGUp
OwotICAgIG1fbGF5ZXItPnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKLX0K
LQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkK
LXsKLSAgICBmbG9hdCBjbGFtcGVkT3BhY2l0eSA9IG1heChtaW4ob3BhY2l0eSwgMS4wZiksIDAu
MGYpOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoY2xhbXBlZE9wYWNpdHkpOwotICAg
IHBsYXRmb3JtTGF5ZXIoKS0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0xheWVyQ2hyb21pdW06OnNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVy
KQotewotICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogbGF5ZXJDaHJvbWl1bSA9IHN0YXRpY19j
YXN0PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSo+KGxheWVyKTsKLSAgICBHcmFwaGljc0xheWVyOjpz
ZXRSZXBsaWNhdGVkQnlMYXllcihsYXllcik7Ci0KLSAgICBXZWJMYXllciogd2ViUmVwbGljYUxh
eWVyID0gbGF5ZXJDaHJvbWl1bSA/IGxheWVyQ2hyb21pdW0tPnBsYXRmb3JtTGF5ZXIoKSA6IDA7
Ci0gICAgcGxhdGZvcm1MYXllcigpLT5zZXRSZXBsaWNhTGF5ZXIod2ViUmVwbGljYUxheWVyKTsK
LX0KLQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNOZWVkc0Rpc3Bs
YXkoKQotewotICAgIGlmIChXZWJMYXllciogY29udGVudHNMYXllciA9IGNvbnRlbnRzTGF5ZXJJ
ZlJlZ2lzdGVyZWQoKSkgewotICAgICAgICBjb250ZW50c0xheWVyLT5pbnZhbGlkYXRlKCk7Ci0g
ICAgICAgIGFkZFJlcGFpbnRSZWN0KGNvbnRlbnRzUmVjdCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoKQotewotICAgIGlmIChkcmF3
c0NvbnRlbnQoKSkgewotICAgICAgICBtX2xheWVyLT5sYXllcigpLT5pbnZhbGlkYXRlKCk7Ci0g
ICAgICAgIGFkZFJlcGFpbnRSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fc2l6ZSkpOwot
ICAgICAgICBpZiAobV9saW5rSGlnaGxpZ2h0KQotICAgICAgICAgICAgbV9saW5rSGlnaGxpZ2h0
LT5pbnZhbGlkYXRlKCk7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAo
ZHJhd3NDb250ZW50KCkpIHsKLSAgICAgICAgbV9sYXllci0+bGF5ZXIoKS0+aW52YWxpZGF0ZVJl
Y3QocmVjdCk7Ci0gICAgICAgIGFkZFJlcGFpbnRSZWN0KHJlY3QpOwotICAgICAgICBpZiAobV9s
aW5rSGlnaGxpZ2h0KQotICAgICAgICAgICAgbV9saW5rSGlnaGxpZ2h0LT5pbnZhbGlkYXRlKCk7
Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHJlY3QgPT0gbV9jb250ZW50c1JlY3Qp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChy
ZWN0KTsKLSAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVy
Q2hyb21pdW06OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCi17Ci0gICAgYm9vbCBj
aGlsZHJlbkNoYW5nZWQgPSBmYWxzZTsKLSAgICBSZWZQdHI8TmF0aXZlSW1hZ2VTa2lhPiBuYXRp
dmVJbWFnZSA9IGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgOiAw
OwotICAgIGlmIChuYXRpdmVJbWFnZSkgewotICAgICAgICBpZiAobV9jb250ZW50c0xheWVyUHVy
cG9zZSAhPSBDb250ZW50c0xheWVyRm9ySW1hZ2UpIHsKLSAgICAgICAgICAgIG1faW1hZ2VMYXll
ciA9IGFkb3B0UHRyKFBsYXRmb3JtOjpjdXJyZW50KCktPmNvbXBvc2l0b3JTdXBwb3J0KCktPmNy
ZWF0ZUltYWdlTGF5ZXIoKSk7Ci0gICAgICAgICAgICByZWdpc3RlckNvbnRlbnRzTGF5ZXIobV9p
bWFnZUxheWVyLT5sYXllcigpKTsKLQotICAgICAgICAgICAgc2V0dXBDb250ZW50c0xheWVyKG1f
aW1hZ2VMYXllci0+bGF5ZXIoKSk7Ci0gICAgICAgICAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3Nl
ID0gQ29udGVudHNMYXllckZvckltYWdlOwotICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBtX2ltYWdlTGF5ZXItPnNldEJpdG1hcChuYXRpdmVJ
bWFnZS0+Yml0bWFwKCkpOwotICAgICAgICBtX2ltYWdlTGF5ZXItPmxheWVyKCktPnNldE9wYXF1
ZShpbWFnZS0+Y3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCkpOwotICAgICAgICB1cGRhdGVD
b250ZW50c1JlY3QoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9pbWFnZUxheWVyKSB7
Ci0gICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVlOwotCi0gICAgICAgICAgICB1bnJl
Z2lzdGVyQ29udGVudHNMYXllcihtX2ltYWdlTGF5ZXItPmxheWVyKCkpOwotICAgICAgICAgICAg
bV9pbWFnZUxheWVyLmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVGhlIG9sZCBjb250
ZW50cyBsYXllciB3aWxsIGJlIHJlbW92ZWQgdmlhIHVwZGF0ZUNoaWxkTGlzdC4KLSAgICAgICAg
bV9jb250ZW50c0xheWVyID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoY2hpbGRyZW5DaGFuZ2VkKQot
ICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21p
dW06OnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBp
ZiAoY29sb3IgPT0gbV9jb250ZW50c1NvbGlkQ29sb3IpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7Ci0KLSAgICBtX2NvbnRlbnRzU29saWRDb2xv
ciA9IGNvbG9yOwotCi0gICAgaWYgKGNvbG9yLmlzVmFsaWQoKSAmJiBjb2xvci5hbHBoYSgpKSB7
Ci0gICAgICAgIGlmICghbV9jb250ZW50c1NvbGlkQ29sb3JMYXllcikgewotICAgICAgICAgICAg
bV9jb250ZW50c1NvbGlkQ29sb3JMYXllciA9IGFkb3B0UHRyKFBsYXRmb3JtOjpjdXJyZW50KCkt
PmNvbXBvc2l0b3JTdXBwb3J0KCktPmNyZWF0ZVNvbGlkQ29sb3JMYXllcigpKTsKLSAgICAgICAg
ICAgIHJlZ2lzdGVyQ29udGVudHNMYXllcihtX2NvbnRlbnRzU29saWRDb2xvckxheWVyLT5sYXll
cigpKTsKLQotICAgICAgICAgICAgc2V0dXBDb250ZW50c0xheWVyKG1fY29udGVudHNTb2xpZENv
bG9yTGF5ZXItPmxheWVyKCkpOwotICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1fY29udGVudHNTb2xpZENvbG9yTGF5ZXItPnNldEJhY2tn
cm91bmRDb2xvcihjb2xvci5yZ2IoKSk7Ci0gICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVjdCgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2NvbnRlbnRzU29saWRDb2xvckxheWVyKSB7Ci0g
ICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgdW5yZWdpc3Rl
ckNvbnRlbnRzTGF5ZXIobV9jb250ZW50c1NvbGlkQ29sb3JMYXllci0+bGF5ZXIoKSk7Ci0gICAg
ICAgICAgICBtX2NvbnRlbnRzU29saWRDb2xvckxheWVyLmNsZWFyKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9jb250ZW50c0xheWVyID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoY2hpbGRyZW5DaGFu
Z2VkKQotICAgICAgICB1cGRhdGVDaGlsZExpc3QoKTsKLQotfQotCi1zdGF0aWMgSGFzaFNldDxp
bnQ+KiBzX3JlZ2lzdGVyZWRMYXllclNldDsKLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OnJlZ2lzdGVyQ29udGVudHNMYXllcihXZWJMYXllciogbGF5ZXIpCi17Ci0gICAgaWYgKCFzX3Jl
Z2lzdGVyZWRMYXllclNldCkKLSAgICAgICAgc19yZWdpc3RlcmVkTGF5ZXJTZXQgPSBuZXcgSGFz
aFNldDxpbnQ+OwotICAgIGlmIChzX3JlZ2lzdGVyZWRMYXllclNldC0+Y29udGFpbnMobGF5ZXIt
PmlkKCkpKQotICAgICAgICBDUkFTSCgpOwotICAgIHNfcmVnaXN0ZXJlZExheWVyU2V0LT5hZGQo
bGF5ZXItPmlkKCkpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dW5yZWdpc3Rl
ckNvbnRlbnRzTGF5ZXIoV2ViTGF5ZXIqIGxheWVyKQotewotICAgIEFTU0VSVChzX3JlZ2lzdGVy
ZWRMYXllclNldCk7Ci0gICAgaWYgKCFzX3JlZ2lzdGVyZWRMYXllclNldC0+Y29udGFpbnMobGF5
ZXItPmlkKCkpKQotICAgICAgICBDUkFTSCgpOwotICAgIHNfcmVnaXN0ZXJlZExheWVyU2V0LT5y
ZW1vdmUobGF5ZXItPmlkKCkpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6Y2xl
YXJDb250ZW50c0xheWVySWZVbnJlZ2lzdGVyZWQoKQotewotICAgIGlmICghbV9jb250ZW50c0xh
eWVySWQgfHwgc19yZWdpc3RlcmVkTGF5ZXJTZXQtPmNvbnRhaW5zKG1fY29udGVudHNMYXllcklk
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZW50c0xheWVyID0gMDsKLSAgICBtX2Nv
bnRlbnRzTGF5ZXJJZCA9IDA7Ci19Ci0KLVdlYkxheWVyKiBHcmFwaGljc0xheWVyQ2hyb21pdW06
OmNvbnRlbnRzTGF5ZXJJZlJlZ2lzdGVyZWQoKQotewotICAgIGNsZWFyQ29udGVudHNMYXllcklm
VW5yZWdpc3RlcmVkKCk7Ci0gICAgcmV0dXJuIG1fY29udGVudHNMYXllcjsKLX0KLQotdm9pZCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciog
bGF5ZXIpCi17Ci0gICAgc2V0Q29udGVudHNUbyhDb250ZW50c0xheWVyRm9yQ2FudmFzLCBsYXll
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvTWVkaWEo
UGxhdGZvcm1MYXllciogbGF5ZXIpCi17Ci0gICAgc2V0Q29udGVudHNUbyhDb250ZW50c0xheWVy
Rm9yVmlkZW8sIGxheWVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENv
bnRlbnRzVG8oQ29udGVudHNMYXllclB1cnBvc2UgcHVycG9zZSwgV2ViTGF5ZXIqIGxheWVyKQot
ewotICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkID0gZmFsc2U7Ci0gICAgaWYgKGxheWVyKSB7Ci0g
ICAgICAgIEFTU0VSVChzX3JlZ2lzdGVyZWRMYXllclNldCk7Ci0gICAgICAgIGlmICghc19yZWdp
c3RlcmVkTGF5ZXJTZXQtPmNvbnRhaW5zKGxheWVyLT5pZCgpKSkKLSAgICAgICAgICAgIENSQVNI
KCk7Ci0gICAgICAgIGlmIChtX2NvbnRlbnRzTGF5ZXJJZCAhPSBsYXllci0+aWQoKSkgewotICAg
ICAgICAgICAgc2V0dXBDb250ZW50c0xheWVyKGxheWVyKTsKLSAgICAgICAgICAgIG1fY29udGVu
dHNMYXllclB1cnBvc2UgPSBwdXJwb3NlOwotICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAobV9jb250ZW50c0xheWVyKSB7Ci0gICAgICAgICAgICBjaGlsZHJl
bkNoYW5nZWQgPSB0cnVlOwotCi0gICAgICAgICAgICAvLyBUaGUgb2xkIGNvbnRlbnRzIGxheWVy
IHdpbGwgYmUgcmVtb3ZlZCB2aWEgdXBkYXRlQ2hpbGRMaXN0LgotICAgICAgICAgICAgbV9jb250
ZW50c0xheWVyID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChjaGlsZHJlbkNoYW5n
ZWQpCi0gICAgICAgIHVwZGF0ZUNoaWxkTGlzdCgpOwotfQotCi1ib29sIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMsIGNv
bnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQotewotICAgIHBsYXRmb3Jt
TGF5ZXIoKS0+c2V0QW5pbWF0aW9uRGVsZWdhdGUodGhpcyk7Ci0KLSAgICBpbnQgYW5pbWF0aW9u
SWQgPSAwOwotCi0gICAgaWYgKG1fYW5pbWF0aW9uSWRNYXAuY29udGFpbnMoYW5pbWF0aW9uTmFt
ZSkpCi0gICAgICAgIGFuaW1hdGlvbklkID0gbV9hbmltYXRpb25JZE1hcC5nZXQoYW5pbWF0aW9u
TmFtZSk7Ci0KLSAgICBPd25QdHI8V2ViQW5pbWF0aW9uPiB0b0FkZChjcmVhdGVXZWJBbmltYXRp
b24odmFsdWVzLCBhbmltYXRpb24sIGFuaW1hdGlvbklkLCB0aW1lT2Zmc2V0LCBib3hTaXplKSk7
Ci0KLSAgICBpZiAodG9BZGQpIHsKLSAgICAgICAgYW5pbWF0aW9uSWQgPSB0b0FkZC0+aWQoKTsK
LSAgICAgICAgbV9hbmltYXRpb25JZE1hcC5zZXQoYW5pbWF0aW9uTmFtZSwgYW5pbWF0aW9uSWQp
OwotCi0gICAgICAgIC8vIFJlbW92ZSBhbnkgZXhpc3RpbmcgYW5pbWF0aW9ucyB3aXRoIHRoZSBz
YW1lIGFuaW1hdGlvbiBpZCBhbmQgdGFyZ2V0IHByb3BlcnR5LgotICAgICAgICBwbGF0Zm9ybUxh
eWVyKCktPnJlbW92ZUFuaW1hdGlvbihhbmltYXRpb25JZCwgdG9BZGQtPnRhcmdldFByb3BlcnR5
KCkpOwotICAgICAgICByZXR1cm4gcGxhdGZvcm1MYXllcigpLT5hZGRBbmltYXRpb24odG9BZGQu
Z2V0KCkpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwg
ZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgaWYgKG1fYW5pbWF0aW9uSWRNYXAuY29udGFpbnMo
YW5pbWF0aW9uTmFtZSkpCi0gICAgICAgIHBsYXRmb3JtTGF5ZXIoKS0+cGF1c2VBbmltYXRpb24o
bV9hbmltYXRpb25JZE1hcC5nZXQoYW5pbWF0aW9uTmFtZSksIHRpbWVPZmZzZXQpOwotfQotCi12
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSkKLXsKLSAgICBpZiAobV9hbmltYXRpb25JZE1hcC5jb250YWlucyhhbmlt
YXRpb25OYW1lKSkKLSAgICAgICAgcGxhdGZvcm1MYXllcigpLT5yZW1vdmVBbmltYXRpb24obV9h
bmltYXRpb25JZE1hcC5nZXQoYW5pbWF0aW9uTmFtZSkpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6c3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHdhbGxDbG9ja1RpbWUpCi17Ci0g
ICAgLy8gfHdhbGxDbG9ja1RpbWV8IGlzIGluIHRoZSB3cm9uZyB0aW1lIGJhc2UuIE5lZWQgdG8g
Y29udmVydCBoZXJlLgotICAgIC8vIEZJWE1FOiBmaW5kIGEgbW9yZSByZWxpYWJsZSB3YXkgdG8g
ZG8gdGhpcy4KLSAgICBkb3VibGUgbW9ub3RvbmljVGltZSA9IHdhbGxDbG9ja1RpbWUgKyBtb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIGN1cnJlbnRUaW1lKCk7Ci0gICAgcGxhdGZvcm1M
YXllcigpLT5zdXNwZW5kQW5pbWF0aW9ucyhtb25vdG9uaWNUaW1lKTsKLX0KLQotdm9pZCBHcmFw
aGljc0xheWVyQ2hyb21pdW06OnJlc3VtZUFuaW1hdGlvbnMoKQotewotICAgIHBsYXRmb3JtTGF5
ZXIoKS0+cmVzdW1lQW5pbWF0aW9ucyhtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRMaW5rSGlnaGxpZ2h0KExpbmtIaWdo
bGlnaHRDbGllbnQqIGxpbmtIaWdobGlnaHQpCi17Ci0gICAgbV9saW5rSGlnaGxpZ2h0ID0gbGlu
a0hpZ2hsaWdodDsKLSAgICB1cGRhdGVDaGlsZExpc3QoKTsKLX0KLQotUGxhdGZvcm1MYXllciog
R3JhcGhpY3NMYXllckNocm9taXVtOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV90cmFuc2Zvcm1MYXllciA/IG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgOiBtX2xheWVyLT5s
YXllcigpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ2hpbGRMaXN0
KCkKLXsKLSAgICBXZWJMYXllciogY2hpbGRIb3N0ID0gbV90cmFuc2Zvcm1MYXllciA/IG1fdHJh
bnNmb3JtTGF5ZXIuZ2V0KCkgOiBtX2xheWVyLT5sYXllcigpOwotICAgIGNoaWxkSG9zdC0+cmVt
b3ZlQWxsQ2hpbGRyZW4oKTsKLQotICAgIGNsZWFyQ29udGVudHNMYXllcklmVW5yZWdpc3RlcmVk
KCk7Ci0KLSAgICBpZiAobV90cmFuc2Zvcm1MYXllcikgewotICAgICAgICAvLyBBZGQgdGhlIHBy
aW1hcnkgbGF5ZXIgZmlyc3QuIEV2ZW4gaWYgd2UgaGF2ZSBuZWdhdGl2ZSB6LW9yZGVyIGNoaWxk
cmVuLCB0aGUgcHJpbWFyeSBsYXllciBhbHdheXMgY29tZXMgYmVoaW5kLgotICAgICAgICBjaGls
ZEhvc3QtPmFkZENoaWxkKG1fbGF5ZXItPmxheWVyKCkpOwotICAgIH0gZWxzZSBpZiAobV9jb250
ZW50c0xheWVyKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBhZGQgdGhlIGNvbnRlbnRzIGxheWVyIGlu
IHRoZSBjb3JyZWN0IG9yZGVyIHdpdGggbmVnYXRpdmUgei1vcmRlciBjaGlsZHJlbi4KLSAgICAg
ICAgLy8gVGhpcyBkb2VzIG5vdCBjYXVzZSB2aXNpYmxlIHJlbmRlcmluZyBpc3N1ZXMgYmVjYXVz
ZSBjdXJyZW50bHkgY29udGVudHMgbGF5ZXJzIGFyZSBvbmx5IHVzZWQKLSAgICAgICAgLy8gZm9y
IHJlcGxhY2VkIGVsZW1lbnRzIHRoYXQgZG9uJ3QgaGF2ZSBjaGlsZHJlbi4KLSAgICAgICAgY2hp
bGRIb3N0LT5hZGRDaGlsZChtX2NvbnRlbnRzTGF5ZXIpOwotICAgIH0KLQotICAgIGNvbnN0IFZl
Y3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGF5ZXJzID0gY2hpbGRyZW4oKTsKLSAgICBzaXpl
X3QgbnVtQ2hpbGRyZW4gPSBjaGlsZExheWVycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1DaGlsZHJlbjsgKytpKSB7Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSogY3VyQ2hpbGQgPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0qPihjaGlsZExh
eWVyc1tpXSk7Ci0KLSAgICAgICAgY2hpbGRIb3N0LT5hZGRDaGlsZChjdXJDaGlsZC0+cGxhdGZv
cm1MYXllcigpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9saW5rSGlnaGxpZ2h0KQotICAgICAgICBj
aGlsZEhvc3QtPmFkZENoaWxkKG1fbGlua0hpZ2hsaWdodC0+bGF5ZXIoKSk7Ci0KLSAgICBpZiAo
bV90cmFuc2Zvcm1MYXllciAmJiBtX2NvbnRlbnRzTGF5ZXIpIHsKLSAgICAgICAgLy8gSWYgd2Ug
aGF2ZSBhIHRyYW5zZm9ybSBsYXllciwgdGhlbiB0aGUgY29udGVudHMgbGF5ZXIgaXMgcGFyZW50
ZWQgaW4gdGhlCi0gICAgICAgIC8vIHByaW1hcnkgbGF5ZXIgKHdoaWNoIGlzIGl0c2VsZiBhIGNo
aWxkIG9mIHRoZSB0cmFuc2Zvcm0gbGF5ZXIpLgotICAgICAgICBtX2xheWVyLT5sYXllcigpLT5y
ZW1vdmVBbGxDaGlsZHJlbigpOwotICAgICAgICBtX2xheWVyLT5sYXllcigpLT5hZGRDaGlsZCht
X2NvbnRlbnRzTGF5ZXIpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OnVwZGF0ZUxheWVyUG9zaXRpb24oKQotewotICAgIHBsYXRmb3JtTGF5ZXIoKS0+c2V0UG9zaXRp
b24obV9wb3NpdGlvbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVM
YXllclNpemUoKQotewotICAgIEludFNpemUgbGF5ZXJTaXplKG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3RyYW5zZm9ybUxheWVyKSB7Ci0gICAgICAgIG1fdHJh
bnNmb3JtTGF5ZXItPnNldEJvdW5kcyhsYXllclNpemUpOwotICAgICAgICBtX2xheWVyLT5sYXll
cigpLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KCkpOwotICAgIH0KLQotICAgIG1fbGF5ZXItPmxh
eWVyKCktPnNldEJvdW5kcyhsYXllclNpemUpOwotCi0gICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0
IHJlc2l6ZSBtX2NvbnRlbnRzTGF5ZXItPiBJdCdzIHVwIHRoZSBjYWxsZXIgdG8gZG8gdGhhdC4K
LX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUFuY2hvclBvaW50KCkKLXsK
LSAgICBwbGF0Zm9ybUxheWVyKCktPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQobV9hbmNob3JQ
b2ludC54KCksIG1fYW5jaG9yUG9pbnQueSgpKSk7Ci0gICAgcGxhdGZvcm1MYXllcigpLT5zZXRB
bmNob3JQb2ludFoobV9hbmNob3JQb2ludC56KCkpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlVHJhbnNmb3JtKCkKLXsKLSAgICBwbGF0Zm9ybUxheWVyKCktPnNldFRy
YW5zZm9ybShUcmFuc2Zvcm1Ta01hdHJpeDQ0Q29udmVyc2lvbnM6OmNvbnZlcnQobV90cmFuc2Zv
cm0pKTsKLX0KLQotdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNoaWxkcmVuVHJh
bnNmb3JtKCkKLXsKLSAgICBwbGF0Zm9ybUxheWVyKCktPnNldFN1YmxheWVyVHJhbnNmb3JtKFRy
YW5zZm9ybVNrTWF0cml4NDRDb252ZXJzaW9uczo6Y29udmVydChtX2NoaWxkcmVuVHJhbnNmb3Jt
KSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVNYXNrc1RvQm91bmRz
KCkKLXsKLSAgICBtX2xheWVyLT5sYXllcigpLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0Jv
dW5kcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclByZXNl
cnZlczNEKCkKLXsKLSAgICBpZiAobV9wcmVzZXJ2ZXMzRCAmJiAhbV90cmFuc2Zvcm1MYXllcikg
ewotICAgICAgICBtX3RyYW5zZm9ybUxheWVyID0gYWRvcHRQdHIoUGxhdGZvcm06OmN1cnJlbnQo
KS0+Y29tcG9zaXRvclN1cHBvcnQoKS0+Y3JlYXRlTGF5ZXIoKSk7Ci0gICAgICAgIG1fdHJhbnNm
b3JtTGF5ZXItPnNldFByZXNlcnZlczNEKHRydWUpOwotICAgICAgICBtX3RyYW5zZm9ybUxheWVy
LT5zZXRBbmltYXRpb25EZWxlZ2F0ZSh0aGlzKTsKLSAgICAgICAgbV9sYXllci0+bGF5ZXIoKS0+
dHJhbnNmZXJBbmltYXRpb25zVG8obV90cmFuc2Zvcm1MYXllci5nZXQoKSk7Ci0KLSAgICAgICAg
Ly8gQ29weSB0aGUgcG9zaXRpb24gZnJvbSB0aGlzIGxheWVyLgotICAgICAgICB1cGRhdGVMYXll
clBvc2l0aW9uKCk7Ci0gICAgICAgIHVwZGF0ZUxheWVyU2l6ZSgpOwotICAgICAgICB1cGRhdGVB
bmNob3JQb2ludCgpOwotICAgICAgICB1cGRhdGVUcmFuc2Zvcm0oKTsKLSAgICAgICAgdXBkYXRl
Q2hpbGRyZW5UcmFuc2Zvcm0oKTsKLQotICAgICAgICBtX2xheWVyLT5sYXllcigpLT5zZXRQb3Np
dGlvbihGbG9hdFBvaW50Ojp6ZXJvKCkpOwotCi0gICAgICAgIG1fbGF5ZXItPmxheWVyKCktPnNl
dEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMC41ZiwgMC41ZikpOwotICAgICAgICBtX2xheWVyLT5s
YXllcigpLT5zZXRUcmFuc2Zvcm0oU2tNYXRyaXg0NDo6SSgpKTsKLQotICAgICAgICAvLyBTZXQg
dGhlIG9sZCBsYXllciB0byBvcGFjaXR5IG9mIDEuIEZ1cnRoZXIgZG93biB3ZSB3aWxsIHNldCB0
aGUgb3BhY2l0eSBvbiB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAgICBtX2xheWVyLT5sYXll
cigpLT5zZXRPcGFjaXR5KDEpOwotCi0gICAgICAgIC8vIE1vdmUgdGhpcyBsYXllciB0byBiZSBh
IGNoaWxkIG9mIHRoZSB0cmFuc2Zvcm0gbGF5ZXIuCi0gICAgICAgIGlmIChwYXJlbnQoKSkKLSAg
ICAgICAgICAgIHBhcmVudCgpLT5wbGF0Zm9ybUxheWVyKCktPnJlcGxhY2VDaGlsZChtX2xheWVy
LT5sYXllcigpLCBtX3RyYW5zZm9ybUxheWVyLmdldCgpKTsKLSAgICAgICAgbV90cmFuc2Zvcm1M
YXllci0+YWRkQ2hpbGQobV9sYXllci0+bGF5ZXIoKSk7Ci0KLSAgICAgICAgdXBkYXRlQ2hpbGRM
aXN0KCk7Ci0gICAgfSBlbHNlIGlmICghbV9wcmVzZXJ2ZXMzRCAmJiBtX3RyYW5zZm9ybUxheWVy
KSB7Ci0gICAgICAgIC8vIFJlcGxhY2UgdGhlIHRyYW5zZm9ybUxheWVyIGluIHRoZSBwYXJlbnQg
d2l0aCB0aGlzIGxheWVyLgotICAgICAgICBtX2xheWVyLT5sYXllcigpLT5yZW1vdmVGcm9tUGFy
ZW50KCk7Ci0gICAgICAgIGlmIChwYXJlbnQoKSkKLSAgICAgICAgICAgIHBhcmVudCgpLT5wbGF0
Zm9ybUxheWVyKCktPnJlcGxhY2VDaGlsZChtX3RyYW5zZm9ybUxheWVyLmdldCgpLCBtX2xheWVy
LT5sYXllcigpKTsKLQotICAgICAgICBtX2xheWVyLT5sYXllcigpLT5zZXRBbmltYXRpb25EZWxl
Z2F0ZSh0aGlzKTsKLSAgICAgICAgbV90cmFuc2Zvcm1MYXllci0+dHJhbnNmZXJBbmltYXRpb25z
VG8obV9sYXllci0+bGF5ZXIoKSk7Ci0KLSAgICAgICAgLy8gUmVsZWFzZSB0aGUgdHJhbnNmb3Jt
IGxheWVyLgotICAgICAgICBtX3RyYW5zZm9ybUxheWVyLT5zZXRBbmltYXRpb25EZWxlZ2F0ZSgw
KTsKLSAgICAgICAgbV90cmFuc2Zvcm1MYXllci5jbGVhcigpOwotCi0gICAgICAgIHVwZGF0ZUxh
eWVyUG9zaXRpb24oKTsKLSAgICAgICAgdXBkYXRlTGF5ZXJTaXplKCk7Ci0gICAgICAgIHVwZGF0
ZUFuY2hvclBvaW50KCk7Ci0gICAgICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwotICAgICAgICB1cGRh
dGVDaGlsZHJlblRyYW5zZm9ybSgpOwotCi0gICAgICAgIHVwZGF0ZUNoaWxkTGlzdCgpOwotICAg
IH0KLQotICAgIG1fbGF5ZXItPmxheWVyKCktPnNldFByZXNlcnZlczNEKG1fcHJlc2VydmVzM0Qp
OwotICAgIHBsYXRmb3JtTGF5ZXIoKS0+c2V0T3BhY2l0eShtX29wYWNpdHkpOwotICAgIHVwZGF0
ZU5hbWVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllcklz
RHJhd2FibGUoKQotewotICAgIC8vIEZvciB0aGUgcmVzdCBvZiB0aGUgYWNjZWxlcmF0ZWQgY29t
cG9zaXRvciBjb2RlLCB0aGVyZSBpcyBubyByZWFzb24gdG8gbWFrZSBhCi0gICAgLy8gZGlzdGlu
Y3Rpb24gYmV0d2VlbiBkcmF3c0NvbnRlbnQgYW5kIGNvbnRlbnRzVmlzaWJsZS4gU28sIGZvciBt
X2xheWVyLT5sYXllcigpLCB0aGVzZSB0d28KLSAgICAvLyBmbGFncyBhcmUgY29tYmluZWQgaGVy
ZS4gbV9jb250ZW50c0xheWVyIHNob3VsZG4ndCByZWNlaXZlIHRoZSBkcmF3c0NvbnRlbnQgZmxh
ZwotICAgIC8vIHNvIGl0IGlzIG9ubHkgZ2l2ZW4gY29udGVudHNWaXNpYmxlLgotCi0gICAgbV9s
YXllci0+bGF5ZXIoKS0+c2V0RHJhd3NDb250ZW50KG1fZHJhd3NDb250ZW50ICYmIG1fY29udGVu
dHNWaXNpYmxlKTsKLSAgICBpZiAoV2ViTGF5ZXIqIGNvbnRlbnRzTGF5ZXIgPSBjb250ZW50c0xh
eWVySWZSZWdpc3RlcmVkKCkpCi0gICAgICAgIGNvbnRlbnRzTGF5ZXItPnNldERyYXdzQ29udGVu
dChtX2NvbnRlbnRzVmlzaWJsZSk7Ci0KLSAgICBpZiAobV9kcmF3c0NvbnRlbnQpIHsKLSAgICAg
ICAgbV9sYXllci0+bGF5ZXIoKS0+aW52YWxpZGF0ZSgpOwotICAgICAgICBpZiAobV9saW5rSGln
aGxpZ2h0KQotICAgICAgICAgICAgbV9saW5rSGlnaGxpZ2h0LT5pbnZhbGlkYXRlKCk7Ci0gICAg
fQotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJCYWNrZ3JvdW5k
Q29sb3IoKQotewotICAgIG1fbGF5ZXItPmxheWVyKCktPnNldEJhY2tncm91bmRDb2xvcihtX2Jh
Y2tncm91bmRDb2xvci5yZ2IoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1
cGRhdGVDb250ZW50c1ZpZGVvKCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50Ci19Ci0KLXZv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c1JlY3QoKQotewotICAgIFdl
YkxheWVyKiBjb250ZW50c0xheWVyID0gY29udGVudHNMYXllcklmUmVnaXN0ZXJlZCgpOwotICAg
IGlmICghY29udGVudHNMYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29udGVudHNMYXll
ci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChtX2NvbnRlbnRzUmVjdC54KCksIG1fY29udGVudHNS
ZWN0LnkoKSkpOwotICAgIGNvbnRlbnRzTGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKG1fY29udGVu
dHNSZWN0LndpZHRoKCksIG1fY29udGVudHNSZWN0LmhlaWdodCgpKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NMYXllckNocm9taXVtOjpzZXR1cENvbnRlbnRzTGF5ZXIoV2ViTGF5ZXIqIGNvbnRlbnRz
TGF5ZXIpCi17Ci0gICAgbV9jb250ZW50c0xheWVyID0gY29udGVudHNMYXllcjsKLSAgICBtX2Nv
bnRlbnRzTGF5ZXJJZCA9IG1fY29udGVudHNMYXllci0+aWQoKTsKLQotICAgIGlmIChtX2NvbnRl
bnRzTGF5ZXIpIHsKLSAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRBbmNob3JQb2ludChGbG9h
dFBvaW50KDAsIDApKTsKLSAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRVc2VQYXJlbnRCYWNr
ZmFjZVZpc2liaWxpdHkodHJ1ZSk7Ci0KLSAgICAgICAgLy8gSXQgaXMgbmVjZXNzYXJ5IHRvIGNh
bGwgc2V0RHJhd3NDb250ZW50IGFzIHNvb24gYXMgd2UgcmVjZWl2ZSB0aGUgbmV3IGNvbnRlbnRz
TGF5ZXIsIGZvcgotICAgICAgICAvLyB0aGUgY29ycmVjdG5lc3Mgb2YgZWFybHkgZXhpdCBjb25k
aXRpb25zIGluIHNldERyYXdzQ29udGVudCgpIGFuZCBzZXRDb250ZW50c1Zpc2libGUoKS4KLSAg
ICAgICAgbV9jb250ZW50c0xheWVyLT5zZXREcmF3c0NvbnRlbnQobV9jb250ZW50c1Zpc2libGUp
OwotCi0gICAgICAgIC8vIEluc2VydCB0aGUgY29udGVudCBsYXllciBmaXJzdC4gVmlkZW8gZWxl
bWVudHMgcmVxdWlyZSB0aGlzLCBiZWNhdXNlIHRoZXkgaGF2ZQotICAgICAgICAvLyBzaGFkb3cg
Y29udGVudCB0aGF0IG11c3QgZGlzcGxheSBpbiBmcm9udCBvZiB0aGUgdmlkZW8uCi0gICAgICAg
IG1fbGF5ZXItPmxheWVyKCktPmluc2VydENoaWxkKG1fY29udGVudHNMYXllciwgMCk7Ci0gICAg
fQotICAgIHVwZGF0ZU5hbWVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpz
ZXRBcHBsaWVzUGFnZVNjYWxlKGJvb2wpCi17Ci19Ci0KLWJvb2wgR3JhcGhpY3NMYXllckNocm9t
aXVtOjphcHBsaWVzUGFnZVNjYWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIGNsaXApCi17Ci0gICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVu
dHMoY29udGV4dCwgY2xpcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpub3Rp
ZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSBzdGFydFRpbWUpCi17Ci0gICAgaWYgKG1fY2xpZW50
KQotICAgICAgICBtX2NsaWVudC0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlzLCBzdGFydFRp
bWUpOwotfQotCi12b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bm90aWZ5QW5pbWF0aW9uRmlu
aXNoZWQoZG91YmxlKQotewotICAgIC8vIERvIG5vdGhpbmcuCi19Ci0KLXZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjpkaWRTY3JvbGwoKQotewotICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQot
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24o
SW50UG9pbnQobV9sYXllci0+bGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKSkpOwotfQotCi12b2lk
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5m
byogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKLXsKLSAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyht
ZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBQbGF0Zm9ybU1lbW9yeVR5cGVzOjpMYXllcnMpOwotICAg
IEdyYXBoaWNzTGF5ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwotICAg
IGluZm8uYWRkTWVtYmVyKG1fbmFtZUJhc2UsICJuYW1lQmFzZSIpOwotICAgIGluZm8uYWRkTWVt
YmVyKG1fbGF5ZXIsICJsYXllciIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fdHJhbnNmb3JtTGF5
ZXIsICJ0cmFuc2Zvcm1MYXllciIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1faW1hZ2VMYXllciwg
ImltYWdlTGF5ZXIiKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX2NvbnRlbnRzTGF5ZXIsICJjb250
ZW50c0xheWVyIik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9saW5rSGlnaGxpZ2h0LCAibGlua0hp
Z2hsaWdodCIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fb3BhcXVlUmVjdFRyYWNraW5nQ29udGVu
dExheWVyRGVsZWdhdGUsICJvcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZSIp
OwotICAgIGluZm8uYWRkTWVtYmVyKG1fYW5pbWF0aW9uSWRNYXAsICJhbmltYXRpb25JZE1hcCIp
OwotICAgIGluZm8uYWRkTWVtYmVyKG1fc2Nyb2xsYWJsZUFyZWEsICJzY3JvbGxhYmxlQXJlYSIp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uaAko
cmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjIyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bV9oCi0jZGVmaW5lIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bV9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5j
bHVkZSAiT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUuaCIKLQotI2luY2x1
ZGUgPHB1YmxpYy9XZWJBbmltYXRpb25EZWxlZ2F0ZS5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJM
YXllclNjcm9sbENsaWVudC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotY2xhc3MgV2ViQ29udGVudExheWVyOwotY2xhc3MgV2ViSW1hZ2VMYXllcjsK
LWNsYXNzIFdlYlNvbGlkQ29sb3JMYXllcjsKLWNsYXNzIFdlYkxheWVyOwotfQotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBhdGg7Ci1jbGFzcyBTY3JvbGxhYmxlQXJlYTsKLQotY2xh
c3MgTGlua0hpZ2hsaWdodENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGludmFs
aWRhdGUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyQ3VycmVudEdyYXBoaWNzTGF5ZXIo
KSA9IDA7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYkxheWVyKiBsYXllcigpID0gMDsKLQotcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgfkxpbmtIaWdobGlnaHRDbGllbnQoKSB7IH0KLX07Ci0KLWNs
YXNzIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBHcmFwaGljc0xheWVyLCBwdWJsaWMg
R3JhcGhpY3NDb250ZXh0UGFpbnRlciwgcHVibGljIFdlYktpdDo6V2ViQW5pbWF0aW9uRGVsZWdh
dGUsIHB1YmxpYyBXZWJLaXQ6OldlYkxheWVyU2Nyb2xsQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBH
cmFwaGljc0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNsaWVudCopOwotICAgIHZpcnR1YWwg
fkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ry
b3llZCgpIE9WRVJSSURFOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5n
Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNz
TGF5ZXIqPiYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChHcmFwaGljc0xheWVyKik7Ci0g
ICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiwgaW50IGluZGV4
KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiwgR3JhcGhp
Y3NMYXllciogc2libGluZyk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQmVsb3coR3JhcGhp
Y3NMYXllciosIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpOwotICAgIHZpcnR1YWwgYm9vbCByZXBs
YWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxk
KTsKLQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
U2l6ZShjb25zdCBGbG9hdFNpemUmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRDaGls
ZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotCi0gICAgdmlydHVh
bCB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrc1Rv
Qm91bmRzKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVmlzaWJsZShib29sKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRC
YWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c09wYXF1ZShib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5
KGJvb2wpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNz
TGF5ZXIqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKLQotICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiBmaWx0ZXIgY2FuIGJlIHJlbmRlcmVkIGJ5IHRoZSBjb21wb3NpdG9y
Ci0gICAgdmlydHVhbCBib29sIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwot
ICAgIHZvaWQgc2V0QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwot
Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVu
dHNSZWN0KGNvbnN0IEludFJlY3QmKTsKLQotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29udGVu
dHNMYXllcihXZWJLaXQ6OldlYkxheWVyKik7Ci0gICAgc3RhdGljIHZvaWQgdW5yZWdpc3RlckNv
bnRlbnRzTGF5ZXIoV2ViS2l0OjpXZWJMYXllciopOwotCi0gICAgdmlydHVhbCB2b2lkIHNldENv
bnRlbnRzVG9JbWFnZShJbWFnZSopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3QgQ29sb3ImKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGJvb2wgaGFzQ29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVu
dHNMYXllcjsgfQotCi0gICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFt
ZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiosIGNv
bnN0IFN0cmluZyYsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGF1c2VB
bmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCk7
Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlv
bk5hbWUpOwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgd2FsbENs
b2NrVGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKLQotICAgIHZv
aWQgc2V0TGlua0hpZ2hsaWdodChMaW5rSGlnaGxpZ2h0Q2xpZW50Kik7Ci0gICAgLy8gTmV4dCBm
dW5jdGlvbiBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KLSAgICBMaW5rSGlnaGxpZ2h0Q2xpZW50KiBs
aW5rSGlnaGxpZ2h0KCkgeyByZXR1cm4gbV9saW5rSGlnaGxpZ2h0OyB9Ci0KLSAgICB2aXJ0dWFs
IFdlYktpdDo6V2ViTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
dm9pZCBzZXRBcHBsaWVzUGFnZVNjYWxlKGJvb2wgYXBwbGllc1NjYWxlKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGJvb2wgYXBwbGllc1BhZ2VTY2FsZSgpIGNvbnN0IE9WRVJSSURFOwotCi0gICAg
dm9pZCBzZXRTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpIHsg
bV9zY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhOyB9Ci0gICAgU2Nyb2xsYWJsZUFyZWEq
IHNjcm9sbGFibGVBcmVhKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQotCi0g
ICAgLy8gR3JhcGhpY3NDb250ZXh0UGFpbnRlciBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkgT1ZFUlJJ
REU7Ci0KLSAgICAvLyBXZWJBbmltYXRpb25EZWxlZ2F0ZSBpbXBsZW1lbnRhdGlvbi4KLSAgICB2
aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoZG91YmxlIGZp
bmlzaFRpbWUpIE9WRVJSSURFOwotCi0gICAgLy8gV2ViTGF5ZXJTY3JvbGxDbGllbnQgaW1wbGVt
ZW50YXRpb24uCi0gICAgdmlydHVhbCB2b2lkIGRpZFNjcm9sbCgpIE9WRVJSSURFOwotCi0gICAg
V2ViS2l0OjpXZWJDb250ZW50TGF5ZXIqIGNvbnRlbnRMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1f
bGF5ZXIuZ2V0KCk7IH0KLQotICAgIC8vIEV4cG9zZWQgZm9yIHRlc3RzLgotICAgIFdlYktpdDo6
V2ViTGF5ZXIqIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXI7
IH0KLQotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZv
KikgY29uc3QgT1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVOYW1lcygpOwot
ICAgIHZvaWQgdXBkYXRlQ2hpbGRMaXN0KCk7Ci0gICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9u
KCk7Ci0gICAgdm9pZCB1cGRhdGVMYXllclNpemUoKTsKLSAgICB2b2lkIHVwZGF0ZUFuY2hvclBv
aW50KCk7Ci0gICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm0oKTsKLSAgICB2b2lkIHVwZGF0ZUNoaWxk
cmVuVHJhbnNmb3JtKCk7Ci0gICAgdm9pZCB1cGRhdGVNYXNrc1RvQm91bmRzKCk7Ci0gICAgdm9p
ZCB1cGRhdGVMYXllclByZXNlcnZlczNEKCk7Ci0gICAgdm9pZCB1cGRhdGVMYXllcklzRHJhd2Fi
bGUoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyQmFja2dyb3VuZENvbG9yKCk7Ci0KLSAgICB2b2lk
IHVwZGF0ZUNvbnRlbnRzSW1hZ2UoKTsKLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzVmlkZW8oKTsK
LSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzUmVjdCgpOwotCi0gICAgZW51bSBDb250ZW50c0xheWVy
UHVycG9zZSB7Ci0gICAgICAgIE5vQ29udGVudHNMYXllciA9IDAsCi0gICAgICAgIENvbnRlbnRz
TGF5ZXJGb3JJbWFnZSwKLSAgICAgICAgQ29udGVudHNMYXllckZvclZpZGVvLAotICAgICAgICBD
b250ZW50c0xheWVyRm9yQ2FudmFzLAotICAgIH07Ci0KLSAgICB2b2lkIHNldENvbnRlbnRzVG8o
Q29udGVudHNMYXllclB1cnBvc2UsIFdlYktpdDo6V2ViTGF5ZXIqKTsKLSAgICB2b2lkIHNldHVw
Q29udGVudHNMYXllcihXZWJLaXQ6OldlYkxheWVyKik7Ci0gICAgdm9pZCBjbGVhckNvbnRlbnRz
TGF5ZXJJZlVucmVnaXN0ZXJlZCgpOwotICAgIFdlYktpdDo6V2ViTGF5ZXIqIGNvbnRlbnRzTGF5
ZXJJZlJlZ2lzdGVyZWQoKTsKLQotICAgIFN0cmluZyBtX25hbWVCYXNlOwotCi0gICAgQ29sb3Ig
bV9jb250ZW50c1NvbGlkQ29sb3I7Ci0KLSAgICBPd25QdHI8V2ViS2l0OjpXZWJDb250ZW50TGF5
ZXI+IG1fbGF5ZXI7Ci0gICAgT3duUHRyPFdlYktpdDo6V2ViTGF5ZXI+IG1fdHJhbnNmb3JtTGF5
ZXI7Ci0gICAgT3duUHRyPFdlYktpdDo6V2ViSW1hZ2VMYXllcj4gbV9pbWFnZUxheWVyOwotICAg
IE93blB0cjxXZWJLaXQ6OldlYlNvbGlkQ29sb3JMYXllcj4gbV9jb250ZW50c1NvbGlkQ29sb3JM
YXllcjsKLSAgICBXZWJLaXQ6OldlYkxheWVyKiBtX2NvbnRlbnRzTGF5ZXI7Ci0gICAgLy8gV2Ug
ZG9uJ3QgaGF2ZSBvd25lcnNoaXAgb2YgbV9jb250ZW50c0xheWVyLCBidXQgd2UgZG8gd2FudCB0
byBrbm93IGlmIGEgZ2l2ZW4gbGF5ZXIgaXMgdGhlCi0gICAgLy8gc2FtZSBhcyBvdXIgY3VycmVu
dCBsYXllciBpbiBzZXRDb250ZW50c1RvKCkuIFNpbmNlIG1fY29udGVudHNMYXllciBtYXkgYmUg
ZGVsZXRlZCBhdCB0aGlzIHBvaW50LAotICAgIC8vIHdlIHN0YXNoIGFuIElEIGF3YXkgd2hlbiB3
ZSBrbm93IG1fY29udGVudHNMYXllciBpcyBhbGl2ZSBhbmQgdXNlIHRoYXQgZm9yIGNvbXBhcmlz
b25zIGZyb20gdGhhdCBwb2ludAotICAgIC8vIG9uLgotICAgIGludCBtX2NvbnRlbnRzTGF5ZXJJ
ZDsKLQotICAgIExpbmtIaWdobGlnaHRDbGllbnQqIG1fbGlua0hpZ2hsaWdodDsKLQotICAgIE93
blB0cjxPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZT4gbV9vcGFxdWVSZWN0
VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZTsKLQotICAgIENvbnRlbnRzTGF5ZXJQdXJwb3Nl
IG1fY29udGVudHNMYXllclB1cnBvc2U7Ci0gICAgYm9vbCBtX2luU2V0Q2hpbGRyZW47Ci0KLSAg
ICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IEFuaW1hdGlvbklkTWFwOwotICAgIEFuaW1h
dGlvbklkTWFwIG1fYW5pbWF0aW9uSWRNYXA7Ci0KLSAgICBTY3JvbGxhYmxlQXJlYSogbV9zY3Jv
bGxhYmxlQXJlYTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ljb25DaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ljb25DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSWNvbi5oIgotCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotSWNvbjo6SWNvbihQYXNzUmVmUHRyPFBsYXRmb3JtSWNvbj4g
aWNvbikKLSAgICA6IG1faWNvbihpY29uKQotewotfQotCi1JY29uOjp+SWNvbigpCi17Ci19Ci0K
LXZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0KQotewotICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIEFuIEljb24gZG9lc24ndCBrbm93IHRoZSBjb2xvciBzcGFjZSBv
ZiB0aGUgZmlsZSB1cGxvYWQgY29udHJvbC4KLSAgICAvLyBTbyB1c2UgQ29sb3JTcGFjZURldmlj
ZVJHQi4KLSAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9pY29uLmdldCgpLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCByZWN0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNocm9taXVtQW5kcm9pZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSWNvbkNocm9taXVtQW5kcm9pZC5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ljb25DaHJvbWl1bUFuZHJvaWQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSWNvbi5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JY29uOjpJY29uKFBhc3NSZWZQdHI8UGxhdGZv
cm1JY29uPiBpY29uKQotICAgIDogbV9pY29uKGljb24pCi17Ci19Ci0KLUljb246On5JY29uKCkK
LXsKLX0KLQotdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1
ZmZlckRhdGFTa2lhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oCShyZXZpc2lvbiAxNDc3MzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRh
dGFTa2lhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgotCi0jaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1f
Y2FudmFzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLWNsYXNzIENhbnZhczJETGF5ZXJCcmlkZ2U7Ci0jZW5kaWYKLQotY2xhc3Mg
SW1hZ2VCdWZmZXJEYXRhIHsKLXB1YmxpYzoKLSAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50
U2l6ZSYpOwotCi0gICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikg
Y29uc3Q7Ci0KLSAgICBPd25QdHI8U2tDYW52YXM+IG1fY2FudmFzOwotICAgIFBsYXRmb3JtQ29u
dGV4dFNraWEgbV9wbGF0Zm9ybUNvbnRleHQ7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotICAgIE93blB0cjxDYW52YXMyRExheWVyQnJpZGdlPiBtX2xheWVyQnJpZGdlOwotI2Vu
ZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVt
LmNwcAkocmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0KLSNpbmNs
dWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViRGF0YS5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIE90aGVyIEltYWdlIG1ldGhvZHMgYXJlIGltcGxlbWVu
dGVkIGluIEltYWdlU2tpYS5jcHAKLQotUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJE
YXRhJiByZXNvdXJjZSA9IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+bG9hZFJlc291cmNl
KG5hbWUpOwotICAgIGlmIChyZXNvdXJjZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbWFn
ZTo6bnVsbEltYWdlKCk7Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6
OmNyZWF0ZSgpOwotICAgIGltYWdlLT5zZXREYXRhKHJlc291cmNlLCB0cnVlKTsKLSAgICByZXR1
cm4gaW1hZ2UucmVsZWFzZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3Rv
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRGVjb2RpbmdTdG9yZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCi0KLSNpbmNsdWRlICJJ
bWFnZUZyYW1lR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiU2NhbGVkSW1hZ2VGcmFnbWVudC5oIgot
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgewotCi0vLyAzMk1CIG1lbW9yeSBsaW1pdCBm
b3IgY2FjaGUuCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGRlZmF1bHRDYWNoZUxpbWl0SW5CeXRlcyA9
IDMyNzY4ICogMTAyNDsKLXN0YXRpYyBJbWFnZURlY29kaW5nU3RvcmUqIHNfaW5zdGFuY2UgPSAw
OwotCi1zdGF0aWMgdm9pZCBzZXRJbnN0YW5jZShJbWFnZURlY29kaW5nU3RvcmUqIGltYWdlRGVj
b2RpbmdTdG9yZSkKLXsKLSAgICBkZWxldGUgc19pbnN0YW5jZTsKLSAgICBzX2luc3RhbmNlID0g
aW1hZ2VEZWNvZGluZ1N0b3JlOwotfQotCi19IC8vIG5hbWVzcGFjZQotCi1JbWFnZURlY29kaW5n
U3RvcmU6OkltYWdlRGVjb2RpbmdTdG9yZSgpCi0gICAgOiBtX2NhY2hlTGltaXRJbkJ5dGVzKGRl
ZmF1bHRDYWNoZUxpbWl0SW5CeXRlcykKLSAgICAsIG1fbWVtb3J5VXNhZ2VJbkJ5dGVzKDApCi17
Ci19Ci0KLUltYWdlRGVjb2RpbmdTdG9yZTo6fkltYWdlRGVjb2RpbmdTdG9yZSgpCi17Ci0jaWZu
ZGVmIE5ERUJVRwotICAgIHNldENhY2hlTGltaXRJbkJ5dGVzKDApOwotICAgIEFTU0VSVCghbV9j
YWNoZU1hcC5zaXplKCkpOwotICAgIEFTU0VSVCghbV9vcmRlcmVkQ2FjaGVMaXN0LnNpemUoKSk7
Ci0gICAgQVNTRVJUKCFtX2NhY2hlZFNpemVNYXAuc2l6ZSgpKTsKLSNlbmRpZgotfQotCi1JbWFn
ZURlY29kaW5nU3RvcmUqIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKQotewotICAgIHJl
dHVybiBzX2luc3RhbmNlOwotfQotCi12b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5pdGlhbGl6
ZU9uY2UoKQotewotICAgIHNldEluc3RhbmNlKEltYWdlRGVjb2RpbmdTdG9yZTo6Y3JlYXRlKCku
bGVha1B0cigpKTsKLX0KLQotdm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnNodXRkb3duKCkKLXsK
LSAgICBzZXRJbnN0YW5jZSgwKTsKLX0KLQotYm9vbCBJbWFnZURlY29kaW5nU3RvcmU6OmxvY2tD
YWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIGNvbnN0IFNrSVNpemUm
IHNjYWxlZFNpemUsIENhY2hlQ29uZGl0aW9uIGNvbmRpdGlvbiwgY29uc3QgU2NhbGVkSW1hZ2VG
cmFnbWVudCoqIGNhY2hlZEltYWdlLCBJbWFnZURlY29kZXIqKiBkZWNvZGVyKQotewotICAgIEFT
U0VSVChjYWNoZWRJbWFnZSk7Ci0KLSAgICBDYWNoZUVudHJ5KiBjYWNoZUVudHJ5ID0gMDsKLSAg
ICBWZWN0b3I8T3duUHRyPENhY2hlRW50cnk+ID4gY2FjaGVFbnRyaWVzVG9EZWxldGU7Ci0gICAg
ewotICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwotICAgICAgICBDYWNoZU1hcDo6
aXRlcmF0b3IgaXRlciA9IG1fY2FjaGVNYXAuZmluZChzdGQ6Om1ha2VfcGFpcihnZW5lcmF0b3Is
IHNjYWxlZFNpemUpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9jYWNoZU1hcC5lbmQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FjaGVFbnRyeSA9IGl0ZXItPnZhbHVl
LmdldCgpOwotICAgICAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBpbWFnZSA9IGNhY2hlRW50cnkt
PmNhY2hlZEltYWdlKCk7Ci0gICAgICAgIGlmIChjb25kaXRpb24gPT0gQ2FjaGVNdXN0QmVDb21w
bGV0ZSAmJiAhaW1hZ2UtPmlzQ29tcGxldGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICAvLyBJbmNvbXBsZXRlIGNhY2hlIGVudHJ5IGNhbm5vdCBiZSB1c2VkIG1vcmUg
dGhhbiBvbmNlLgotICAgICAgICBBU1NFUlQoaW1hZ2UtPmlzQ29tcGxldGUoKSB8fCAhY2FjaGVF
bnRyeS0+dXNlQ291bnQoKSk7Ci0KLSAgICAgICAgaW1hZ2UtPmJpdG1hcCgpLmxvY2tQaXhlbHMo
KTsKLSAgICAgICAgaWYgKGltYWdlLT5iaXRtYXAoKS5nZXRQaXhlbHMoKSkgewotICAgICAgICAg
ICAgLy8gSW5jcmVtZW50IHVzZSBjb3VudCBzdWNoIHRoYXQgaXQgZG9lc24ndCBnZXQgZXZpY3Rl
ZC4KLSAgICAgICAgICAgIGNhY2hlRW50cnktPmluY3JlbWVudFVzZUNvdW50KCk7Ci0KLSAgICAg
ICAgICAgIC8vIENvbXBsZXRlIGNhY2hlIGVudHJ5IGRvZXNuJ3QgaGF2ZSBhIGRlY29kZXIuCi0g
ICAgICAgICAgICBBU1NFUlQoIWltYWdlLT5pc0NvbXBsZXRlKCkgfHwgIWNhY2hlRW50cnktPmNh
Y2hlZERlY29kZXIoKSk7Ci0KLSAgICAgICAgICAgIGlmIChkZWNvZGVyKQotICAgICAgICAgICAg
ICAgICpkZWNvZGVyID0gY2FjaGVFbnRyeS0+Y2FjaGVkRGVjb2RlcigpOwotICAgICAgICAgICAg
KmNhY2hlZEltYWdlID0gaW1hZ2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbWFn
ZS0+Yml0bWFwKCkudW5sb2NrUGl4ZWxzKCk7Ci0gICAgICAgICAgICByZW1vdmVGcm9tQ2FjaGVJ
bnRlcm5hbChjYWNoZUVudHJ5LCAmY2FjaGVFbnRyaWVzVG9EZWxldGUpOwotICAgICAgICAgICAg
cmVtb3ZlRnJvbUNhY2hlTGlzdEludGVybmFsKGNhY2hlRW50cmllc1RvRGVsZXRlKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6dW5sb2NrQ2FjaGUoY29uc3QgSW1hZ2VG
cmFtZUdlbmVyYXRvciogZ2VuZXJhdG9yLCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNo
ZWRJbWFnZSkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwotICAgIGNhY2hlZElt
YWdlLT5iaXRtYXAoKS51bmxvY2tQaXhlbHMoKTsKLSAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRl
ciA9IG1fY2FjaGVNYXAuZmluZChzdGQ6Om1ha2VfcGFpcihnZW5lcmF0b3IsIGNhY2hlZEltYWdl
LT5zY2FsZWRTaXplKCkpKTsKLSAgICBBU1NFUlQoaXRlciAhPSBtX2NhY2hlTWFwLmVuZCgpKTsK
LQotICAgIENhY2hlRW50cnkqIGNhY2hlRW50cnkgPSBpdGVyLT52YWx1ZS5nZXQoKTsKLSAgICBj
YWNoZUVudHJ5LT5kZWNyZW1lbnRVc2VDb3VudCgpOwotCi0gICAgLy8gUHV0IHRoZSBlbnRyeSB0
byB0aGUgZW5kIG9mIGxpc3QuCi0gICAgbV9vcmRlcmVkQ2FjaGVMaXN0LnJlbW92ZShjYWNoZUVu
dHJ5KTsKLSAgICBtX29yZGVyZWRDYWNoZUxpc3QuYXBwZW5kKGNhY2hlRW50cnkpOwotfQotCi1j
b25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZURlY29kaW5nU3RvcmU6Omluc2VydEFuZExv
Y2tDYWNoZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIFBhc3NPd25QdHI8
U2NhbGVkSW1hZ2VGcmFnbWVudD4gaW1hZ2UsIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNv
ZGVyKQotewotICAgIC8vIFBydW5lIG9sZCBjYWNoZSBlbnRyaWVzIHRvIGdpdmUgc3BhY2UgZm9y
IHRoZSBuZXcgb25lLgotICAgIHBydW5lKCk7Ci0KLSAgICBTY2FsZWRJbWFnZUZyYWdtZW50KiBj
YWNoZWRJbWFnZSA9IGltYWdlLmdldCgpOwotICAgIE93blB0cjxDYWNoZUVudHJ5PiBuZXdDYWNo
ZUVudHJ5OwotCi0gICAgLy8gSW1hZ2VEZWNvZGVyIGlzIG5vdCB1c2VkIGFueSBtb3JlIGlmIGNh
Y2hlIGlzIGNvbXBsZXRlLgotICAgIGlmIChpbWFnZS0+aXNDb21wbGV0ZSgpKQotICAgICAgICBu
ZXdDYWNoZUVudHJ5ID0gQ2FjaGVFbnRyeTo6Y3JlYXRlQW5kVXNlKGdlbmVyYXRvciwgaW1hZ2Up
OwotICAgIGVsc2UKLSAgICAgICAgbmV3Q2FjaGVFbnRyeSA9IENhY2hlRW50cnk6OmNyZWF0ZUFu
ZFVzZShnZW5lcmF0b3IsIGltYWdlLCBkZWNvZGVyKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2so
bV9tdXRleCk7Ci0gICAgLy8gTG9jayB0aGUgdW5kZXJseWluZyBTa0JpdG1hcCB0byBwcmV2ZW50
IGl0IGZyb20gYmVpbmcgcHVyZ2VkLgotICAgIGNhY2hlZEltYWdlLT5iaXRtYXAoKS5sb2NrUGl4
ZWxzKCk7Ci0gICAgQVNTRVJUKCFtX2NhY2hlTWFwLmNvbnRhaW5zKG5ld0NhY2hlRW50cnktPmNh
Y2hlS2V5KCkpKTsKLSAgICBpbnNlcnRDYWNoZUludGVybmFsKG5ld0NhY2hlRW50cnkucmVsZWFz
ZSgpKTsKLSAgICByZXR1cm4gY2FjaGVkSW1hZ2U7Ci19Ci0KLWNvbnN0IFNjYWxlZEltYWdlRnJh
Z21lbnQqIEltYWdlRGVjb2RpbmdTdG9yZTo6b3ZlcndyaXRlQW5kTG9ja0NhY2hlKGNvbnN0IElt
YWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCog
Y2FjaGVkSW1hZ2UsIFBhc3NPd25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gbmV3SW1hZ2UpCi17
Ci0gICAgT3duUHRyPEltYWdlRGVjb2Rlcj4gdHJhc2g7Ci0gICAgY29uc3QgU2NhbGVkSW1hZ2VG
cmFnbWVudCogbmV3Q2FjaGVkSW1hZ2UgPSAwOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIg
bG9jayhtX211dGV4KTsKLSAgICAgICAgY2FjaGVkSW1hZ2UtPmJpdG1hcCgpLnVubG9ja1BpeGVs
cygpOwotICAgICAgICBDYWNoZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY2FjaGVNYXAuZmluZChz
dGQ6Om1ha2VfcGFpcihnZW5lcmF0b3IsIGNhY2hlZEltYWdlLT5zY2FsZWRTaXplKCkpKTsKLSAg
ICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9jYWNoZU1hcC5lbmQoKSk7Ci0KLSAgICAgICAgQ2FjaGVF
bnRyeSogY2FjaGVFbnRyeSA9IGl0ZXItPnZhbHVlLmdldCgpOwotICAgICAgICBBU1NFUlQoY2Fj
aGVFbnRyeS0+dXNlQ291bnQoKSA9PSAxKTsKLSAgICAgICAgQVNTRVJUKCFjYWNoZUVudHJ5LT5j
YWNoZWRJbWFnZSgpLT5pc0NvbXBsZXRlKCkpOwotCi0gICAgICAgIGJvb2wgaXNOZXdJbWFnZURp
c2NhcmRhYmxlID0gRGlzY2FyZGFibGVQaXhlbFJlZjo6aXNEaXNjYXJkYWJsZShuZXdJbWFnZS0+
Yml0bWFwKCkucGl4ZWxSZWYoKSk7Ci0gICAgICAgIGlmIChjYWNoZUVudHJ5LT5pc0Rpc2NhcmRh
YmxlKCkgJiYgIWlzTmV3SW1hZ2VEaXNjYXJkYWJsZSkKLSAgICAgICAgICAgIGluY3JlbWVudE1l
bW9yeVVzYWdlKGNhY2hlRW50cnktPm1lbW9yeVVzYWdlSW5CeXRlcygpKTsKLSAgICAgICAgZWxz
ZSBpZiAoIWNhY2hlRW50cnktPmlzRGlzY2FyZGFibGUoKSAmJiBpc05ld0ltYWdlRGlzY2FyZGFi
bGUpCi0gICAgICAgICAgICBkZWNyZW1lbnRNZW1vcnlVc2FnZShjYWNoZUVudHJ5LT5tZW1vcnlV
c2FnZUluQnl0ZXMoKSk7Ci0gICAgICAgIHRyYXNoID0gY2FjaGVFbnRyeS0+b3ZlcndyaXRlQ2Fj
aGVkSW1hZ2UobmV3SW1hZ2UpOwotICAgICAgICBuZXdDYWNoZWRJbWFnZSA9IGNhY2hlRW50cnkt
PmNhY2hlZEltYWdlKCk7Ci0gICAgICAgIC8vIExvY2sgdGhlIHVuZGVybHlpbmcgU2tCaXRtYXAg
dG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHB1cmdlZC4KLSAgICAgICAgbmV3Q2FjaGVkSW1hZ2Ut
PmJpdG1hcCgpLmxvY2tQaXhlbHMoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3Q2FjaGVkSW1h
Z2U7Ci19Ci0KLXZvaWQgSW1hZ2VEZWNvZGluZ1N0b3JlOjpyZW1vdmVDYWNoZUluZGV4ZWRCeUdl
bmVyYXRvcihjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IpCi17Ci0gICAgVmVj
dG9yPE93blB0cjxDYWNoZUVudHJ5PiA+IGNhY2hlRW50cmllc1RvRGVsZXRlOwotICAgIHsKLSAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKLSAgICAgICAgQ2FjaGVkU2l6ZU1hcDo6
aXRlcmF0b3IgaXRlciA9IG1fY2FjaGVkU2l6ZU1hcC5maW5kKGdlbmVyYXRvcik7Ci0gICAgICAg
IGlmIChpdGVyID09IG1fY2FjaGVkU2l6ZU1hcC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAvLyBHZXQgYWxsIGNhY2hlZCBzaXplcyBpbmRleGVkIGJ5IGdlbmVyYXRvci4K
LSAgICAgICAgVmVjdG9yPFNrSVNpemU+IGNhY2hlZFNpemVMaXN0OwotICAgICAgICBjb3B5VG9W
ZWN0b3IoaXRlci0+dmFsdWUsIGNhY2hlZFNpemVMaXN0KTsKLQotICAgICAgICAvLyBGb3IgZWFj
aCBjYWNoZWQgc2l6ZSBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIENhY2hlRW50cnkgYW5kIHJlbW92
ZSBpdCBmcm9tCi0gICAgICAgIC8vIG1fY2FjaGVNYXAuCi0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY2FjaGVkU2l6ZUxpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIENhY2hl
SWRlbnRpZmllciBrZXkgPSBzdGQ6Om1ha2VfcGFpcihnZW5lcmF0b3IsIGNhY2hlZFNpemVMaXN0
W2ldKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2NhY2hlTWFwLmNvbnRhaW5zKGtleSkpOwotCi0g
ICAgICAgICAgICBjb25zdCBDYWNoZUVudHJ5KiBjYWNoZUVudHJ5ID0gbV9jYWNoZU1hcC5nZXQo
a2V5KTsKLSAgICAgICAgICAgIEFTU0VSVCghY2FjaGVFbnRyeS0+dXNlQ291bnQoKSk7Ci0gICAg
ICAgICAgICByZW1vdmVGcm9tQ2FjaGVJbnRlcm5hbChjYWNoZUVudHJ5LCAmY2FjaGVFbnRyaWVz
VG9EZWxldGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVtb3ZlIGZyb20gY2FjaGUgbGlz
dCBhcyB3ZWxsLgotICAgICAgICByZW1vdmVGcm9tQ2FjaGVMaXN0SW50ZXJuYWwoY2FjaGVFbnRy
aWVzVG9EZWxldGUpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnNldENh
Y2hlTGltaXRJbkJ5dGVzKHNpemVfdCBjYWNoZUxpbWl0KQotewotICAgIHsKLSAgICAgICAgTXV0
ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKLSAgICAgICAgbV9jYWNoZUxpbWl0SW5CeXRlcyA9IGNh
Y2hlTGltaXQ7Ci0gICAgfQotICAgIHBydW5lKCk7Ci19Ci0KLXNpemVfdCBJbWFnZURlY29kaW5n
U3RvcmU6Om1lbW9yeVVzYWdlSW5CeXRlcygpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX211
dGV4KTsKLSAgICByZXR1cm4gbV9tZW1vcnlVc2FnZUluQnl0ZXM7Ci19Ci0KLXVuc2lnbmVkIElt
YWdlRGVjb2RpbmdTdG9yZTo6Y2FjaGVFbnRyaWVzKCkKLXsKLSAgICBNdXRleExvY2tlciBsb2Nr
KG1fbXV0ZXgpOwotICAgIHJldHVybiBtX2NhY2hlTWFwLnNpemUoKTsKLX0KLQotdm9pZCBJbWFn
ZURlY29kaW5nU3RvcmU6OnBydW5lKCkKLXsKLSAgICBUUkFDRV9FVkVOVDAoIndlYmtpdCIsICJJ
bWFnZURlY29kaW5nU3RvcmU6OnBydW5lIik7Ci0KLSAgICBWZWN0b3I8T3duUHRyPENhY2hlRW50
cnk+ID4gY2FjaGVFbnRyaWVzVG9EZWxldGU7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBs
b2NrKG1fbXV0ZXgpOwotCi0gICAgICAgIC8vIEhlYWQgb2YgdGhlIGxpc3QgaXMgdGhlIGxlYXN0
IHJlY2VudGx5IHVzZWQgZW50cnkuCi0gICAgICAgIGNvbnN0IENhY2hlRW50cnkqIGNhY2hlRW50
cnkgPSBtX29yZGVyZWRDYWNoZUxpc3QuaGVhZCgpOwotCi0gICAgICAgIC8vIFdhbGsgdGhlIGxp
c3Qgb2YgY2FjaGUgZW50cmllcyBzdGFydGluZyBmcm9tIHRoZSBsZWFzdCByZWNlbnRseSB1c2Vk
Ci0gICAgICAgIC8vIGFuZCB0aGVuIGtlZXAgdGhlbSBmb3IgZGVsZXRpb24gbGF0ZXIuCi0gICAg
ICAgIHdoaWxlIChjYWNoZUVudHJ5ICYmIChtX21lbW9yeVVzYWdlSW5CeXRlcyA+IG1fY2FjaGVM
aW1pdEluQnl0ZXMgfHwgIW1fY2FjaGVMaW1pdEluQnl0ZXMpKSB7Ci0gICAgICAgICAgICAvLyBD
YWNoZSBpcyBub3QgdXNlZDsgUmVtb3ZlIGl0LgotICAgICAgICAgICAgaWYgKCFjYWNoZUVudHJ5
LT51c2VDb3VudCgpKQotICAgICAgICAgICAgICAgIHJlbW92ZUZyb21DYWNoZUludGVybmFsKGNh
Y2hlRW50cnksICZjYWNoZUVudHJpZXNUb0RlbGV0ZSk7Ci0gICAgICAgICAgICBjYWNoZUVudHJ5
ID0gY2FjaGVFbnRyeS0+bmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVtb3ZlIGZy
b20gY2FjaGUgbGlzdCBhcyB3ZWxsLgotICAgICAgICByZW1vdmVGcm9tQ2FjaGVMaXN0SW50ZXJu
YWwoY2FjaGVFbnRyaWVzVG9EZWxldGUpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZURlY29kaW5n
U3RvcmU6Omluc2VydENhY2hlSW50ZXJuYWwoUGFzc093blB0cjxDYWNoZUVudHJ5PiBjYWNoZUVu
dHJ5KQotewotICAgIGlmICghY2FjaGVFbnRyeS0+aXNEaXNjYXJkYWJsZSgpKQotICAgICAgICBp
bmNyZW1lbnRNZW1vcnlVc2FnZShjYWNoZUVudHJ5LT5tZW1vcnlVc2FnZUluQnl0ZXMoKSk7Ci0g
ICAgVFJBQ0VfQ09VTlRFUjEoIndlYmtpdCIsICJJbWFnZURlY29kaW5nU3RvcmVNZW1vcnlVc2Fn
ZUJ5dGVzIiwgbV9tZW1vcnlVc2FnZUluQnl0ZXMpOwotCi0gICAgLy8gbV9vcmRlcmVkQ2FjaGVM
aXN0IGlzIHVzZWQgdG8gc3VwcG9ydCBMUlUgb3BlcmF0aW9ucyB0byByZW9yZGVyIGNhY2hlCi0g
ICAgLy8gZW50cmllcyBxdWlja2x5LgotICAgIG1fb3JkZXJlZENhY2hlTGlzdC5hcHBlbmQoY2Fj
aGVFbnRyeS5nZXQoKSk7Ci0KLSAgICBDYWNoZUlkZW50aWZpZXIga2V5ID0gY2FjaGVFbnRyeS0+
Y2FjaGVLZXkoKTsKLSAgICAvLyBtX2NhY2hlTWFwIGlzIHVzZWQgZm9yIGluZGV4aW5nIGFuZCBx
dWljayBsb29rdXAgb2YgYSBjYWNoZWQgaW1hZ2UuIEl0IG93bnMKLSAgICAvLyBhbGwgY2FjaGUg
ZW50cmllcy4KLSAgICBtX2NhY2hlTWFwLmFkZChrZXksIGNhY2hlRW50cnkpOwotICAgIFRSQUNF
X0NPVU5URVIxKCJ3ZWJraXQiLCAiSW1hZ2VEZWNvZGluZ1N0b3JlTnVtT2ZFbnRyaWVzIiwgbV9j
YWNoZU1hcC5zaXplKCkpOwotCi0gICAgLy8gbV9jYWNoZWRTaXplTWFwIGtlZXBzIGFsbCBzY2Fs
ZWQgc2l6ZXMgYXNzb2NpYXRlZCB3aXRoIGFuIEltYWdlRnJhbWVHZW5lcmF0b3IuCi0gICAgQ2Fj
aGVkU2l6ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2FjaGVkU2l6ZU1hcC5hZGQoa2V5LmZp
cnN0LCBTaXplU2V0KCkpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYWRkKGtleS5zZWNv
bmQpOwotfQotCi12b2lkIEltYWdlRGVjb2RpbmdTdG9yZTo6cmVtb3ZlRnJvbUNhY2hlSW50ZXJu
YWwoY29uc3QgQ2FjaGVFbnRyeSogY2FjaGVFbnRyeSwgVmVjdG9yPE93blB0cjxDYWNoZUVudHJ5
PiA+KiBkZWxldGlvbkxpc3QpCi17Ci0gICAgaWYgKCFjYWNoZUVudHJ5LT5pc0Rpc2NhcmRhYmxl
KCkpCi0gICAgICAgIGRlY3JlbWVudE1lbW9yeVVzYWdlKGNhY2hlRW50cnktPm1lbW9yeVVzYWdl
SW5CeXRlcygpKTsKLSAgICBUUkFDRV9DT1VOVEVSMSgid2Via2l0IiwgIkltYWdlRGVjb2RpbmdT
dG9yZU1lbW9yeVVzYWdlQnl0ZXMiLCBtX21lbW9yeVVzYWdlSW5CeXRlcyk7Ci0KLSAgICAvLyBS
ZW1vdmUgZnJvbSBtX2NhY2hlTWFwLgotICAgIENhY2hlSWRlbnRpZmllciBrZXkgPSBjYWNoZUVu
dHJ5LT5jYWNoZUtleSgpOwotICAgIGRlbGV0aW9uTGlzdC0+YXBwZW5kKG1fY2FjaGVNYXAudGFr
ZShrZXkpKTsKLSAgICBUUkFDRV9DT1VOVEVSMSgid2Via2l0IiwgIkltYWdlRGVjb2RpbmdTdG9y
ZU51bU9mRW50cmllcyIsIG1fY2FjaGVNYXAuc2l6ZSgpKTsKLQotICAgIC8vIFJlbW92ZSBmcm9t
IG1fY2FjaGVkU2l6ZU1hcC4KLSAgICBDYWNoZWRTaXplTWFwOjppdGVyYXRvciBpdGVyID0gbV9j
YWNoZWRTaXplTWFwLmZpbmQoa2V5LmZpcnN0KTsKLSAgICBBU1NFUlQoaXRlciAhPSBtX2NhY2hl
ZFNpemVNYXAuZW5kKCkpOwotICAgIGl0ZXItPnZhbHVlLnJlbW92ZShrZXkuc2Vjb25kKTsKLSAg
ICBpZiAoIWl0ZXItPnZhbHVlLnNpemUoKSkKLSAgICAgICAgbV9jYWNoZWRTaXplTWFwLnJlbW92
ZShpdGVyKTsKLX0KLQotdm9pZCBJbWFnZURlY29kaW5nU3RvcmU6OnJlbW92ZUZyb21DYWNoZUxp
c3RJbnRlcm5hbChjb25zdCBWZWN0b3I8T3duUHRyPENhY2hlRW50cnk+ID4mIGRlbGV0aW9uTGlz
dCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRlbGV0aW9uTGlzdC5zaXplKCk7ICsr
aSkKLSAgICAgICAgbV9vcmRlcmVkQ2FjaGVMaXN0LnJlbW92ZShkZWxldGlvbkxpc3RbaV0uZ2V0
KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29kaW5nU3RvcmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZURlY29k
aW5nU3RvcmUuaAkocmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VEZWNvZGluZ1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEltYWdlRGVjb2RpbmdTdG9yZV9oCi0j
ZGVmaW5lIEltYWdlRGVjb2RpbmdTdG9yZV9oCi0KLSNpbmNsdWRlICJEaXNjYXJkYWJsZVBpeGVs
UmVmLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiU2NhbGVkSW1hZ2VG
cmFnbWVudC5oIgotI2luY2x1ZGUgIlNrVHlwZXMuaCIKLSNpbmNsdWRlICJTa1NpemUuaCIKLSNp
bmNsdWRlICJTa1NpemVIYXNoLmgiCi0KLSNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5o
PgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgSW1hZ2VGcmFtZUdlbmVyYXRvcjsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLQotY2xhc3Mg
SW1hZ2VEZWNvZGluZ1N0b3JlIHsKLXB1YmxpYzoKLSAgICBlbnVtIENhY2hlQ29uZGl0aW9uIHsK
LSAgICAgICAgQ2FjaGVNdXN0QmVDb21wbGV0ZSwKLSAgICAgICAgQ2FjaGVDYW5CZUluY29tcGxl
dGUKLSAgICB9OwotCi0gICAgc3RhdGljIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGluZ1N0b3JlPiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgSW1hZ2VEZWNvZGluZ1N0b3JlKTsgfQotICAg
IH5JbWFnZURlY29kaW5nU3RvcmUoKTsKLQotICAgIHN0YXRpYyBJbWFnZURlY29kaW5nU3RvcmUq
IGluc3RhbmNlKCk7Ci0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9uY2UoKTsKLSAgICBzdGF0
aWMgdm9pZCBzaHV0ZG93bigpOwotCi0gICAgLy8gSWYgY2FjaGVNdXN0QmVDb21wbGV0ZSBpcyB0
cnVlIHRoZW4gb25seSByZXR1cm4gYSBjb21wbGV0ZSBjYWNoZS4KLSAgICBib29sIGxvY2tDYWNo
ZShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiwgY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwg
Q2FjaGVDb25kaXRpb24sIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqKiwgSW1hZ2VEZWNvZGVy
KiogPSAwKTsKLSAgICB2b2lkIHVubG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3Iq
LCBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50Kik7Ci0gICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFn
bWVudCogaW5zZXJ0QW5kTG9ja0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBQYXNz
T3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+LCBQYXNzT3duUHRyPEltYWdlRGVjb2Rlcj4gPSBu
dWxscHRyKTsKLQotICAgIC8vIE92ZXJ3cml0ZSBhbiBleGlzdGluZyBjYWNoZWQgaW1hZ2UuIEl0
IGlzIHVubG9ja2VkIGFuZCB0aGVuIHJlcGxhY2VkIHdpdGggdGhlIG5ldyBpbWFnZS4KLSAgICAv
LyBUaGUgZXhpc3RpbmcgY2FjaGVkIGltYWdlIG11c3QgYmUgYWxyZWFkeSBsb2NrZWQgYW5kIGlu
Y29tcGxldGUuCi0gICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogb3ZlcndyaXRlQW5kTG9j
a0NhY2hlKGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqLCBjb25zdCBTY2FsZWRJbWFnZUZyYWdt
ZW50KiwgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50Pik7Ci0KLSAgICAvLyBSZW1vdmUg
YWxsIGNhY2hlIGVudHJpZXMgaW5kZXhlZCBieSBJbWFnZUZyYW1lR2VuZXJhdG9yLgotICAgIHZv
aWQgcmVtb3ZlQ2FjaGVJbmRleGVkQnlHZW5lcmF0b3IoY29uc3QgSW1hZ2VGcmFtZUdlbmVyYXRv
ciopOwotCi0gICAgdm9pZCBzZXRDYWNoZUxpbWl0SW5CeXRlcyhzaXplX3QpOwotICAgIHNpemVf
dCBtZW1vcnlVc2FnZUluQnl0ZXMoKTsKLSAgICB1bnNpZ25lZCBjYWNoZUVudHJpZXMoKTsKLQot
cHJpdmF0ZToKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9y
KiwgU2tJU2l6ZT4gQ2FjaGVJZGVudGlmaWVyOwotCi0gICAgY2xhc3MgQ2FjaGVFbnRyeSA6IHB1
YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxDYWNoZUVudHJ5PiB7Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBXVEY6OkRvdWJseUxpbmtlZExpc3ROb2RlPENhY2hlRW50cnk+OwotICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8Q2FjaGVFbnRyeT4gY3JlYXRlQW5kVXNlKGNvbnN0
IEltYWdlRnJhbWVHZW5lcmF0b3IqIGdlbmVyYXRvciwgUGFzc093blB0cjxTY2FsZWRJbWFnZUZy
YWdtZW50PiBpbWFnZSwgUGFzc093blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIgPSBudWxscHRy
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENhY2hlRW50cnko
Z2VuZXJhdG9yLCBpbWFnZSwgZGVjb2RlciwgMSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQ2Fj
aGVFbnRyeShjb25zdCBJbWFnZUZyYW1lR2VuZXJhdG9yKiBnZW5lcmF0b3IsIFBhc3NPd25QdHI8
U2NhbGVkSW1hZ2VGcmFnbWVudD4gaW1hZ2UsIFBhc3NPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNv
ZGVyLCBpbnQgY291bnQpCi0gICAgICAgICAgICA6IG1fcHJldigwKQotICAgICAgICAgICAgLCBt
X25leHQoMCkKLSAgICAgICAgICAgICwgbV9nZW5lcmF0b3IoZ2VuZXJhdG9yKQotICAgICAgICAg
ICAgLCBtX2NhY2hlZEltYWdlKGltYWdlKQotICAgICAgICAgICAgLCBtX2NhY2hlZERlY29kZXIo
ZGVjb2RlcikKLSAgICAgICAgICAgICwgbV91c2VDb3VudChjb3VudCkKLSAgICAgICAgICAgICwg
bV9pc0Rpc2NhcmRhYmxlKERpc2NhcmRhYmxlUGl4ZWxSZWY6OmlzRGlzY2FyZGFibGUobV9jYWNo
ZWRJbWFnZS0+Yml0bWFwKCkucGl4ZWxSZWYoKSkpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0g
ICAgICAgIH5DYWNoZUVudHJ5KCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFtX3Vz
ZUNvdW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIENhY2hlSWRlbnRpZmllciBjYWNoZUtleSgp
IGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG1fZ2VuZXJhdG9yLCBtX2NhY2hlZEltYWdl
LT5zY2FsZWRTaXplKCkpOyB9Ci0gICAgICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNh
Y2hlZEltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZS5nZXQoKTsgfQotICAgICAg
ICBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJbWFnZSgpIHsgcmV0dXJuIG1fY2FjaGVkSW1h
Z2UuZ2V0KCk7IH0KLSAgICAgICAgSW1hZ2VEZWNvZGVyKiBjYWNoZWREZWNvZGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWNoZWREZWNvZGVyLmdldCgpOyB9Ci0gICAgICAgIFBhc3NPd25QdHI8SW1h
Z2VEZWNvZGVyPiBvdmVyd3JpdGVDYWNoZWRJbWFnZShQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJh
Z21lbnQ+IGltYWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2lzRGlzY2FyZGFibGUgPSBE
aXNjYXJkYWJsZVBpeGVsUmVmOjppc0Rpc2NhcmRhYmxlKGltYWdlLT5iaXRtYXAoKS5waXhlbFJl
ZigpKTsKLSAgICAgICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBpbWFnZTsKLSAgICAgICAgICAgIGlm
IChtX2NhY2hlZEltYWdlLT5pc0NvbXBsZXRlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1f
Y2FjaGVkRGVjb2Rlci5yZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgfQotICAgICAgICBpbnQgdXNlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3VzZUNvdW50
OyB9Ci0gICAgICAgIHZvaWQgaW5jcmVtZW50VXNlQ291bnQoKSB7ICsrbV91c2VDb3VudDsgfQot
ICAgICAgICB2b2lkIGRlY3JlbWVudFVzZUNvdW50KCkgeyAtLW1fdXNlQ291bnQ7IEFTU0VSVCht
X3VzZUNvdW50ID49IDApOyB9Ci0gICAgICAgIGJvb2wgaXNEaXNjYXJkYWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNEaXNjYXJkYWJsZTsgfQotCi0gICAgICAgIC8vIEZJWE1FOiBnZXRTYWZlU2l6
ZSgpIHJldHVybnMgc2l6ZSBpbiBieXRlcyB0cnVuY2F0ZWQgdG8gYSAzMi1iaXRzIGludGVnZXIu
Ci0gICAgICAgIC8vICAgICAgICBGaW5kIGEgd2F5IHRvIGdldCB0aGUgc2l6ZSBpbiA2NC1iaXRz
LgotICAgICAgICBzaXplX3QgbWVtb3J5VXNhZ2VJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gY2Fj
aGVkSW1hZ2UoKS0+Yml0bWFwKCkuZ2V0U2FmZVNpemUoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgQ2FjaGVFbnRyeSogbV9wcmV2OwotICAgICAgICBDYWNoZUVudHJ5KiBtX25leHQ7Ci0g
ICAgICAgIGNvbnN0IEltYWdlRnJhbWVHZW5lcmF0b3IqIG1fZ2VuZXJhdG9yOwotICAgICAgICBP
d25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gbV9jYWNoZWRJbWFnZTsKLSAgICAgICAgT3duUHRy
PEltYWdlRGVjb2Rlcj4gbV9jYWNoZWREZWNvZGVyOwotICAgICAgICBpbnQgbV91c2VDb3VudDsK
LSAgICAgICAgYm9vbCBtX2lzRGlzY2FyZGFibGU7Ci0gICAgfTsKLQotICAgIEltYWdlRGVjb2Rp
bmdTdG9yZSgpOwotCi0gICAgdm9pZCBwcnVuZSgpOwotCi0gICAgLy8gVGhlc2UgbWV0aG9kcyBh
cmUgY2FsbGVkIHdoaWxlIG1fbXV0ZXggaXMgbG9ja2VkLgotICAgIHZvaWQgaW5zZXJ0Q2FjaGVJ
bnRlcm5hbChQYXNzT3duUHRyPENhY2hlRW50cnk+KTsKLSAgICB2b2lkIHJlbW92ZUZyb21DYWNo
ZUludGVybmFsKGNvbnN0IENhY2hlRW50cnkqLCBWZWN0b3I8T3duUHRyPENhY2hlRW50cnk+ID4q
IGRlbGV0aW9uTGlzdCk7Ci0gICAgdm9pZCByZW1vdmVGcm9tQ2FjaGVMaXN0SW50ZXJuYWwoY29u
c3QgVmVjdG9yPE93blB0cjxDYWNoZUVudHJ5PiA+JiBkZWxldGlvbkxpc3QpOwotICAgIHZvaWQg
aW5jcmVtZW50TWVtb3J5VXNhZ2Uoc2l6ZV90IHNpemUpIHsgbV9tZW1vcnlVc2FnZUluQnl0ZXMg
Kz0gc2l6ZTsgfQotICAgIHZvaWQgZGVjcmVtZW50TWVtb3J5VXNhZ2Uoc2l6ZV90IHNpemUpCi0g
ICAgewotICAgICAgICBBU1NFUlQobV9tZW1vcnlVc2FnZUluQnl0ZXMgPj0gc2l6ZSk7Ci0gICAg
ICAgIG1fbWVtb3J5VXNhZ2VJbkJ5dGVzIC09IHNpemU7Ci0gICAgfQotCi0gICAgLy8gSGVhZCBv
ZiB0aGlzIGxpc3QgaXMgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgY2FjaGUgZW50cnkuCi0gICAg
Ly8gVGFpbCBvZiB0aGlzIGxpc3QgaXMgdGhlIG1vc3QgcmVjZW50bHkgdXNlZCBjYWNoZSBlbnRy
eS4KLSAgICBEb3VibHlMaW5rZWRMaXN0PENhY2hlRW50cnk+IG1fb3JkZXJlZENhY2hlTGlzdDsK
LQotICAgIHR5cGVkZWYgSGFzaE1hcDxDYWNoZUlkZW50aWZpZXIsIE93blB0cjxDYWNoZUVudHJ5
PiA+IENhY2hlTWFwOwotICAgIENhY2hlTWFwIG1fY2FjaGVNYXA7Ci0KLSAgICB0eXBlZGVmIEhh
c2hTZXQ8U2tJU2l6ZT4gU2l6ZVNldDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgSW1hZ2VG
cmFtZUdlbmVyYXRvciosIFNpemVTZXQ+IENhY2hlZFNpemVNYXA7Ci0gICAgQ2FjaGVkU2l6ZU1h
cCBtX2NhY2hlZFNpemVNYXA7Ci0KLSAgICBzaXplX3QgbV9jYWNoZUxpbWl0SW5CeXRlczsKLSAg
ICBzaXplX3QgbV9tZW1vcnlVc2FnZUluQnl0ZXM7Ci0KLSAgICAvLyBQcm90ZWN0IGNvbmN1cnJl
bnQgYWNjZXNzIHRvIHRoZXNlIG1lbWJlcnM6Ci0gICAgLy8gICBtX29yZGVyZWRDYWNoZUxpc3QK
LSAgICAvLyAgIG1fY2FjaGVNYXAgYW5kIGFsbCBDYWNoZUVudHJ5cyBzdG9yZWQgaW4gaXQKLSAg
ICAvLyAgIG1fY2FjaGVkU2l6ZU1hcAotICAgIC8vICAgbV9jYWNoZUxpbWl0SW5CeXRlcwotICAg
IC8vICAgbV9tZW1vcnlVc2FnZUluQnl0ZXMKLSAgICAvLyBUaGlzIG11dGV4IGFsc28gcHJvdGVj
dHMgY2FsbHMgdG8gdW5kZXJseWluZyBza0JpdG1hcCdzCi0gICAgLy8gbG9ja1BpeGVscygpL3Vu
bG9ja1BpeGVscygpIGFzIHRoZXkgYXJlIG5vdCB0aHJlYWRzYWZlLgotICAgIE11dGV4IG1fbXV0
ZXg7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDI2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaW5jbHVkZSAiSW1hZ2VGcmFtZUdlbmVyYXRvci5oIgotCi0jaW5jbHVkZSAi
SW1hZ2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGluZ1N0b3JlLmgiCi0jaW5jbHVk
ZSAiU2NhbGVkSW1hZ2VGcmFnbWVudC5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIlRyYWNlRXZlbnQuaCIKLQotI2luY2x1ZGUgInNraWEvZXh0L2ltYWdlX29wZXJhdGlv
bnMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgewotCi1za2lhOjpJbWFn
ZU9wZXJhdGlvbnM6OlJlc2l6ZU1ldGhvZCByZXNpemVNZXRob2QoKQotewotICAgIHJldHVybiBz
a2lhOjpJbWFnZU9wZXJhdGlvbnM6OlJFU0laRV9MQU5DWk9TMzsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UKLQotSW1hZ2VGcmFtZUdlbmVyYXRvcjo6SW1hZ2VGcmFtZUdlbmVyYXRvcihjb25zdCBTa0lT
aXplJiBmdWxsU2l6ZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQotICAgIDogbV9mdWxsU2l6ZShmdWxsU2l6ZSkKLSAgICAsIG1fZGVjb2RlRmFp
bGVkQW5kRW1wdHkoZmFsc2UpCi0gICAgLCBtX2hhc0FscGhhKHRydWUpCi0gICAgLCBtX2RlY29k
ZUNvdW50KDApCi17Ci0gICAgc2V0RGF0YShkYXRhLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwot
fQotCi1JbWFnZUZyYW1lR2VuZXJhdG9yOjp+SW1hZ2VGcmFtZUdlbmVyYXRvcigpCi17Ci0gICAg
Ly8gRklYTUU6IFRoaXMgY2hlY2sgaXMgbm90IHJlYWxseSB0aHJlYWQtc2FmZS4gVGhpcyBzaG91
bGQgYmUgY2hhbmdlZCB0bzoKLSAgICAvLyBJbWFnZURlY29kaW5nU3RvcmU6OnJlbW92ZUNhY2hl
RnJvbUluc3RhbmNlKHRoaXMpOwotICAgIC8vIFdoaWNoIHVzZXMgYSBsb2NrIGludGVybmFsbHku
Ci0gICAgaWYgKEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKSkKLSAgICAgICAgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5yZW1vdmVDYWNoZUluZGV4ZWRCeUdlbmVyYXRvcih0
aGlzKTsKLX0KLQotdm9pZCBJbWFnZUZyYW1lR2VuZXJhdG9yOjpzZXREYXRhKFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAgICBtX2RhdGEu
c2V0RGF0YShkYXRhLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwotfQotCi12b2lkIEltYWdlRnJh
bWVHZW5lcmF0b3I6OmNvcHlEYXRhKFJlZlB0cjxTaGFyZWRCdWZmZXI+KiBkYXRhLCBib29sKiBh
bGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgU2hhcmVkQnVmZmVyKiBidWZmZXIgPSAwOwotICAgIG1f
ZGF0YS5kYXRhKCZidWZmZXIsIGFsbERhdGFSZWNlaXZlZCk7Ci0gICAgaWYgKGJ1ZmZlcikKLSAg
ICAgICAgKmRhdGEgPSBidWZmZXItPmNvcHkoKTsKLX0KLQotY29uc3QgU2NhbGVkSW1hZ2VGcmFn
bWVudCogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYg
c2NhbGVkU2l6ZSkKLXsKLSAgICAvLyBQcmV2ZW50cyBjb25jdXJyZW50IGRlY29kZSBvciBzY2Fs
ZSBvcGVyYXRpb25zIG9uIHRoZSBzYW1lIGltYWdlIGRhdGEuCi0gICAgLy8gTXVsdGlwbGUgTGF6
eURlY29kaW5nUGl4ZWxSZWZzIGNhbiBjYWxsIHRoaXMgbWV0aG9kIGF0IHRoZSBzYW1lIHRpbWUu
Ci0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX2RlY29kZU11dGV4KTsKLSAgICBpZiAobV9kZWNvZGVG
YWlsZWRBbmRFbXB0eSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjb25zdCBTY2FsZWRJbWFn
ZUZyYWdtZW50KiBjYWNoZWRJbWFnZSA9IDA7Ci0KLSAgICBjYWNoZWRJbWFnZSA9IHRyeVRvTG9j
a0NvbXBsZXRlQ2FjaGUoc2NhbGVkU2l6ZSk7Ci0gICAgaWYgKGNhY2hlZEltYWdlKQotICAgICAg
ICByZXR1cm4gY2FjaGVkSW1hZ2U7Ci0KLSAgICBUUkFDRV9FVkVOVDIoIndlYmtpdCIsICJJbWFn
ZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGVBbmRTY2FsZSIsICJnZW5lcmF0b3IiLCB0aGlzLCAiZGVj
b2RlQ291bnQiLCArK21fZGVjb2RlQ291bnQpOwotCi0gICAgY2FjaGVkSW1hZ2UgPSB0cnlUb1Nj
YWxlKDAsIHNjYWxlZFNpemUpOwotICAgIGlmIChjYWNoZWRJbWFnZSkKLSAgICAgICAgcmV0dXJu
IGNhY2hlZEltYWdlOwotCi0gICAgY2FjaGVkSW1hZ2UgPSB0cnlUb1Jlc3VtZURlY29kZUFuZFNj
YWxlKHNjYWxlZFNpemUpOwotICAgIGlmIChjYWNoZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuIGNh
Y2hlZEltYWdlOwotCi0gICAgY2FjaGVkSW1hZ2UgPSB0cnlUb0RlY29kZUFuZFNjYWxlKHNjYWxl
ZFNpemUpOwotICAgIGlmIChjYWNoZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZEltYWdl
OwotICAgIHJldHVybiAwOwotfQotCi1jb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZy
YW1lR2VuZXJhdG9yOjp0cnlUb0xvY2tDb21wbGV0ZUNhY2hlKGNvbnN0IFNrSVNpemUmIHNjYWxl
ZFNpemUpCi17Ci0gICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UgPSAw
OwotICAgIGlmIChJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxvY2tDYWNoZSh0aGlz
LCBzY2FsZWRTaXplLCBJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlTXVzdEJlQ29tcGxldGUsICZj
YWNoZWRJbWFnZSkpCi0gICAgICAgIHJldHVybiBjYWNoZWRJbWFnZTsKLSAgICByZXR1cm4gMDsK
LX0KLQotY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5
VG9TY2FsZShjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBmdWxsU2l6ZUltYWdlLCBjb25zdCBT
a0lTaXplJiBzY2FsZWRTaXplKQotewotICAgIFRSQUNFX0VWRU5UMCgid2Via2l0IiwgIkltYWdl
RnJhbWVHZW5lcmF0b3I6OnRyeVRvU2NhbGUiKTsKLQotICAgIC8vIElmIHRoZSByZXF1ZXN0ZWQg
c2NhbGVkIHNpemUgaXMgdGhlIHNhbWUgYXMgdGhlIGZ1bGwgc2l6ZSB0aGVuIGV4aXQKLSAgICAv
LyBlYXJseS4gVGhpcyBzYXZlcyBhIGNhY2hlIGxvb2t1cC4KLSAgICBpZiAoc2NhbGVkU2l6ZSA9
PSBtX2Z1bGxTaXplKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghZnVsbFNpemVJbWFn
ZSAmJiAhSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5sb2NrQ2FjaGUodGhpcywgbV9m
dWxsU2l6ZSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjpDYWNoZU11c3RCZUNvbXBsZXRlLCAmZnVsbFNp
emVJbWFnZSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgRGlzY2FyZGFibGVQaXhlbFJlZkFs
bG9jYXRvciBhbGxvY2F0b3I7Ci0gICAgLy8gVGhpcyBjYWxsIGFsbG9jYXRlcyB0aGUgRGlzY2Fy
ZGFibGVQaXhlbFJlZiBhbmQgbG9jay91bmxvY2tzIGl0Ci0gICAgLy8gYWZ0ZXJ3YXJkcy4gU28g
dGhlIG1lbW9yeSBhbGxvY2F0ZWQgdG8gdGhlIHNjYWxlZEJpdG1hcCBjYW4gYmUKLSAgICAvLyBk
aXNjYXJkZWQgYWZ0ZXIgdGhpcyBjYWxsLiBOZWVkIHRvIGxvY2sgdGhlIHNjYWxlZEJpdG1hcCBh
bmQKLSAgICAvLyBjaGVjayB0aGUgcGl4ZWxzIGJlZm9yZSB1c2luZyBpdCBuZXh0IHRpbWUuCi0g
ICAgU2tCaXRtYXAgc2NhbGVkQml0bWFwID0gc2tpYTo6SW1hZ2VPcGVyYXRpb25zOjpSZXNpemUo
ZnVsbFNpemVJbWFnZS0+Yml0bWFwKCksIHJlc2l6ZU1ldGhvZCgpLCBzY2FsZWRTaXplLndpZHRo
KCksIHNjYWxlZFNpemUuaGVpZ2h0KCksICZhbGxvY2F0b3IpOwotCi0gICAgT3duUHRyPFNjYWxl
ZEltYWdlRnJhZ21lbnQ+IHNjYWxlZEltYWdlID0gU2NhbGVkSW1hZ2VGcmFnbWVudDo6Y3JlYXRl
KHNjYWxlZFNpemUsIHNjYWxlZEJpdG1hcCwgZnVsbFNpemVJbWFnZS0+aXNDb21wbGV0ZSgpKTsK
LQotICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUodGhpcywg
ZnVsbFNpemVJbWFnZSk7Ci0KLSAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRJ
bWFnZSA9IDA7Ci0KLSAgICAvLyBJZiBhIGNhY2hlIGxvb2t1cCBpcyBzdWNjZXNzZnVsIHRoZW4g
dGhlIGNhY2hlIGVudHJ5IG11c3QgYmUgaW5jb21wbGV0ZQotICAgIC8vIHRoZXJlZm9yZSBpdCBp
cyBzYWZlIHRvIG92ZXJ3cml0ZS4KLSAgICBpZiAoSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5j
ZSgpLT5sb2NrQ2FjaGUodGhpcywgc2NhbGVkU2l6ZSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjpDYWNo
ZUNhbkJlSW5jb21wbGV0ZSwgJmNhY2hlZEltYWdlKSkKLSAgICAgICAgcmV0dXJuIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+b3ZlcndyaXRlQW5kTG9ja0NhY2hlKHRoaXMsIGNhY2hl
ZEltYWdlLCBzY2FsZWRJbWFnZS5yZWxlYXNlKCkpOwotICAgIHJldHVybiBJbWFnZURlY29kaW5n
U3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFuZExvY2tDYWNoZSh0aGlzLCBzY2FsZWRJbWFnZS5y
ZWxlYXNlKCkpOwotfQotCi1jb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZyYW1lR2Vu
ZXJhdG9yOjp0cnlUb1Jlc3VtZURlY29kZUFuZFNjYWxlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNp
emUpCi17Ci0gICAgVFJBQ0VfRVZFTlQwKCJ3ZWJraXQiLCAiSW1hZ2VGcmFtZUdlbmVyYXRvcjo6
dHJ5VG9SZXN1bWVEZWNvZGVBbmRTY2FsZSIpOwotCi0gICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFn
bWVudCogY2FjaGVkSW1hZ2UgPSAwOwotICAgIEltYWdlRGVjb2RlciogY2FjaGVkRGVjb2RlciA9
IDA7Ci0gICAgaWYgKCFJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxvY2tDYWNoZSh0
aGlzLCBtX2Z1bGxTaXplLCBJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlQ2FuQmVJbmNvbXBsZXRl
LCAmY2FjaGVkSW1hZ2UsICZjYWNoZWREZWNvZGVyKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
QVNTRVJUKGNhY2hlZERlY29kZXIpOwotCi0gICAgaWYgKG1fZGF0YS5oYXNOZXdEYXRhKCkpIHsK
LSAgICAgICAgLy8gRm9yIHNpbmdsZSBmcmFtZSBpbWFnZXMsIHRoZSBhYm92ZSBJbWFnZURlY29k
aW5nU3RvcmU6OmxvY2tDYWNoZSgpCi0gICAgICAgIC8vIGNhbGwgc2hvdWxkIGxvY2sgdGhlIHBp
eGVsUmVmLiBBcyBhIHJlc3VsdCwgdGhpcyBsb2NrRnJhbWVCdWZmZXJzKCkKLSAgICAgICAgLy8g
Y2FsbCBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuCi0gICAgICAgIC8vIFRPRE86IHRoaXMgZG9lcyBu
b3Qgd29yayBmb3IgdGhlIG11bHRpZnJhbWUgaW1hZ2VzLCB3aGljaCBhcmUgbm90Ci0gICAgICAg
IC8vIHlldCBzdXBwb3J0ZWQgYnkgdGhpcyBjbGFzcy4KLSAgICAgICAgYm9vbCBmcmFtZUJ1ZmZl
cnNMb2NrZWQgPSBjYWNoZWREZWNvZGVyLT5sb2NrRnJhbWVCdWZmZXJzKCk7Ci0gICAgICAgIEFT
U0VSVF9VTlVTRUQoZnJhbWVCdWZmZXJzTG9ja2VkLCBmcmFtZUJ1ZmZlcnNMb2NrZWQpOwotICAg
ICAgICAvLyBPbmx5IGRvIGRlY29kaW5nIGlmIHRoZXJlIGlzIG5ldyBkYXRhLgotICAgICAgICBP
d25QdHI8U2NhbGVkSW1hZ2VGcmFnbWVudD4gZnVsbFNpemVJbWFnZSA9IGRlY29kZSgmY2FjaGVk
RGVjb2Rlcik7Ci0gICAgICAgIGNhY2hlZEltYWdlID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0
YW5jZSgpLT5vdmVyd3JpdGVBbmRMb2NrQ2FjaGUodGhpcywgY2FjaGVkSW1hZ2UsIGZ1bGxTaXpl
SW1hZ2UucmVsZWFzZSgpKTsKLSAgICAgICAgLy8gSWYgdGhlIGltYWdlIGlzIHBhcnRpYWxseSBk
ZWNvZGVkLCB1bmxvY2sgdGhlIGZyYW1lcyBzbyB0aGF0IGl0Ci0gICAgICAgIC8vIGNhbiBiZSBl
dmljdGVkIGZyb20gdGhlIG1lbW9yeS4gRm9yIGZ1bGx5IGRlY29kZWQgaW1hZ2VzLAotICAgICAg
ICAvLyBJbWFnZURlY29kaW5nU3RvcmUgc2hvdWxkIGhhdmUgZGVsZXRlZCB0aGUgZGVjb2RlciBo
ZXJlLgotICAgICAgICBpZiAoIWNhY2hlZEltYWdlLT5pc0NvbXBsZXRlKCkpCi0gICAgICAgICAg
ICBjYWNoZWREZWNvZGVyLT51bmxvY2tGcmFtZUJ1ZmZlcnMoKTsKLSAgICB9Ci0KLSAgICBpZiAo
bV9mdWxsU2l6ZSA9PSBzY2FsZWRTaXplKQotICAgICAgICByZXR1cm4gY2FjaGVkSW1hZ2U7Ci0g
ICAgcmV0dXJuIHRyeVRvU2NhbGUoY2FjaGVkSW1hZ2UsIHNjYWxlZFNpemUpOwotfQotCi1jb25z
dCBTY2FsZWRJbWFnZUZyYWdtZW50KiBJbWFnZUZyYW1lR2VuZXJhdG9yOjp0cnlUb0RlY29kZUFu
ZFNjYWxlKGNvbnN0IFNrSVNpemUmIHNjYWxlZFNpemUpCi17Ci0gICAgVFJBQ0VfRVZFTlQwKCJ3
ZWJraXQiLCAiSW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9EZWNvZGVBbmRTY2FsZSIpOwotCi0g
ICAgSW1hZ2VEZWNvZGVyKiBkZWNvZGVyID0gMDsKLSAgICBPd25QdHI8U2NhbGVkSW1hZ2VGcmFn
bWVudD4gZnVsbFNpemVJbWFnZSA9IGRlY29kZSgmZGVjb2Rlcik7Ci0KLSAgICBpZiAoIWRlY29k
ZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgT3duUHRyPEltYWdlRGVjb2Rlcj4gZGVjb2Rl
ckNvbnRhaW5lciA9IGFkb3B0UHRyKGRlY29kZXIpOwotCi0gICAgaWYgKCFmdWxsU2l6ZUltYWdl
KSB7Ci0gICAgICAgIC8vIElmIGRlY29kZSBoYXMgZmFpbGVkIGFuZCByZXN1bHRlZCBhbiBlbXB0
eSBpbWFnZSB3ZSBuZWVkIHRvIG1ha2UKLSAgICAgICAgLy8gc3VyZSB3ZSBkb24ndCBkbyB3YXN0
ZWQgd29yayBpbiB0aGUgZnV0dXJlLgotICAgICAgICBtX2RlY29kZUZhaWxlZEFuZEVtcHR5ID0g
ZGVjb2RlckNvbnRhaW5lci0+ZmFpbGVkKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hlZEZ1bGxTaXplSW1hZ2UgPSBJbWFn
ZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFuZExvY2tDYWNoZSgKLSAgICAgICAg
dGhpcywgZnVsbFNpemVJbWFnZS5yZWxlYXNlKCksIGRlY29kZXJDb250YWluZXIucmVsZWFzZSgp
KTsKLSAgICAvLyBUaGUgbmV3bHkgY3JlYXRlZCBTa0JpdG1hcCBpbiB0aGUgZGVjb2RlciBpcyBs
b2NrZWQuIFVubG9jayBpdCBoZXJlCi0gICAgLy8gaWYgdGhlIGltYWdlIGlzIHBhcnRpYWxseSBk
ZWNvZGVkLgotICAgIGlmICghY2FjaGVkRnVsbFNpemVJbWFnZS0+aXNDb21wbGV0ZSgpKQotICAg
ICAgICBkZWNvZGVyLT51bmxvY2tGcmFtZUJ1ZmZlcnMoKTsKLQotICAgIGlmIChtX2Z1bGxTaXpl
ID09IHNjYWxlZFNpemUpCi0gICAgICAgIHJldHVybiBjYWNoZWRGdWxsU2l6ZUltYWdlOwotICAg
IHJldHVybiB0cnlUb1NjYWxlKGNhY2hlZEZ1bGxTaXplSW1hZ2UsIHNjYWxlZFNpemUpOwotfQot
Ci1QYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IEltYWdlRnJhbWVHZW5lcmF0b3I6OmRl
Y29kZShJbWFnZURlY29kZXIqKiBkZWNvZGVyKQotewotICAgIFRSQUNFX0VWRU5UMigid2Via2l0
IiwgIkltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZSIsICJ3aWR0aCIsIG1fZnVsbFNpemUud2lk
dGgoKSwgImhlaWdodCIsIG1fZnVsbFNpemUuaGVpZ2h0KCkpOwotCi0gICAgQVNTRVJUKGRlY29k
ZXIpOwotICAgIFNoYXJlZEJ1ZmZlciogZGF0YSA9IDA7Ci0gICAgYm9vbCBhbGxEYXRhUmVjZWl2
ZWQgPSBmYWxzZTsKLSAgICBtX2RhdGEuZGF0YSgmZGF0YSwgJmFsbERhdGFSZWNlaXZlZCk7Ci0K
LSAgICAvLyBUcnkgdG8gY3JlYXRlIGFuIEltYWdlRGVjb2RlciBpZiB3ZSBhcmUgbm90IGdpdmVu
IG9uZS4KLSAgICBpZiAoISpkZWNvZGVyKSB7Ci0gICAgICAgICpkZWNvZGVyID0gSW1hZ2VEZWNv
ZGVyOjpjcmVhdGUoKmRhdGEsIEltYWdlU291cmNlOjpBbHBoYVByZW11bHRpcGxpZWQsIEltYWdl
U291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpOwotCi0gICAgICAgIGlmICghKmRl
Y29kZXIgJiYgbV9pbWFnZURlY29kZXJGYWN0b3J5KQotICAgICAgICAgICAgKmRlY29kZXIgPSBt
X2ltYWdlRGVjb2RlckZhY3RvcnktPmNyZWF0ZSgpLmxlYWtQdHIoKTsKLQotICAgICAgICBpZiAo
ISpkZWNvZGVyKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8g
VE9ETzogdGhpcyBpcyB2ZXJ5IHVnbHkuIFdlIG5lZWQgdG8gcmVmYWN0b3IgdGhlIHdheSBob3cg
d2UgY2FuIHBhc3MgYQotICAgIC8vIG1lbW9yeSBhbGxvY2F0b3IgdG8gaW1hZ2UgZGVjb2RlcnMu
Ci0gICAgKCpkZWNvZGVyKS0+c2V0TWVtb3J5QWxsb2NhdG9yKCZtX2FsbG9jYXRvcik7Ci0gICAg
KCpkZWNvZGVyKS0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwotICAgIC8vIElmIHRo
aXMgY2FsbCByZXR1cm5zIGEgbmV3bHkgYWxsb2NhdGVkIERpc2NhcmRhYmxlUGl4ZWxSZWYsIHRo
ZW4KLSAgICAvLyBJbWFnZUZyYW1lOjptX2JpdG1hcCBhbmQgdGhlIGNvbnRhaW5lZCBEaXNjYXJk
YWJsZVBpeGVsUmVmIGFyZSBsb2NrZWQuCi0gICAgLy8gVGhleSB3aWxsIGJlIHVubG9ja2VkIGFm
dGVyIHRoZSBpbWFnZSBmcmFnbWVudCBpcyBpbnNlcnRlZCBpbnRvCi0gICAgLy8gSW1hZ2VEZWNv
ZGluZ1N0b3JlLgotICAgIEltYWdlRnJhbWUqIGZyYW1lID0gKCpkZWNvZGVyKS0+ZnJhbWVCdWZm
ZXJBdEluZGV4KDApOwotICAgICgqZGVjb2RlciktPnNldERhdGEoMCwgZmFsc2UpOyAvLyBVbnJl
ZiBTaGFyZWRCdWZmZXIgZnJvbSBJbWFnZURlY29kZXIuCi0KLSAgICBpZiAoIWZyYW1lIHx8IGZy
YW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGJvb2wgaXNDb21wbGV0ZSA9IGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFn
ZUZyYW1lOjpGcmFtZUNvbXBsZXRlOwotICAgIFNrQml0bWFwIGZ1bGxTaXplQml0bWFwID0gZnJh
bWUtPmdldFNrQml0bWFwKCk7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fYWxw
aGFNdXRleCk7Ci0gICAgICAgIG1faGFzQWxwaGEgPSAhZnVsbFNpemVCaXRtYXAuaXNPcGFxdWUo
KTsKLSAgICB9Ci0gICAgQVNTRVJUKGZ1bGxTaXplQml0bWFwLndpZHRoKCkgPT0gbV9mdWxsU2l6
ZS53aWR0aCgpICYmIGZ1bGxTaXplQml0bWFwLmhlaWdodCgpID09IG1fZnVsbFNpemUuaGVpZ2h0
KCkpOwotCi0gICAgcmV0dXJuIFNjYWxlZEltYWdlRnJhZ21lbnQ6OmNyZWF0ZShtX2Z1bGxTaXpl
LCBmdWxsU2l6ZUJpdG1hcCwgaXNDb21wbGV0ZSk7Ci19Ci0KLWJvb2wgSW1hZ2VGcmFtZUdlbmVy
YXRvcjo6aGFzQWxwaGEoKQotewotICAgIE11dGV4TG9ja2VyIGxvY2sobV9hbHBoYU11dGV4KTsK
LSAgICByZXR1cm4gbV9oYXNBbHBoYTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdl
bmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTQ3NzMyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJ
bWFnZUZyYW1lR2VuZXJhdG9yX2gKLSNkZWZpbmUgSW1hZ2VGcmFtZUdlbmVyYXRvcl9oCi0KLSNp
bmNsdWRlICJEaXNjYXJkYWJsZVBpeGVsUmVmLmgiCi0jaW5jbHVkZSAiU2tUeXBlcy5oIgotI2lu
Y2x1ZGUgIlNrQml0bWFwLmgiCi0jaW5jbHVkZSAiU2tTaXplLmgiCi0jaW5jbHVkZSAiVGhyZWFk
U2FmZURhdGFUcmFuc3BvcnQuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW1hZ2VEZWNvZGVyOwotY2xh
c3MgU2NhbGVkSW1hZ2VGcmFnbWVudDsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLQotY2xhc3MgSW1h
Z2VEZWNvZGVyRmFjdG9yeSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SW1hZ2VEZWNvZGVyRmFj
dG9yeSgpIHsgfQotICAgIHZpcnR1YWwgUGFzc093blB0cjxJbWFnZURlY29kZXI+IGNyZWF0ZSgp
ID0gMDsKLX07Ci0KLWNsYXNzIEltYWdlRnJhbWVHZW5lcmF0b3IgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8SW1hZ2VGcmFtZUdlbmVyYXRvcj4gewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEltYWdlRnJhbWVHZW5lcmF0b3I+IGNyZWF0ZShjb25zdCBTa0lTaXplJiBmdWxs
U2l6ZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVk
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUZyYW1lR2VuZXJhdG9y
KGZ1bGxTaXplLCBkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpKTsKLSAgICB9Ci0KLSAgICBJbWFnZUZy
YW1lR2VuZXJhdG9yKGNvbnN0IFNrSVNpemUmIGZ1bGxTaXplLCBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4sIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKLSAgICB+SW1hZ2VGcmFtZUdlbmVyYXRvcigp
OwotCi0gICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogZGVjb2RlQW5kU2NhbGUoY29uc3Qg
U2tJU2l6ZSYgc2NhbGVkU2l6ZSk7Ci0KLSAgICB2b2lkIHNldERhdGEoUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+LCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0KLSAgICAvLyBDcmVhdGVzIGEgbmV3
IFNoYXJlZEJ1ZmZlciBjb250YWluaW5nIHRoZSBkYXRhIHJlY2VpdmVkIHNvIGZhci4KLSAgICB2
b2lkIGNvcHlEYXRhKFJlZlB0cjxTaGFyZWRCdWZmZXI+KiwgYm9vbCogYWxsRGF0YVJlY2VpdmVk
KTsKLQotICAgIHZvaWQgc2V0SW1hZ2VEZWNvZGVyRmFjdG9yeUZvclRlc3RpbmcoUGFzc093blB0
cjxJbWFnZURlY29kZXJGYWN0b3J5PiBmYWN0b3J5KSB7IG1faW1hZ2VEZWNvZGVyRmFjdG9yeSA9
IGZhY3Rvcnk7IH0KLQotICAgIGJvb2wgaGFzQWxwaGEoKTsKLQotcHJpdmF0ZToKLSAgICAvLyBU
aGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgd2hpbGUgbV9kZWNvZGVNdXRleCBpcyBsb2NrZWQuCi0g
ICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdHJ5VG9Mb2NrQ29tcGxldGVDYWNoZShjb25z
dCBTa0lTaXplJiBzY2FsZWRTaXplKTsKLSAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiB0
cnlUb1NjYWxlKGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGZ1bGxTaXplSW1hZ2UsIGNvbnN0
IFNrSVNpemUmIHNjYWxlZFNpemUpOwotICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRy
eVRvUmVzdW1lRGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSk7Ci0gICAg
Y29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdHJ5VG9EZWNvZGVBbmRTY2FsZShjb25zdCBTa0lT
aXplJiBzY2FsZWRTaXplKTsKLQotICAgIC8vIFVzZSB0aGUgZ2l2ZW4gZGVjb2RlciB0byBkZWNv
ZGUuIElmIGEgZGVjb2RlciBpcyBub3QgZ2l2ZW4gdGhlbiB0cnkgdG8gY3JlYXRlIG9uZS4KLSAg
ICBQYXNzT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGRlY29kZShJbWFnZURlY29kZXIqKik7
Ci0KLSAgICBTa0lTaXplIG1fZnVsbFNpemU7Ci0gICAgVGhyZWFkU2FmZURhdGFUcmFuc3BvcnQg
bV9kYXRhOwotICAgIGJvb2wgbV9kZWNvZGVGYWlsZWRBbmRFbXB0eTsKLSAgICBib29sIG1faGFz
QWxwaGE7Ci0gICAgaW50IG1fZGVjb2RlQ291bnQ7Ci0gICAgRGlzY2FyZGFibGVQaXhlbFJlZkFs
bG9jYXRvciBtX2FsbG9jYXRvcjsKLQotICAgIE93blB0cjxJbWFnZURlY29kZXJGYWN0b3J5PiBt
X2ltYWdlRGVjb2RlckZhY3Rvcnk7Ci0KLSAgICAvLyBQcmV2ZW50cyBtdWx0aXBsZSBkZWNvZGUg
b3BlcmF0aW9ucyBvbiB0aGUgc2FtZSBkYXRhLgotICAgIE11dGV4IG1fZGVjb2RlTXV0ZXg7Ci0K
LSAgICAvLyBQcm90ZWN0IGNvbmN1cnJlbnQgYWNjZXNzIHRvIG1faGFzQWxwaGEuCi0gICAgTXV0
ZXggbV9hbHBoYU11dGV4OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUGFp
bnRlckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJQYWludGVyQ2hyb21pdW0uaAkocmV2aXNpb24gMTQ3NzMyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJQYWludGVy
Q2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaWZu
ZGVmIExheWVyUGFpbnRlckNocm9taXVtX2gKLSNkZWZpbmUgTGF5ZXJQYWludGVyQ2hyb21pdW1f
aAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi1jbGFzcyBTa0NhbnZhczsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBJbnRSZWN0
OwotCi1jbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
TGF5ZXJQYWludGVyQ2hyb21pdW0oKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoU2tDYW52
YXMqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgRmxvYXRSZWN0JiBvcGFxdWUpID0gMDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0jZW5kaWYgLy8gTGF5ZXJQYWludGVyQ2hyb21pdW1faAotCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhl
bFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF6eURlY29kaW5nUGl4ZWxSZWYuY3BwCShyZXZpc2lvbiAxNDc3MzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhl
bFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGF6eURlY29kaW5nUGl4ZWxSZWYuaCIKLQotI2luY2x1
ZGUgIkltYWdlRGVjb2Rlci5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RpbmdTdG9yZS5oIgotI2lu
Y2x1ZGUgIkltYWdlRnJhbWVHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJTa0RhdGEuaCIKLSNpbmNs
dWRlICJUcmFjZUV2ZW50LmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1MYXp5RGVjb2RpbmdQaXhlbFJlZjo6TGF6eURlY29kaW5nUGl4ZWxS
ZWYoUGFzc1JlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBmcmFtZUdlbmVyYXRvciwgY29uc3Qg
U2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tJUmVjdCYgc2NhbGVkU3Vic2V0KQotICAgIDog
bV9mcmFtZUdlbmVyYXRvcihmcmFtZUdlbmVyYXRvcikKLSAgICAsIG1fc2NhbGVkU2l6ZShzY2Fs
ZWRTaXplKQotICAgICwgbV9zY2FsZWRTdWJzZXQoc2NhbGVkU3Vic2V0KQotICAgICwgbV9sb2Nr
ZWRDYWNoZWRJbWFnZSgwKQotewotfQotCi1MYXp5RGVjb2RpbmdQaXhlbFJlZjo6fkxhenlEZWNv
ZGluZ1BpeGVsUmVmKCkKLXsKLX0KLQotYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNTY2Fs
ZWQoY29uc3QgU2tJU2l6ZSYgZnVsbFNpemUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZ1bGxTaXpl
ICE9IG1fc2NhbGVkU2l6ZTsKLX0KLQotYm9vbCBMYXp5RGVjb2RpbmdQaXhlbFJlZjo6aXNDbGlw
cGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zY2FsZWRTaXplLndpZHRoKCkgIT0gbV9zY2Fs
ZWRTdWJzZXQud2lkdGgoKSB8fCBtX3NjYWxlZFNpemUuaGVpZ2h0KCkgIT0gbV9zY2FsZWRTdWJz
ZXQuaGVpZ2h0KCk7Ci19Ci0KLVNrRGF0YSogTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uUmVmRW5j
b2RlZERhdGEoKQotewotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IDA7Ci0gICAg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQgPSBmYWxzZTsKLSAgICBtX2ZyYW1lR2VuZXJhdG9yLT5jb3B5
RGF0YSgmYnVmZmVyLCAmYWxsRGF0YVJlY2VpdmVkKTsKLSAgICBpZiAoYnVmZmVyICYmIGFsbERh
dGFSZWNlaXZlZCkgewotICAgICAgICBTa0RhdGEqIHNrZGF0YSA9IFNrRGF0YTo6TmV3V2l0aENv
cHkoKHZvaWQqKWJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7Ci0gICAgICAgIHJldHVy
biBza2RhdGE7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi12b2lkKiBMYXp5RGVjb2RpbmdQ
aXhlbFJlZjo6b25Mb2NrUGl4ZWxzKFNrQ29sb3JUYWJsZSoqKQotewotICAgIFRSQUNFX0VWRU5U
X0FTWU5DX0JFR0lOMCgid2Via2l0IiwgIkxhenlEZWNvZGluZ1BpeGVsUmVmOjpsb2NrUGl4ZWxz
IiwgdGhpcyk7Ci0KLSAgICBtX211dGV4LmxvY2soKTsKLSAgICBBU1NFUlQoIW1fbG9ja2VkQ2Fj
aGVkSW1hZ2UpOwotCi0gICAgaWYgKCFJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmxv
Y2tDYWNoZShtX2ZyYW1lR2VuZXJhdG9yLmdldCgpLCBtX3NjYWxlZFNpemUsIEltYWdlRGVjb2Rp
bmdTdG9yZTo6Q2FjaGVNdXN0QmVDb21wbGV0ZSwgJm1fbG9ja2VkQ2FjaGVkSW1hZ2UpKQotICAg
ICAgICBtX2xvY2tlZENhY2hlZEltYWdlID0gMDsKLQotICAgIC8vIFVzZSBJbWFnZUZyYW1lR2Vu
ZXJhdG9yIHRvIGdlbmVyYXRlIHRoZSBpbWFnZS4gSXQgd2lsbCBsb2NrIHRoZSBjYWNoZQotICAg
IC8vIGVudHJ5IGZvciB1cy4KLSAgICBpZiAoIW1fbG9ja2VkQ2FjaGVkSW1hZ2UpCi0gICAgICAg
IG1fbG9ja2VkQ2FjaGVkSW1hZ2UgPSBtX2ZyYW1lR2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZSht
X3NjYWxlZFNpemUpOwotCi0gICAgaWYgKCFtX2xvY2tlZENhY2hlZEltYWdlKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIEFTU0VSVCghbV9sb2NrZWRDYWNoZWRJbWFnZS0+Yml0bWFwKCkuaXNO
dWxsKCkpOwotICAgIEFTU0VSVChtX2xvY2tlZENhY2hlZEltYWdlLT5zY2FsZWRTaXplKCkgPT0g
bV9zY2FsZWRTaXplKTsKLSAgICByZXR1cm4gbV9sb2NrZWRDYWNoZWRJbWFnZS0+Yml0bWFwKCku
Z2V0QWRkcihtX3NjYWxlZFN1YnNldC54KCksIG1fc2NhbGVkU3Vic2V0LnkoKSk7Ci19Ci0KLXZv
aWQgTGF6eURlY29kaW5nUGl4ZWxSZWY6Om9uVW5sb2NrUGl4ZWxzKCkKLXsKLSAgICBpZiAobV9s
b2NrZWRDYWNoZWRJbWFnZSkgewotICAgICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPnVubG9ja0NhY2hlKG1fZnJhbWVHZW5lcmF0b3IuZ2V0KCksIG1fbG9ja2VkQ2FjaGVkSW1h
Z2UpOwotICAgICAgICBtX2xvY2tlZENhY2hlZEltYWdlID0gMDsKLSAgICB9Ci0gICAgbV9tdXRl
eC51bmxvY2soKTsKLQotICAgIFRSQUNFX0VWRU5UX0FTWU5DX0VORDAoIndlYmtpdCIsICJMYXp5
RGVjb2RpbmdQaXhlbFJlZjo6bG9ja1BpeGVscyIsIHRoaXMpOwotfQotCi1ib29sIExhenlEZWNv
ZGluZ1BpeGVsUmVmOjpvbkxvY2tQaXhlbHNBcmVXcml0YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIExhenlEZWNvZGluZ1BpeGVsUmVmOjpQcmVwYXJlVG9EZWNv
ZGUoY29uc3QgTGF6eVBpeGVsUmVmOjpQcmVwYXJlUGFyYW1zJiBwYXJhbXMpCi17Ci0gICAgVFJB
Q0VfRVZFTlQwKCJ3ZWJraXQiLCAiTGF6eURlY29kaW5nUGl4ZWxSZWY6OlByZXBhcmVUb0RlY29k
ZSIpOwotCi0gICAgLy8gVE9ETzogY2hlY2sgaWYgb25seSBhIHBhcnRpY3VsYXIgcmVjdCBpcyBh
dmFpbGFibGUgaW4gaW1hZ2UgY2FjaGUuCi0gICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7Ci0gICAg
Y29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogY2FjaGVkSW1hZ2UgPSAwOwotICAgIGJvb2wgY2Fj
aGVkID0gSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5sb2NrQ2FjaGUobV9mcmFtZUdl
bmVyYXRvci5nZXQoKSwgbV9zY2FsZWRTaXplLCBJbWFnZURlY29kaW5nU3RvcmU6OkNhY2hlTXVz
dEJlQ29tcGxldGUsICZjYWNoZWRJbWFnZSk7Ci0gICAgaWYgKGNhY2hlZCkKLSAgICAgICAgSW1h
Z2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2ZyYW1lR2VuZXJhdG9y
LmdldCgpLCBjYWNoZWRJbWFnZSk7Ci0gICAgcmV0dXJuIGNhY2hlZDsKLX0KLQotdm9pZCBMYXp5
RGVjb2RpbmdQaXhlbFJlZjo6RGVjb2RlKCkKLXsKLSAgICBsb2NrUGl4ZWxzKCk7Ci0gICAgdW5s
b2NrUGl4ZWxzKCk7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXp5RGVjb2RpbmdQaXhlbFJlZi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xhenlEZWNvZGluZ1BpeGVsUmVmLmgJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xhenlEZWNvZGluZ1BpeGVsUmVmLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTGF6eURlY29kaW5n
UGl4ZWxSZWZfaAotI2RlZmluZSBMYXp5RGVjb2RpbmdQaXhlbFJlZl9oCi0KLSNpbmNsdWRlICJT
a0ZsYXR0ZW5hYmxlQnVmZmVycy5oIgotI2luY2x1ZGUgIlNrUGl4ZWxSZWYuaCIKLSNpbmNsdWRl
ICJTa1JlY3QuaCIKLSNpbmNsdWRlICJTa1NpemUuaCIKLSNpbmNsdWRlICJTa1R5cGVzLmgiCi0j
aW5jbHVkZSAic2tpYS9leHQvbGF6eV9waXhlbF9yZWYuaCIKLQotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgotCi11c2luZyBza2lh
OjpMYXp5UGl4ZWxSZWY7Ci0KLWNsYXNzIFNrRGF0YTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBJbWFnZUZyYW1lR2VuZXJhdG9yOwotY2xhc3MgU2NhbGVkSW1hZ2VGcmFnbWVudDsK
LQotY2xhc3MgTGF6eURlY29kaW5nUGl4ZWxSZWYgOiBwdWJsaWMgTGF6eVBpeGVsUmVmIHsKLXB1
YmxpYzoKLSAgICBMYXp5RGVjb2RpbmdQaXhlbFJlZihQYXNzUmVmUHRyPEltYWdlRnJhbWVHZW5l
cmF0b3I+LCBjb25zdCBTa0lTaXplJiBzY2FsZWRTaXplLCBjb25zdCBTa0lSZWN0JiBzY2FsZWRT
dWJzZXQpOwotICAgIHZpcnR1YWwgfkxhenlEZWNvZGluZ1BpeGVsUmVmKCk7Ci0KLSAgICBTS19E
RUNMQVJFX1VORkxBVFRFTkFCTEVfT0JKRUNUKCkKLQotICAgIFBhc3NSZWZQdHI8SW1hZ2VGcmFt
ZUdlbmVyYXRvcj4gZnJhbWVHZW5lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lR2VuZXJh
dG9yOyB9Ci0gICAgYm9vbCBpc1NjYWxlZChjb25zdCBTa0lTaXplJiBmdWxsU2l6ZSkgY29uc3Q7
Ci0gICAgYm9vbCBpc0NsaXBwZWQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBQcmVwYXJl
VG9EZWNvZGUoY29uc3QgTGF6eVBpeGVsUmVmOjpQcmVwYXJlUGFyYW1zJik7Ci0gICAgdmlydHVh
bCB2b2lkIERlY29kZSgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgLy8gU2tQaXhlbFJlZiBpbXBsZW1l
bnRhdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQqIG9uTG9ja1BpeGVscyhTa0NvbG9yVGFibGUqKik7
Ci0gICAgdmlydHVhbCB2b2lkIG9uVW5sb2NrUGl4ZWxzKCk7Ci0gICAgdmlydHVhbCBib29sIG9u
TG9ja1BpeGVsc0FyZVdyaXRhYmxlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFNrRGF0YSogb25S
ZWZFbmNvZGVkRGF0YSgpIFNLX09WRVJSSURFOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxJbWFn
ZUZyYW1lR2VuZXJhdG9yPiBtX2ZyYW1lR2VuZXJhdG9yOwotICAgIFNrSVNpemUgbV9zY2FsZWRT
aXplOwotICAgIFNrSVJlY3QgbV9zY2FsZWRTdWJzZXQ7Ci0KLSAgICBjb25zdCBTY2FsZWRJbWFn
ZUZyYWdtZW50KiBtX2xvY2tlZENhY2hlZEltYWdlOwotICAgIE11dGV4IG1fbXV0ZXg7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBMYXp5RGVjb2RpbmdQaXhlbFJl
Zl9oXwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVk
aWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmNw
cAkocmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQ
cml2YXRlQ2hyb21pdW0uaCIKLQotI2lmIEVOQUJMRShWSURFTykKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1zdGF0aWMgTWVkaWFFbmdpbmVSZWdpc3RlclNlbGYqIHNfcmVnaXN0ZXJTZWxmRnVu
Y3Rpb24gPSAwOwotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cmVnaXN0ZXJNZWRpYUVuZ2lu
ZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCi17Ci0gICAgQVNTRVJUKHNfcmVnaXN0
ZXJTZWxmRnVuY3Rpb24pOwotICAgIHNfcmVnaXN0ZXJTZWxmRnVuY3Rpb24ocmVnaXN0cmFyKTsK
LX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNldE1lZGlhRW5naW5lUmVnaXN0ZXJTZWxm
RnVuY3Rpb24oTWVkaWFFbmdpbmVSZWdpc3RlclNlbGYqIHJlZ2lzdGVyU2VsZkZ1bmN0aW9uKQot
ewotICAgIHNfcmVnaXN0ZXJTZWxmRnVuY3Rpb24gPSByZWdpc3RlclNlbGZGdW5jdGlvbjsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaAkocmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hy
b21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
TWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW1faAotI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVD
aHJvbWl1bV9oCi0KLSNpZiBFTkFCTEUoVklERU8pCi0KLSNpbmNsdWRlICJNZWRpYVBsYXllclBy
aXZhdGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIHZvaWQgTWVkaWFFbmdp
bmVSZWdpc3RlclNlbGYoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwotCi1jbGFzcyBNZWRpYVBsYXll
clByaXZhdGUgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUo
TWVkaWFFbmdpbmVSZWdpc3RyYXIpOwotICAgIHN0YXRpYyB2b2lkIHNldE1lZGlhRW5naW5lUmVn
aXN0ZXJTZWxmRnVuY3Rpb24oTWVkaWFFbmdpbmVSZWdpc3RlclNlbGYqKTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKLQotI2VuZGlmIC8v
IE1lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVn
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9PcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5jcHAJKHJldmlz
aW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpbmNsdWRlICJPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5oIgotCi0j
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dFNraWEuaCIKLSNpbmNsdWRlIDxwdWJsaWMvV2ViRmxvYXRSZWN0Lmg+
Ci0jaW5jbHVkZSA8cHVibGljL1dlYlJlY3QuaD4KLQotdXNpbmcgV2ViS2l0OjpXZWJGbG9hdFJl
Y3Q7Ci11c2luZyBXZWJLaXQ6OldlYlJlY3Q7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotT3Bh
cXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGU6Ok9wYXF1ZVJlY3RUcmFja2luZ0Nv
bnRlbnRMYXllckRlbGVnYXRlKEdyYXBoaWNzQ29udGV4dFBhaW50ZXIqIHBhaW50ZXIpCi0gICAg
OiBtX3BhaW50ZXIocGFpbnRlcikKLSAgICAsIG1fb3BhcXVlKGZhbHNlKQotewotfQotCi1PcGFx
dWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZTo6fk9wYXF1ZVJlY3RUcmFja2luZ0Nv
bnRlbnRMYXllckRlbGVnYXRlKCkKLXsKLX0KLQotdm9pZCBPcGFxdWVSZWN0VHJhY2tpbmdDb250
ZW50TGF5ZXJEZWxlZ2F0ZTo6cGFpbnRDb250ZW50cyhTa0NhbnZhcyogY2FudmFzLCBjb25zdCBX
ZWJSZWN0JiBjbGlwLCBib29sIGNhblBhaW50TENEVGV4dCwgV2ViRmxvYXRSZWN0JiBvcGFxdWUp
Ci17Ci0gICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoY2FudmFzKTsKLSAg
ICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24oIW1fb3BhcXVlKTsKLSAgICBw
bGF0Zm9ybUNvbnRleHQuc2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIoIW1fb3BhcXVlKTsKLSAgICBH
cmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKLSAgICBjb250ZXh0LnNl
dFNob3VsZFNtb290aEZvbnRzKGNhblBhaW50TENEVGV4dCAmJiBtX29wYXF1ZSk7Ci0KLSAgICAv
LyBSZWNvcmQgdHJhbnNmb3JtIHByaW9yIHRvIHBhaW50aW5nLCBhcyBhbGwgb3BhcXVlIHRyYWNr
aW5nIHdpbGwgYmUKLSAgICAvLyByZWxhdGl2ZSB0byB0aGlzIGN1cnJlbnQgdmFsdWUuCi0gICAg
QWZmaW5lVHJhbnNmb3JtIGNhbnZhc1RvQ29udGVudFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RN
KCkuaW52ZXJzZSgpOwotCi0gICAgbV9wYWludGVyLT5wYWludChjb250ZXh0LCBjbGlwKTsKLQot
ICAgIC8vIFRyYW5zZm9ybSB0cmFja2VkIG9wYXF1ZSBwYWludHMgYmFjayB0byBvdXIgbGF5ZXIn
cyBjb250ZW50IHNwYWNlLgotICAgIEFTU0VSVChjYW52YXNUb0NvbnRlbnRUcmFuc2Zvcm0uaXNJ
bnZlcnRpYmxlKCkpOwotICAgIEFTU0VSVChjYW52YXNUb0NvbnRlbnRUcmFuc2Zvcm0ucHJlc2Vy
dmVzQXhpc0FsaWdubWVudCgpKTsKLSAgICBvcGFxdWUgPSBjYW52YXNUb0NvbnRlbnRUcmFuc2Zv
cm0ubWFwUmVjdChwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwotfQot
Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9PcGFx
dWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0Nv
bnRlbnRMYXllckRlbGVnYXRlLmgJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL09wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXll
ckRlbGVnYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
LSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZV9oCi0jZGVm
aW5lIE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlX2gKLQotI2luY2x1ZGUg
PHB1YmxpYy9XZWJDb250ZW50TGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1jbGFzcyBTa0NhbnZhczsKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBJbnRS
ZWN0OwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRQYWludGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCkgPSAw
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0UGFpbnRlcigpIHsg
fQotfTsKLQotY2xhc3MgT3BhcXVlUmVjdFRyYWNraW5nQ29udGVudExheWVyRGVsZWdhdGUgOiBw
dWJsaWMgV2ViS2l0OjpXZWJDb250ZW50TGF5ZXJDbGllbnQgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKE9wYXF1ZVJlY3RUcmFja2luZ0NvbnRlbnRMYXllckRlbGVnYXRlKTsKLXB1YmxpYzoK
LSAgICBleHBsaWNpdCBPcGFxdWVSZWN0VHJhY2tpbmdDb250ZW50TGF5ZXJEZWxlZ2F0ZShHcmFw
aGljc0NvbnRleHRQYWludGVyKik7Ci0gICAgdmlydHVhbCB+T3BhcXVlUmVjdFRyYWNraW5nQ29u
dGVudExheWVyRGVsZWdhdGUoKTsKLQotICAgIC8vIElmIHdlIGtub3cgdGhhdCBldmVyeXRoaW5n
IHRoYXQgd2lsbCBiZSBwYWludGVkIHRocm91Z2ggdGhpcyBkZWxlZ2F0ZSwgdGhlbiB3ZSBkb24n
dCBib3RoZXIKLSAgICAvLyB0cmFja2luZyBvcGFxdWVuZXNzLgotICAgIHZvaWQgc2V0T3BhcXVl
KGJvb2wgb3BhcXVlKSB7IG1fb3BhcXVlID0gb3BhcXVlOyB9Ci0KLSAgICAvLyBXZWJLaXQ6Oldl
YkNvbnRlbnRMYXllckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDb250ZW50cyhTa0NhbnZhcyosIGNvbnN0IFdlYktpdDo6V2ViUmVjdCYgY2xpcCwgYm9vbCBj
YW5QYWludExDRFRleHQsIFdlYktpdDo6V2ViRmxvYXRSZWN0JiBvcGFxdWUpIE9WRVJSSURFOwot
Ci1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dFBhaW50ZXIqIG1fcGFpbnRlcjsKLSAgICBi
b29sIG1fb3BhcXVlOwotfTsKLQotfQotCi0jZW5kaWYgLy8gT3BhcXVlUmVjdFRyYWNraW5nQ29u
dGVudExheWVyRGVsZWdhdGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUGxhdGZvcm1JY29uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1JY29uLmgJKHJldmlzaW9uIDE0Nzcz
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3Jt
SWNvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQ
bGF0Zm9ybUljb25faAotI2RlZmluZSBQbGF0Zm9ybUljb25faAotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEltYWdlOwotCi10eXBlZGVmIEltYWdlIFBsYXRmb3JtSWNvbjsKLQotfSAg
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmICAvLyBQbGF0Zm9ybUljb25faApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFn
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2NhbGVkSW1hZ2VGcmFnbWVudC5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJTY2FsZWRJbWFnZUZyYWdtZW50LmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotU2NhbGVkSW1hZ2VGcmFnbWVudDo6flNjYWxlZEltYWdlRnJhZ21l
bnQoKQotewotfQotCi1TY2FsZWRJbWFnZUZyYWdtZW50OjpTY2FsZWRJbWFnZUZyYWdtZW50KGNv
bnN0IFNrSVNpemUmIHNjYWxlZFNpemUsIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGNvbnN0IGJv
b2wgaXNDb21wbGV0ZSkKLSAgICA6IG1fc2NhbGVkU2l6ZShzY2FsZWRTaXplKQotICAgICwgbV9i
aXRtYXAoYml0bWFwKQotICAgICwgbV9pc0NvbXBsZXRlKGlzQ29tcGxldGUpCi17Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TY2FsZWRJbWFnZUZyYWdtZW50LmgJ
KHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1NjYWxlZEltYWdlRnJhZ21lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTY2FsZWRJbWFnZUZyYWdtZW50X2gKLSNkZWZpbmUgU2Nh
bGVkSW1hZ2VGcmFnbWVudF9oCi0KLSNpbmNsdWRlICJTa0JpdG1hcC5oIgotI2luY2x1ZGUgIlNr
UmVjdC5oIgotI2luY2x1ZGUgIlNrU2l6ZS5oIgotCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBTY2FsZWRJbWFnZUZyYWdtZW50IGlzIGEg
c2NhbGVkIHZlcnNpb24gb2YgYW4gaW1hZ2UuCi1jbGFzcyBTY2FsZWRJbWFnZUZyYWdtZW50IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBjcmVh
dGUoY29uc3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSwgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgYm9v
bCBpc0NvbXBsZXRlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY2FsZWRJ
bWFnZUZyYWdtZW50KHNjYWxlZFNpemUsIGJpdG1hcCwgaXNDb21wbGV0ZSkpOwotICAgIH0KLQot
ICAgIFNjYWxlZEltYWdlRnJhZ21lbnQoY29uc3QgU2tJU2l6ZSYsIGNvbnN0IFNrQml0bWFwJiwg
Ym9vbCBpc0NvbXBsZXRlKTsKLSAgICB+U2NhbGVkSW1hZ2VGcmFnbWVudCgpOwotCi0gICAgY29u
c3QgU2tJU2l6ZSYgc2NhbGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVkU2l6ZTsgfQot
ICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAoKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcDsgfQot
ICAgIFNrQml0bWFwJiBiaXRtYXAoKSB7IHJldHVybiBtX2JpdG1hcDsgfQotICAgIGJvb2wgaXND
b21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21wbGV0ZTsgfQotICAgIHZvaWQgc2V0SXND
b21wbGV0ZSgpIHsgbV9pc0NvbXBsZXRlID0gdHJ1ZTsgfQotCi1wcml2YXRlOgotICAgIFNrSVNp
emUgbV9zY2FsZWRTaXplOwotICAgIFNrQml0bWFwIG1fYml0bWFwOwotICAgIGJvb2wgbV9pc0Nv
bXBsZXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hy
b21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiAxNDc3
MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVG
b250RGF0YUNocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVk
ZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAi
Rm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2luLmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0jaW5j
bHVkZSA8bWxhbmcuaD4KLSNpbmNsdWRlIDxvYmppZGwuaD4KLSNpbmNsdWRlIDx1bmljb2RlL3Vj
aGFyLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1Jbml0KCkKLXsKLSAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLnNpemUoKSkgewotICAgICAg
ICBtX2ZvbnRNZXRyaWNzLnJlc2V0KCk7Ci0gICAgICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKLSAg
ICAgICAgbV9tYXhDaGFyV2lkdGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
SFduZERDIGRjKDApOwotICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChkYywgbV9w
bGF0Zm9ybURhdGEuaGZvbnQoKSk7Ci0KLSAgICBURVhUTUVUUklDIHRleHRNZXRyaWMgPSB7MH07
Ci0gICAgaWYgKCFHZXRUZXh0TWV0cmljcyhkYywgJnRleHRNZXRyaWMpKSB7Ci0gICAgICAgIGlm
IChGb250UGxhdGZvcm1EYXRhOjplbnN1cmVGb250TG9hZGVkKG1fcGxhdGZvcm1EYXRhLmhmb250
KCkpKSB7Ci0gICAgICAgICAgICAvLyBSZXRyeSBHZXRUZXh0TWV0cmljcy4KLSAgICAgICAgICAg
IC8vIEZJWE1FOiBIYW5kbGUgZ3JhY2VmdWxseSB0aGUgZXJyb3IgaWYgdGhpcyBjYWxsIGFsc28g
ZmFpbHMuCi0gICAgICAgICAgICAvLyBTZWUgaHR0cDovL2NyYnVnLmNvbS82NDAxLgotICAgICAg
ICAgICAgaWYgKCFHZXRUZXh0TWV0cmljcyhkYywgJnRleHRNZXRyaWMpKQotICAgICAgICAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGdldCB0aGUgdGV4dCBtZXRyaWNzIGFmdGVyIHNlY29u
ZCBhdHRlbXB0Iik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2F2Z0NoYXJXaWR0aCA9IHRl
eHRNZXRyaWMudG1BdmVDaGFyV2lkdGg7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSB0ZXh0TWV0cmlj
LnRtTWF4Q2hhcldpZHRoOwotCi0gICAgLy8gRklYTUU6IEFjY2VzcyBhc2NlbnQvZGVzY2VudC9s
aW5lR2FwIHdpdGggZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uLgotICAgIGZsb2F0IGFzY2VudCA9
IHRleHRNZXRyaWMudG1Bc2NlbnQ7Ci0gICAgZmxvYXQgZGVzY2VudCA9IHRleHRNZXRyaWMudG1E
ZXNjZW50OwotICAgIGZsb2F0IGxpbmVHYXAgPSB0ZXh0TWV0cmljLnRtRXh0ZXJuYWxMZWFkaW5n
OwotICAgIGZsb2F0IHhIZWlnaHQgPSBhc2NlbnQgKiAwLjU2ZjsgLy8gQmVzdCBndWVzcyBmb3Ig
eEhlaWdodCBmb3Igbm9uLVRydWV0eXBlIGZvbnRzLgotCi0gICAgT1VUTElORVRFWFRNRVRSSUMg
b3V0bGluZVRleHRNZXRyaWM7Ci0gICAgaWYgKEdldE91dGxpbmVUZXh0TWV0cmljcyhkYywgc2l6
ZW9mKG91dGxpbmVUZXh0TWV0cmljKSwgJm91dGxpbmVUZXh0TWV0cmljKSA+IDApIHsKLSAgICAg
ICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKG91dGxpbmVUZXh0TWV0cmljLm90bUVNU3F1
YXJlKTsKLQotICAgICAgICAvLyBUaGlzIGlzIGEgVHJ1ZVR5cGUgZm9udC4gIFdlIG1pZ2h0IGJl
IGFibGUgdG8gZ2V0IGFuIGFjY3VyYXRlIHhIZWlnaHQuCi0gICAgICAgIEdMWVBITUVUUklDUyBn
bHlwaE1ldHJpY3MgPSB7MH07Ci0gICAgICAgIE1BVDIgaWRlbnRpdHlNYXRyaXggPSB7ezAsIDF9
LCB7MCwgMH0sIHswLCAwfSwgezAsIDF9fTsKLSAgICAgICAgRFdPUkQgbGVuID0gR2V0R2x5cGhP
dXRsaW5lVyhkYywgJ3gnLCBHR09fTUVUUklDUywgJmdseXBoTWV0cmljcywgMCwgMCwgJmlkZW50
aXR5TWF0cml4KTsKLSAgICAgICAgaWYgKGxlbiAhPSBHRElfRVJST1IgJiYgZ2x5cGhNZXRyaWNz
LmdtQmxhY2tCb3hZID4gMCkKLSAgICAgICAgICAgIHhIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9h
dD4oZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hZKTsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNz
LnNldEFzY2VudChhc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50
KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7Ci0gICAgbV9mb250TWV0
cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNp
bmcoYXNjZW50ICsgZGVzY2VudCArIGxpbmVHYXApOwotCi0gICAgU2VsZWN0T2JqZWN0KGRjLCBv
bGRGb250KTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DaGFyV2lkdGhJbml0
KCkKLXsKLSAgICAvLyBjaGFyd2lkdGhzIGFyZSBzZXQgaW4gcGxhdGZvcm1Jbml0LgotfQotCi12
b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQotewotfQotCi1QYXNzUmVmUHRy
PFNpbXBsZUZvbnREYXRhPiBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVG
YWN0b3IpIGNvbnN0Ci17Ci0gICAgTE9HRk9OVCB3aW5Gb250OwotICAgIEdldE9iamVjdChtX3Bs
YXRmb3JtRGF0YS5oZm9udCgpLCBzaXplb2YoTE9HRk9OVCksICZ3aW5Gb250KTsKLSAgICBmbG9h
dCBzY2FsZWRTaXplID0gc2NhbGVGYWN0b3IgKiBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXpl
KCk7Ci0gICAgd2luRm9udC5sZkhlaWdodCA9IC1scm91bmRmKHNjYWxlZFNpemUpOwotICAgIEhG
T05UIGhmb250ID0gQ3JlYXRlRm9udEluZGlyZWN0KCZ3aW5Gb250KTsKLSAgICByZXR1cm4gU2lt
cGxlRm9udERhdGE6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGhmb250LCBzY2FsZWRTaXplLCBt
X3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpKSwgaXNDdXN0b21Gb250KCksIGZhbHNlKTsKLX0K
LQotYm9vbCBTaW1wbGVGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAotewotICAvLyBUaGlzIHVzZWQgdG8gYmUgaW1w
bGVtZW50ZWQgd2l0aCBJTUxhbmdGb250TGluazIsIGJ1dCBzaW5jZSB0aGF0IGNvZGUgaGFzCi0g
IC8vIGJlZW4gZGlzYWJsZWQsIHRoaXMgd291bGQgYWx3YXlzIHJldHVybiBmYWxzZSBhbnl3YXku
Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0
Y2goKQotewotICAgIC8vIFRFWFRNRVRSSUNTIGhhdmUgdGhpcy4gIFNldCBtX3RyZWF0QXNGaXhl
ZFBpdGNoIGJhc2VkIG9mZiB0aGF0LgotICAgIEhXbmREQyBkYygwKTsKLSAgICBIR0RJT0JKIG9s
ZEZvbnQgPSBTZWxlY3RPYmplY3QoZGMsIG1fcGxhdGZvcm1EYXRhLmhmb250KCkpOwotCi0gICAg
Ly8gWWVzLCB0aGlzIGxvb2tzIGJhY2t3YXJkcywgYnV0IHRoZSBmaXhlZCBwaXRjaCBiaXQgaXMg
YWN0dWFsbHkgc2V0IGlmIHRoZSBmb250Ci0gICAgLy8gaXMgKm5vdCogZml4ZWQgcGl0Y2guICBV
bmJlbGlldmFibGUgYnV0IHRydWUuCi0gICAgVEVYVE1FVFJJQyB0ZXh0TWV0cmljID0gezB9Owot
ICAgIGlmICghR2V0VGV4dE1ldHJpY3MoZGMsICZ0ZXh0TWV0cmljKSkgewotICAgICAgICBpZiAo
Rm9udFBsYXRmb3JtRGF0YTo6ZW5zdXJlRm9udExvYWRlZChtX3BsYXRmb3JtRGF0YS5oZm9udCgp
KSkgewotICAgICAgICAgICAgLy8gUmV0cnkgR2V0VGV4dE1ldHJpY3MuCi0gICAgICAgICAgICAv
LyBGSVhNRTogSGFuZGxlIGdyYWNlZnVsbHkgdGhlIGVycm9yIGlmIHRoaXMgY2FsbCBhbHNvIGZh
aWxzLgotICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vNjQwMS4KLSAgICAgICAg
ICAgIGlmICghR2V0VGV4dE1ldHJpY3MoZGMsICZ0ZXh0TWV0cmljKSkKLSAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBnZXQgdGhlIHRleHQgbWV0cmljcyBhZnRlciBzZWNvbmQg
YXR0ZW1wdCIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9
ICgodGV4dE1ldHJpYy50bVBpdGNoQW5kRmFtaWx5ICYgVE1QRl9GSVhFRF9QSVRDSCkgPT0gMCk7
Ci0KLSAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEZvbnQpOwotfQotCi1GbG9hdFJlY3QgU2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0g
ICAgSFduZERDIGhkYygwKTsKLSAgICBTZXRHcmFwaGljc01vZGUoaGRjLCBHTV9BRFZBTkNFRCk7
Ci0gICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGhkYywgbV9wbGF0Zm9ybURhdGEu
aGZvbnQoKSk7Ci0KLSAgICBHTFlQSE1FVFJJQ1MgZ2RpTWV0cmljczsKLSAgICBzdGF0aWMgY29u
c3QgTUFUMiBpZGVudGl0eSA9IHsgMCwgMSwgIDAsIDAsICAwLCAwLCAgMCwgMSB9OwotICAgIGlm
IChHZXRHbHlwaE91dGxpbmUoaGRjLCBnbHlwaCwgR0dPX01FVFJJQ1MgfCBHR09fR0xZUEhfSU5E
RVgsICZnZGlNZXRyaWNzLCAwLCAwLCAmaWRlbnRpdHkpID09IC0xKSB7Ci0gICAgICAgIGlmIChG
b250UGxhdGZvcm1EYXRhOjplbnN1cmVGb250TG9hZGVkKG1fcGxhdGZvcm1EYXRhLmhmb250KCkp
KSB7Ci0gICAgICAgICAgICAvLyBSZXRyeSBHZXRUZXh0TWV0cmljcy4KLSAgICAgICAgICAgIC8v
IEZJWE1FOiBIYW5kbGUgZ3JhY2VmdWxseSB0aGUgZXJyb3IgaWYgdGhpcyBjYWxsIGFsc28gZmFp
bHMuCi0gICAgICAgICAgICAvLyBTZWUgaHR0cDovL2NyYnVnLmNvbS82NDAxLgotICAgICAgICAg
ICAgaWYgKEdldEdseXBoT3V0bGluZShoZGMsIGdseXBoLCBHR09fTUVUUklDUyB8IEdHT19HTFlQ
SF9JTkRFWCwgJmdkaU1ldHJpY3MsIDAsIDAsICZpZGVudGl0eSkgPT0gLTEpCi0gICAgICAgICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZ2V0IHRoZSBnbHlwaCBtZXRyaWNzIGFmdGVyIHNl
Y29uZCBhdHRlbXB0Iik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBTZWxlY3RPYmplY3QoaGRj
LCBvbGRGb250KTsKLQotICAgIHJldHVybiBGbG9hdFJlY3QoZ2RpTWV0cmljcy5nbXB0R2x5cGhP
cmlnaW4ueCwgLWdkaU1ldHJpY3MuZ21wdEdseXBoT3JpZ2luLnksCi0gICAgICAgIGdkaU1ldHJp
Y3MuZ21CbGFja0JveFgsIGdkaU1ldHJpY3MuZ21CbGFja0JveFkpOwotfQotCi1mbG9hdCBTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewot
ICAgIGlmICghbV9wbGF0Zm9ybURhdGEuc2l6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IEhXbmREQyBkYygwKTsKLSAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoZGMsIG1f
cGxhdGZvcm1EYXRhLmhmb250KCkpOwotCi0gICAgaW50IHdpZHRoID0gMDsKLSAgICBpZiAoIUdl
dENoYXJXaWR0aEkoZGMsIGdseXBoLCAxLCAwLCAmd2lkdGgpKSB7Ci0gICAgICAgIC8vIEFzayB0
aGUgYnJvd3NlciB0byBwcmVsb2FkIHRoZSBmb250IGFuZCByZXRyeS4KLSAgICAgICAgaWYgKEZv
bnRQbGF0Zm9ybURhdGE6OmVuc3VyZUZvbnRMb2FkZWQobV9wbGF0Zm9ybURhdGEuaGZvbnQoKSkp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgZ3JhY2VmdWxseSB0aGUgZXJyb3IgaWYg
dGhpcyBjYWxsIGFsc28gZmFpbHMuCi0gICAgICAgICAgICAvLyBTZWUgaHR0cDovL2NyYnVnLmNv
bS82NDAxLgotICAgICAgICAgICAgaWYgKCFHZXRDaGFyV2lkdGhJKGRjLCBnbHlwaCwgMSwgMCwg
JndpZHRoKSkKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBnZXQgdGhlIGNo
YXIgd2lkdGggYWZ0ZXIgc2Vjb25kIGF0dGVtcHQiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IFNlbGVjdE9iamVjdChkYywgb2xkRm9udCk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHdpZHRoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NrU2l6ZUhhc2guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ta1NpemVIYXNo
LmgJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NrU2l6ZUhhc2guaAkod29ya2luZyBjb3B5KQpAQCAtMSw4NiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBTa1NpemVIYXNoX2gKLSNkZWZpbmUgU2tTaXplSGFzaF9oCi0KLSNp
bmNsdWRlICJTa1NjYWxhci5oIgotI2luY2x1ZGUgIlNrU2l6ZS5oIgotCi0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEludEhh
c2g8U2tTaXplPiB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU2tTaXplJiBrZXkp
IHsgcmV0dXJuIHBhaXJJbnRIYXNoKGtleS53aWR0aCgpLCBrZXkuaGVpZ2h0KCkpOyB9Ci0gICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU2tTaXplJiBhLCBjb25zdCBTa1NpemUmIGIpIHsgcmV0
dXJuIGEgPT0gYjsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5
T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFNr
U2l6ZT4gewotICAgIHR5cGVkZWYgSW50SGFzaDxTa1NpemU+IEhhc2g7Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFNrU2l6ZT4gOiBHZW5lcmljSGFzaFRyYWl0czxTa1NpemU+
IHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7Ci0gICAgc3RhdGljIFNr
U2l6ZSBlbXB0eVZhbHVlKCkgeyByZXR1cm4gU2tTaXplOjpNYWtlKDAsIDApOyB9Ci0gICAgc3Rh
dGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFNrU2l6ZSYgc2xvdCkKLSAgICB7Ci0gICAg
ICAgIHNsb3QgPSBTa1NpemU6Ok1ha2UoLTEsIC0xKTsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wg
aXNEZWxldGVkVmFsdWUoY29uc3QgU2tTaXplJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB2YWx1ZS53aWR0aCgpID09IC0xICYmIHZhbHVlLmhlaWdodCgpID09IC0xOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEludEhhc2g8U2tJU2l6ZT4gewotICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFNrSVNpemUmIGtleSkgeyByZXR1cm4gcGFpckludEhhc2goa2V5Lndp
ZHRoKCksIGtleS5oZWlnaHQoKSk7IH0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTa0lT
aXplJiBhLCBjb25zdCBTa0lTaXplJiBiKSB7IHJldHVybiBhID09IGI7IH0KLSAgICBzdGF0aWMg
Y29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxTa0lTaXplPiB7Ci0gICAgdHlwZWRlZiBJbnRI
YXNoPFNrSVNpemU+IEhhc2g7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFNr
SVNpemU+IDogR2VuZXJpY0hhc2hUcmFpdHM8U2tJU2l6ZT4gewotICAgIHN0YXRpYyBjb25zdCBi
b29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRz
RGVzdHJ1Y3Rpb24gPSBmYWxzZTsKLSAgICBzdGF0aWMgU2tJU2l6ZSBlbXB0eVZhbHVlKCkgeyBy
ZXR1cm4gU2tJU2l6ZTo6TWFrZSgwLCAwKTsgfQotICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERl
bGV0ZWRWYWx1ZShTa0lTaXplJiBzbG90KQotICAgIHsKLSAgICAgICAgc2xvdCA9IFNrSVNpemU6
Ok1ha2UoLTEsIC0xKTsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29u
c3QgU2tJU2l6ZSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUud2lkdGgoKSA9
PSAtMSAmJiB2YWx1ZS5oZWlnaHQoKSA9PSAtMTsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXVEYKLQotI2VuZGlmIC8vIFNrU2l6ZUhhc2hfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZVVwbG9hZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZVVwbG9hZGVy
LmgJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RleHR1cmVVcGxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRleHR1cmVVcGxvYWRlcl9oCi0jZGVmaW5lIFRl
eHR1cmVVcGxvYWRlcl9oCi0KLSNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVGV4dHVyZVVwbG9hZGVyIHsKLXB1YmxpYzoKLSAg
ICBzdHJ1Y3QgUGFyYW1ldGVycyB7Ci0gICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlRleHR1
cmUqIHRleHR1cmU7Ci0gICAgICAgIEludFJlY3Qgc291cmNlUmVjdDsKLSAgICAgICAgSW50U2l6
ZSBkZXN0T2Zmc2V0OwotICAgIH07Ci0KLSAgICB2aXJ0dWFsIH5UZXh0dXJlVXBsb2FkZXIoKSB7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc0J1c3koKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJl
Z2luVXBsb2FkcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kVXBsb2FkcygpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBsb2FkVGV4dHVyZShDQ1Jlc291cmNlUHJvdmlkZXIqLCBQYXJhbWV0
ZXJzKSA9IDA7Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGhyZWFkU2FmZURhdGFUcmFuc3BvcnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RocmVhZFNh
ZmVEYXRhVHJhbnNwb3J0LmNwcAkocmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGhyZWFkU2FmZURhdGFUcmFuc3BvcnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpbmNsdWRlICJUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydC5oIgotCi0jaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotVGhyZWFkU2FmZURhdGFU
cmFuc3BvcnQ6OlRocmVhZFNhZmVEYXRhVHJhbnNwb3J0KCkKLSAgICA6IG1fcmVhZEJ1ZmZlcihT
aGFyZWRCdWZmZXI6OmNyZWF0ZSgpKQotICAgICwgbV9yZWFkUG9zaXRpb24oMCkKLXsKLX0KLQot
VGhyZWFkU2FmZURhdGFUcmFuc3BvcnQ6On5UaHJlYWRTYWZlRGF0YVRyYW5zcG9ydCgpCi17Ci19
Ci0KLXZvaWQgVGhyZWFkU2FmZURhdGFUcmFuc3BvcnQ6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBi
dWZmZXIsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQotewotICAgIEFTU0VSVChidWZmZXItPnNpemUo
KSA+PSBtX3JlYWRQb3NpdGlvbik7Ci0gICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+ID4g
bmV3QnVmZmVyUXVldWU7Ci0KLSAgICBjb25zdCBjaGFyKiBzZWdtZW50ID0gMDsKLSAgICB3aGls
ZSAoc2l6ZV90IGxlbmd0aCA9IGJ1ZmZlci0+Z2V0U29tZURhdGEoc2VnbWVudCwgbV9yZWFkUG9z
aXRpb24pKSB7Ci0gICAgICAgIG1fcmVhZFBvc2l0aW9uICs9IGxlbmd0aDsKLSAgICAgICAgbmV3
QnVmZmVyUXVldWUuYXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHNlZ21lbnQsIGxlbmd0aCkp
OwotICAgIH0KLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKLSAgICBtX25ld0J1
ZmZlclF1ZXVlLmFwcGVuZChuZXdCdWZmZXJRdWV1ZSk7Ci0gICAgbV9hbGxEYXRhUmVjZWl2ZWQg
PSBhbGxEYXRhUmVjZWl2ZWQ7Ci19Ci0KLXZvaWQgVGhyZWFkU2FmZURhdGFUcmFuc3BvcnQ6OmRh
dGEoU2hhcmVkQnVmZmVyKiogYnVmZmVyLCBib29sKiBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAg
VmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+ID4gbmV3QnVmZmVyUXVldWU7Ci0gICAgewotICAg
ICAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwotICAgICAgICBtX25ld0J1ZmZlclF1ZXVl
LnN3YXAobmV3QnVmZmVyUXVldWUpOwotICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG5ld0J1ZmZlclF1ZXVlLnNpemUoKTsgKytpKQotICAgICAgICBtX3JlYWRCdWZmZXItPmFwcGVu
ZChuZXdCdWZmZXJRdWV1ZVtpXS5nZXQoKSk7Ci0gICAgQVNTRVJUKGJ1ZmZlcik7Ci0gICAgQVNT
RVJUKGFsbERhdGFSZWNlaXZlZCk7Ci0gICAgKmJ1ZmZlciA9IG1fcmVhZEJ1ZmZlci5nZXQoKTsK
LSAgICAqYWxsRGF0YVJlY2VpdmVkID0gbV9hbGxEYXRhUmVjZWl2ZWQ7Ci19Ci0KLWJvb2wgVGhy
ZWFkU2FmZURhdGFUcmFuc3BvcnQ6Omhhc05ld0RhdGEoKQotewotICAgIE11dGV4TG9ja2VyIGxv
Y2sobV9tdXRleCk7Ci0gICAgcmV0dXJuICFtX25ld0J1ZmZlclF1ZXVlLmlzRW1wdHkoKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGhyZWFkU2FmZURhdGFUcmFuc3BvcnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaHJlYWRTYWZlRGF0
YVRyYW5zcG9ydC5oCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UaHJlYWRTYWZlRGF0YVRyYW5zcG9ydC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRocmVhZFNhZmVEYXRhVHJh
bnNwb3J0X2gKLSNkZWZpbmUgVGhyZWFkU2FmZURhdGFUcmFuc3BvcnRfaAotCi0jaW5jbHVkZSA8
d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNoYXJlZEJ1
ZmZlcjsKLQotLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBhbGxvdyB0aGUgdHJh
bnNmZXIgb2YgZGF0YSBzdG9yZWQgaW4KLS8vIFNoYXJlZEJ1ZmZlciBpbiBhIHRocmVhZC1zYWZl
IG1hbm5lciwgYW5kIHRvIG1pbmltaXplIG1lbW9yeSBjb3BpZXMKLS8vIGFuZCB0aHJlYWQgY29u
dGVudGlvbi4KLS8vCi0vLyBUaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHN1Y2ggdGhhdCB0aGVyZSBp
cyBvbmx5IG9uZSBwcm9kdWNlciBhbmQKLS8vIG9uZSBjb25zdW1lci4KLWNsYXNzIFRocmVhZFNh
ZmVEYXRhVHJhbnNwb3J0IHsKLXB1YmxpYzoKLSAgICBUaHJlYWRTYWZlRGF0YVRyYW5zcG9ydCgp
OwotICAgIH5UaHJlYWRTYWZlRGF0YVRyYW5zcG9ydCgpOwotCi0gICAgLy8gVGhpcyBtZXRob2Qg
aXMgYmVpbmcgY2FsbGVkIHN1YnNlcXVlbnRseSB3aXRoIGFuIGV4cGFuZGluZwotICAgIC8vIFNo
YXJlZEJ1ZmZlci4KLSAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpOwotCi0gICAgLy8gR2V0IHRoZSBkYXRhIHN1Ym1pdHRlZCB0byB0aGlzIGNsYXNz
IHNvIGZhci4KLSAgICB2b2lkIGRhdGEoU2hhcmVkQnVmZmVyKiosIGJvb2wqIGFsbERhdGFSZWNl
aXZlZCk7Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBvZiB0aGVyZSBpcyBuZXcgZGF0YSBzdWJtaXR0
ZWQgdG8gdGhpcyBjbGFzcwotICAgIC8vIHNpbmNlIGxhc3QgdGltZSBkYXRhKCkgd2FzIGNhbGxl
ZC4KLSAgICBib29sIGhhc05ld0RhdGEoKTsKLQotcHJpdmF0ZToKLSAgICBNdXRleCBtX211dGV4
OwotCi0gICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+ID4gbV9uZXdCdWZmZXJRdWV1ZTsK
LSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX3JlYWRCdWZmZXI7Ci0gICAgYm9vbCBtX2FsbERh
dGFSZWNlaXZlZDsKLSAgICBzaXplX3QgbV9yZWFkUG9zaXRpb247Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVHJhbnNmb3JtU2tNYXRyaXg0NENvbnZlcnNpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc2Zv
cm1Ta01hdHJpeDQ0Q29udmVyc2lvbnMuY3BwCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc2Zvcm1Ta01hdHJpeDQ0Q29u
dmVyc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
Ci0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlRyYW5zZm9ybVNrTWF0cml4NDRD
b252ZXJzaW9ucy5oIgotCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1Ta01hdHJpeDQ0IFRyYW5zZm9ybVNrTWF0cml4NDRDb252ZXJz
aW9uczo6Y29udmVydChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQotewotICAg
IFNrTWF0cml4NDQgcmV0KFNrTWF0cml4NDQ6OmtVbmluaXRpYWxpemVkX0NvbnN0cnVjdG9yKTsK
LSAgICByZXQuc2V0RG91YmxlKDAsIDAsIG1hdHJpeC5tMTEoKSk7Ci0gICAgcmV0LnNldERvdWJs
ZSgwLCAxLCBtYXRyaXgubTIxKCkpOwotICAgIHJldC5zZXREb3VibGUoMCwgMiwgbWF0cml4Lm0z
MSgpKTsKLSAgICByZXQuc2V0RG91YmxlKDAsIDMsIG1hdHJpeC5tNDEoKSk7Ci0gICAgcmV0LnNl
dERvdWJsZSgxLCAwLCBtYXRyaXgubTEyKCkpOwotICAgIHJldC5zZXREb3VibGUoMSwgMSwgbWF0
cml4Lm0yMigpKTsKLSAgICByZXQuc2V0RG91YmxlKDEsIDIsIG1hdHJpeC5tMzIoKSk7Ci0gICAg
cmV0LnNldERvdWJsZSgxLCAzLCBtYXRyaXgubTQyKCkpOwotICAgIHJldC5zZXREb3VibGUoMiwg
MCwgbWF0cml4Lm0xMygpKTsKLSAgICByZXQuc2V0RG91YmxlKDIsIDEsIG1hdHJpeC5tMjMoKSk7
Ci0gICAgcmV0LnNldERvdWJsZSgyLCAyLCBtYXRyaXgubTMzKCkpOwotICAgIHJldC5zZXREb3Vi
bGUoMiwgMywgbWF0cml4Lm00MygpKTsKLSAgICByZXQuc2V0RG91YmxlKDMsIDAsIG1hdHJpeC5t
MTQoKSk7Ci0gICAgcmV0LnNldERvdWJsZSgzLCAxLCBtYXRyaXgubTI0KCkpOwotICAgIHJldC5z
ZXREb3VibGUoMywgMiwgbWF0cml4Lm0zNCgpKTsKLSAgICByZXQuc2V0RG91YmxlKDMsIDMsIG1h
dHJpeC5tNDQoKSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNm
b3JtU2tNYXRyaXg0NENvbnZlcnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNmb3JtU2tNYXRyaXg0NENvbnZlcnNpb25z
LmgJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RyYW5zZm9ybVNrTWF0cml4NDRDb252ZXJzaW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJTa01hdHJpeDQ0Lmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7Ci0K
LWNsYXNzIFRyYW5zZm9ybVNrTWF0cml4NDRDb252ZXJzaW9ucyB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFNrTWF0cml4NDQgY29udmVydChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3Bw
CShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxNSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICog
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQotI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgot
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSAiVHJhbnNwYXJlbmN5V2luLmgi
Ci0KLSNpbmNsdWRlICJTa0NvbG9yUHJpdi5oIgotI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3Jt
X2NhbnZhcy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFRo
ZSBtYXhpbXVtIHNpemUgaW4gcGl4ZWxzIG9mIHRoZSBidWZmZXIgd2UnbGwga2VlcCBhcm91bmQg
Zm9yIGRyYXdpbmcgdGV4dAotLy8gaW50by4gQnVmZmVycyBsYXJnZXIgdGhhbiB0aGlzIHdpbGwg
YmUgZGVzdHJveWVkIHdoZW4gd2UncmUgZG9uZSB3aXRoIHRoZW0uCi1jb25zdCBpbnQgbWF4Q2Fj
aGVkQnVmZmVyUGl4ZWxTaXplID0gNjU1MzY7Ci0KLWlubGluZSBjb25zdCBTa0JpdG1hcCYgYml0
bWFwRm9yQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgcmV0
dXJuIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmxheWVyQml0bWFwKCk7Ci19Ci0KLXZvaWQg
Y29tcG9zaXRlVG9Db3B5KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgc291cmNlTGF5ZXJzLAotICAg
ICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwKLSAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQotewotICAgIC8vIE1h
a2UgYSBsaXN0IG9mIGFsbCBkZXZpY2VzLiBUaGUgaXRlcmF0b3IgZ29lcyB0b3AtZG93biwgYW5k
IHdlIHdhbnQKLSAgICAvLyBib3R0b20tdXAuIE5vdGUgdGhhdCBlYWNoIGxheWVyIGNhbiBhbHNv
IGhhdmUgYW4gb2Zmc2V0IGluIGNhbnZhcwotICAgIC8vIGNvb3JkaW5hdGVzLCB3aGljaCBpcyB0
aGUgKHgsIHkpIHBvc2l0aW9uLgotICAgIHN0cnVjdCBEZXZpY2VJbmZvIHsKLSAgICAgICAgRGV2
aWNlSW5mbyhTa0RldmljZSogZCwgaW50IGx4LCBpbnQgbHkpCi0gICAgICAgICAgICA6IGRldmlj
ZShkKQotICAgICAgICAgICAgLCB4KGx4KQotICAgICAgICAgICAgLCB5KGx5KSB7fQotICAgICAg
ICBTa0RldmljZSogZGV2aWNlOwotICAgICAgICBpbnQgeDsKLSAgICAgICAgaW50IHk7Ci0gICAg
fTsKLSAgICBWZWN0b3I8RGV2aWNlSW5mbz4gZGV2aWNlczsKLSAgICBTa0NhbnZhcyogc291cmNl
Q2FudmFzID0gc291cmNlTGF5ZXJzLnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKLSAgICBT
a0NhbnZhczo6TGF5ZXJJdGVyIGl0ZXIoc291cmNlQ2FudmFzLCBmYWxzZSk7Ci0gICAgd2hpbGUg
KCFpdGVyLmRvbmUoKSkgewotICAgICAgICBkZXZpY2VzLmFwcGVuZChEZXZpY2VJbmZvKGl0ZXIu
ZGV2aWNlKCksIGl0ZXIueCgpLCBpdGVyLnkoKSkpOwotICAgICAgICBpdGVyLm5leHQoKTsKLSAg
ICB9Ci0KLSAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgY2FudmFzIGZvciB0aGUgY29tcG9zaXRp
bmcgaW50byB0aGUgZGVzdGluYXRpb24uCi0gICAgU2tCaXRtYXAqIGRlc3RCbXAgPSBjb25zdF9j
YXN0PFNrQml0bWFwKj4oJmJpdG1hcEZvckNvbnRleHQoZGVzdENvbnRleHQpKTsKLSAgICBTa0Nh
bnZhcyBkZXN0Q2FudmFzKCpkZXN0Qm1wKTsKLSAgICBkZXN0Q2FudmFzLnNldE1hdHJpeChtYXRy
aXgpOwotCi0gICAgZm9yIChpbnQgaSA9IGRldmljZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0p
IHsKLSAgICAgICAgY29uc3QgU2tCaXRtYXAmIHNyY0JtcCA9IGRldmljZXNbaV0uZGV2aWNlLT5h
Y2Nlc3NCaXRtYXAoZmFsc2UpOwotCi0gICAgICAgIFNrUmVjdCBkZXN0UmVjdDsKLSAgICAgICAg
ZGVzdFJlY3QuZkxlZnQgPSBkZXZpY2VzW2ldLng7Ci0gICAgICAgIGRlc3RSZWN0LmZUb3AgPSBk
ZXZpY2VzW2ldLnk7Ci0gICAgICAgIGRlc3RSZWN0LmZSaWdodCA9IGRlc3RSZWN0LmZMZWZ0ICsg
c3JjQm1wLndpZHRoKCk7Ci0gICAgICAgIGRlc3RSZWN0LmZCb3R0b20gPSBkZXN0UmVjdC5mVG9w
ICsgc3JjQm1wLmhlaWdodCgpOwotCi0gICAgICAgIGRlc3RDYW52YXMuZHJhd0JpdG1hcFJlY3Qo
c3JjQm1wLCAwLCBkZXN0UmVjdCk7Ci0gICAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotLy8g
SWYgZWl0aGVyIG9mIHRoZXNlIHBvaW50ZXJzIGlzIG5vbi1udWxsLCBib3RoIG11c3QgYmUgdmFs
aWQgYW5kIHBvaW50IHRvCi0vLyBiaXRtYXBzIG9mIHRoZSBzYW1lIHNpemUuCi1jbGFzcyBUcmFu
c3BhcmVuY3lXaW46Ok93bmVkQnVmZmVycyB7Ci1wdWJsaWM6Ci0gICAgT3duZWRCdWZmZXJzKGNv
bnN0IEludFNpemUmIHNpemUsIGJvb2wgbmVlZFJlZmVyZW5jZUJ1ZmZlcikKLSAgICB7Ci0gICAg
ICAgIG1fZGVzdEJpdG1hcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgMSk7Ci0KLSAgICAg
ICAgaWYgKG5lZWRSZWZlcmVuY2VCdWZmZXIpIHsKLSAgICAgICAgICAgIG1fcmVmZXJlbmNlQml0
bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBtX3JlZmVyZW5jZUJpdG1hcC5hbGxvY1BpeGVs
cygpOwotICAgICAgICAgICAgbV9yZWZlcmVuY2VCaXRtYXAuZXJhc2VBUkdCKDAsIDAsIDAsIDAp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgSW1hZ2VCdWZmZXIqIGRlc3RCaXRtYXAoKSB7IHJl
dHVybiBtX2Rlc3RCaXRtYXAuZ2V0KCk7IH0KLQotICAgIC8vIFRoaXMgYml0bWFwIHdpbGwgYmUg
ZW1wdHkgaWYgeW91IGRvbid0IHNwZWNpZnkgbmVlZFJlZmVyZW5jZUJ1ZmZlciB0byB0aGUKLSAg
ICAvLyBjb25zdHJ1Y3Rvci4KLSAgICBTa0JpdG1hcCogcmVmZXJlbmNlQml0bWFwKCkgeyByZXR1
cm4gJm1fcmVmZXJlbmNlQml0bWFwOyB9Ci0KLSAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGN1
cnJlbnQgbGF5ZXIgd2lsbCBmaXggYSBidWZmZXIgb2YgdGhlIGdpdmVuIHNpemUuCi0gICAgYm9v
bCBjYW5IYW5kbGVTaXplKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gbV9kZXN0Qml0bWFwLT5pbnRlcm5hbFNpemUoKS53aWR0aCgpID49IHNpemUud2lk
dGgoKSAmJiBtX2Rlc3RCaXRtYXAtPmludGVybmFsU2l6ZSgpLmhlaWdodCgpID49IHNpemUuaGVp
Z2h0KCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBiaXRtYXAg
d2UncmUgZHJhd2luZyBpbnRvLgotICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9kZXN0Qml0bWFw
OwotCi0gICAgLy8gVGhpcyBjb3VsZCBiZSBhbiBJbWFnZUJ1ZmZlciBidXQgdGhpcyBpcyBhbiBv
cHRpbWl6YXRpb24uIFNpbmNlIHRoaXMgaXMKLSAgICAvLyBvbmx5IGV2ZXIgdXNlZCBhcyBhIHJl
ZmVyZW5jZSwgd2UgZG9uJ3QgbmVlZCB0byBtYWtlIGEgZnVsbAotICAgIC8vIFBsYXRmb3JtQ2Fu
dmFzIHVzaW5nIFNraWEgb24gV2luZG93cy4gSnVzdCBhbGxvY2F0aW5nIGEgcmVndWxhciBTa0Jp
dG1hcAotICAgIC8vIGlzIG11Y2ggZmFzdGVyIHNpbmNlIGl0J3MganVzdCBhIE1hbGxvYyByYXRo
ZXIgdGhhbiBhIEdESSBjYWxsLgotICAgIFNrQml0bWFwIG1fcmVmZXJlbmNlQml0bWFwOwotfTsK
LQotVHJhbnNwYXJlbmN5V2luOjpPd25lZEJ1ZmZlcnMqIFRyYW5zcGFyZW5jeVdpbjo6bV9jYWNo
ZWRCdWZmZXJzID0gMDsKLQotVHJhbnNwYXJlbmN5V2luOjpUcmFuc3BhcmVuY3lXaW4oKQotICAg
IDogbV9kZXN0Q29udGV4dCgwKQotICAgICwgbV9vcmdUcmFuc2Zvcm0oKQotICAgICwgbV9sYXll
ck1vZGUoTm9MYXllcikKLSAgICAsIG1fdHJhbnNmb3JtTW9kZShLZWVwVHJhbnNmb3JtKQotICAg
ICwgbV9kcmF3Q29udGV4dCgwKQotICAgICwgbV9zYXZlZE9uRHJhd0NvbnRleHQoZmFsc2UpCi0g
ICAgLCBtX2xheWVyQnVmZmVyKDApCi0gICAgLCBtX3JlZmVyZW5jZUJpdG1hcCgwKQotICAgICwg
bV92YWxpZExheWVyKGZhbHNlKQotewotfQotCi1UcmFuc3BhcmVuY3lXaW46On5UcmFuc3BhcmVu
Y3lXaW4oKQotewotICAgIC8vIFRoaXMgc2hvdWxkIGJlIGZhbHNlLCBzaW5jZSBjYWxsaW5nIGNv
bXBvc2l0ZSgpIGlzIG1hbmRhdG9yeS4KLSAgICBBU1NFUlQoIW1fc2F2ZWRPbkRyYXdDb250ZXh0
KTsKLX0KLQotdm9pZCBUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZSgpCi17Ci0gICAgLy8gTWF0
Y2hlcyB0aGUgc2F2ZSgpIGluIGluaXRpYWxpemVOZXdUZXh0Q29udGV4dCAob3IgdGhlIGNvbnN0
cnVjdG9yIGZvcgotICAgIC8vIFNDQUxFKSB0byBwdXQgdGhlIGNvbnRleHQgYmFjayBpbnRvIHRo
ZSBzYW1lIHN0YXRlIHdlIGZvdW5kIGl0LgotICAgIGlmIChtX3NhdmVkT25EcmF3Q29udGV4dCkg
ewotICAgICAgICBtX2RyYXdDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAgIG1fc2F2ZWRPbkRy
YXdDb250ZXh0ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgc3dpdGNoIChtX2xheWVyTW9kZSkgewot
ICAgIGNhc2UgTm9MYXllcjoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBPcGFxdWVDb21wb3Np
dGVMYXllcjoKLSAgICBjYXNlIFdoaXRlTGF5ZXI6Ci0gICAgICAgIGNvbXBvc2l0ZU9wYXF1ZUNv
bXBvc2l0ZSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRleHRDb21wb3NpdGU6Ci0gICAg
ICAgIGNvbXBvc2l0ZVRleHRDb21wb3NpdGUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQot
Ci12b2lkIFRyYW5zcGFyZW5jeVdpbjo6aW5pdChHcmFwaGljc0NvbnRleHQqIGRlc3QsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBMYXllck1vZGUgbGF5ZXJNb2RlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVHJhbnNmb3JtTW9kZSB0cmFuc2Zvcm1Nb2RlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcmVnaW9uKQotewotICAgIG1fZGVzdENvbnRl
eHQgPSBkZXN0OwotICAgIG1fb3JnVHJhbnNmb3JtID0gZGVzdC0+Z2V0Q1RNKCk7Ci0gICAgbV9s
YXllck1vZGUgPSBsYXllck1vZGU7Ci0gICAgbV90cmFuc2Zvcm1Nb2RlID0gdHJhbnNmb3JtTW9k
ZTsKLSAgICBtX3NvdXJjZVJlY3QgPSByZWdpb247Ci0KLSAgICBjb21wdXRlTGF5ZXJTaXplKCk7
Ci0gICAgc2V0dXBMYXllcigpOwotICAgIHNldHVwVHJhbnNmb3JtKHJlZ2lvbik7Ci19Ci0KLXZv
aWQgVHJhbnNwYXJlbmN5V2luOjpjb21wdXRlTGF5ZXJTaXplKCkKLXsKLSAgICBpZiAobV90cmFu
c2Zvcm1Nb2RlID09IFVudHJhbnNmb3JtKSB7Ci0gICAgICAgIC8vIFRoZSBtZWFuaW5nIG9mIHRo
ZSAidHJhbnNmb3JtZWQiIHNvdXJjZSByZWN0IGlzIGEgbGl0dGxlIGFtYmlnb3VzCi0gICAgICAg
IC8vIGhlcmUuIFRoZSByZXN0IG9mIHRoZSBjb2RlIGRvZXNuJ3QgY2FyZSBhYm91dCBpdCBpbiB0
aGUgVW50cmFuc2Zvcm0KLSAgICAgICAgLy8gY2FzZSBzaW5jZSB3ZSdyZSB1c2luZyBvdXIgb3du
IGhhcHB5IGNvb3JkaW5hdGUgc3lzdGVtLiBTbyB3ZSBzZXQgaXQKLSAgICAgICAgLy8gdG8gYmUg
dGhlIHNvdXJjZSByZWN0IHNpbmNlIHRoYXQgbWF0Y2hlcyBob3cgdGhlIGNvZGUgYmVsb3cgYWN0
dWFsbHkKLSAgICAgICAgLy8gdXNlcyB0aGUgdmFyaWFibGU6IHRvIGRldGVybWluZSBob3cgdG8g
dHJhbnNsYXRlIHRoaW5ncyB0byBhY2NvdW50Ci0gICAgICAgIC8vIGZvciB0aGUgb2Zmc2V0IG9m
IHRoZSBsYXllci4KLSAgICAgICAgbV90cmFuc2Zvcm1lZFNvdXJjZVJlY3QgPSBtX3NvdXJjZVJl
Y3Q7Ci0gICAgfSBlbHNlIGlmIChtX3RyYW5zZm9ybU1vZGUgPT0gS2VlcFRyYW5zZm9ybSAmJiBt
X2xheWVyTW9kZSAhPSBUZXh0Q29tcG9zaXRlKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0
IGNsaXBwaW5nIGZvciBvdGhlciBtb2RlcwotICAgICAgICBJbnRSZWN0IGNsaXBwZWRTb3VyY2VS
ZWN0ID0gbV9zb3VyY2VSZWN0OwotICAgICAgICBTa1JlY3QgY2xpcEJvdW5kczsKLSAgICAgICAg
aWYgKG1fZGVzdENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRDbGlwQm91bmRzKCZjbGlw
Qm91bmRzKSkgewotICAgICAgICAgICAgRmxvYXRSZWN0IGNsaXBSZWN0KGNsaXBCb3VuZHMubGVm
dCgpLCBjbGlwQm91bmRzLnRvcCgpLCBjbGlwQm91bmRzLndpZHRoKCksIGNsaXBCb3VuZHMuaGVp
Z2h0KCkpOwotICAgICAgICAgICAgY2xpcHBlZFNvdXJjZVJlY3QuaW50ZXJzZWN0KGVuY2xvc2lu
Z0ludFJlY3QoY2xpcFJlY3QpKTsKLSAgICAgICAgfQotICAgICAgICBtX3RyYW5zZm9ybWVkU291
cmNlUmVjdCA9IG1fb3JnVHJhbnNmb3JtLm1hcFJlY3QoY2xpcHBlZFNvdXJjZVJlY3QpOwotICAg
IH0gZWxzZQotICAgICAgICBtX3RyYW5zZm9ybWVkU291cmNlUmVjdCA9IG1fb3JnVHJhbnNmb3Jt
Lm1hcFJlY3QobV9zb3VyY2VSZWN0KTsKLQotICAgIG1fbGF5ZXJTaXplID0gSW50U2l6ZShtX3Ry
YW5zZm9ybWVkU291cmNlUmVjdC53aWR0aCgpLCBtX3RyYW5zZm9ybWVkU291cmNlUmVjdC5oZWln
aHQoKSk7Ci19Ci0KLXZvaWQgVHJhbnNwYXJlbmN5V2luOjpzZXR1cExheWVyKCkKLXsKLSAgICBz
d2l0Y2ggKG1fbGF5ZXJNb2RlKSB7Ci0gICAgY2FzZSBOb0xheWVyOgotICAgICAgICBzZXR1cExh
eWVyRm9yTm9MYXllcigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE9wYXF1ZUNvbXBvc2l0
ZUxheWVyOgotICAgICAgICBzZXR1cExheWVyRm9yT3BhcXVlQ29tcG9zaXRlTGF5ZXIoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0Q29tcG9zaXRlOgotICAgICAgICBzZXR1cExheWVy
Rm9yVGV4dENvbXBvc2l0ZSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdoaXRlTGF5ZXI6
Ci0gICAgICAgIHNldHVwTGF5ZXJGb3JXaGl0ZUxheWVyKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLX0KLQotdm9pZCBUcmFuc3BhcmVuY3lXaW46OnNldHVwTGF5ZXJGb3JOb0xheWVyKCkKLXsK
LSAgICBtX2RyYXdDb250ZXh0ID0gbV9kZXN0Q29udGV4dDsgIC8vIERyYXcgdG8gdGhlIHNvdXJj
ZSBjb250ZXh0LgotICAgIG1fdmFsaWRMYXllciA9IHRydWU7Ci19Ci0KLXZvaWQgVHJhbnNwYXJl
bmN5V2luOjpzZXR1cExheWVyRm9yT3BhcXVlQ29tcG9zaXRlTGF5ZXIoKQotewotICAgIGluaXRp
YWxpemVOZXdDb250ZXh0KCk7Ci0gICAgaWYgKCFtX3ZhbGlkTGF5ZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBtYXBwaW5nOwotICAgIG1hcHBpbmcudHJhbnNsYXRl
KC1tX3RyYW5zZm9ybWVkU291cmNlUmVjdC54KCksIC1tX3RyYW5zZm9ybWVkU291cmNlUmVjdC55
KCkpOwotICAgIGlmIChtX3RyYW5zZm9ybU1vZGUgPT0gVW50cmFuc2Zvcm0peyAKLSAgICAgICAg
Ly8gQ29tcHV0ZSB0aGUgaW52ZXJzZSBtYXBwaW5nIGZyb20gdGhlIGNhbnZhcyBzcGFjZSB0byB0
aGUKLSAgICAgICAgLy8gY29vcmRpbmF0ZSBzcGFjZSBvZiBvdXIgYml0bWFwLgotICAgICAgICBt
YXBwaW5nICo9IG1fb3JnVHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICB9Ci0gICAgY29tcG9zaXRl
VG9Db3B5KCptX2Rlc3RDb250ZXh0LCAqbV9kcmF3Q29udGV4dCwgbWFwcGluZyk7Ci0KLSAgICAv
LyBTYXZlIHRoZSByZWZlcmVuY2UgbGF5ZXIgc28gd2UgY2FuIHRlbGwgd2hhdCBjaGFuZ2VkLgot
ICAgIFNrQ2FudmFzIHJlZmVyZW5jZUNhbnZhcygqbV9yZWZlcmVuY2VCaXRtYXApOwotICAgIHJl
ZmVyZW5jZUNhbnZhcy5kcmF3Qml0bWFwKGJpdG1hcEZvckNvbnRleHQoKm1fZHJhd0NvbnRleHQp
LCAwLCAwKTsKLSAgICAvLyBMYXllciByZWN0IHJlcHJlc2VudHMgdGhlIHBhcnQgb2YgdGhlIG9y
aWdpbmFsIGxheWVyLgotfQotCi12b2lkIFRyYW5zcGFyZW5jeVdpbjo6c2V0dXBMYXllckZvclRl
eHRDb21wb3NpdGUoKQotewotICAgIEFTU0VSVChtX3RyYW5zZm9ybU1vZGUgPT0gS2VlcFRyYW5z
Zm9ybSk7Ci0gICAgLy8gRmFsbCB0aHJvdWdoIHRvIGZpbGxpbmcgd2l0aCB3aGl0ZS4KLSAgICBz
ZXR1cExheWVyRm9yV2hpdGVMYXllcigpOwotfQotCi12b2lkIFRyYW5zcGFyZW5jeVdpbjo6c2V0
dXBMYXllckZvcldoaXRlTGF5ZXIoKQotewotICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Ci0g
ICAgaWYgKCFtX3ZhbGlkTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZHJhd0NvbnRl
eHQtPmZpbGxSZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fbGF5ZXJTaXplKSwgQ29sb3I6
OndoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAvLyBMYXllciByZWN0IHJlcHJlc2Vu
dHMgdGhlIHBhcnQgb2YgdGhlIG9yaWdpbmFsIGxheWVyLgotfQotCi12b2lkIFRyYW5zcGFyZW5j
eVdpbjo6c2V0dXBUcmFuc2Zvcm0oY29uc3QgSW50UmVjdCYgcmVnaW9uKQotewotICAgIHN3aXRj
aCAobV90cmFuc2Zvcm1Nb2RlKSB7Ci0gICAgY2FzZSBLZWVwVHJhbnNmb3JtOgotICAgICAgICBz
ZXR1cFRyYW5zZm9ybUZvcktlZXBUcmFuc2Zvcm0ocmVnaW9uKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBVbnRyYW5zZm9ybToKLSAgICAgICAgc2V0dXBUcmFuc2Zvcm1Gb3JVbnRyYW5zZm9y
bSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNjYWxlVHJhbnNmb3JtOgotICAgICAgICBz
ZXR1cFRyYW5zZm9ybUZvclNjYWxlVHJhbnNmb3JtKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LX0KLQotdm9pZCBUcmFuc3BhcmVuY3lXaW46OnNldHVwVHJhbnNmb3JtRm9yS2VlcFRyYW5zZm9y
bShjb25zdCBJbnRSZWN0JiByZWdpb24pCi17Ci0gICAgaWYgKCFtX3ZhbGlkTGF5ZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2xheWVyTW9kZSAhPSBOb0xheWVyKSB7Ci0gICAgICAg
IC8vIE5lZWQgdG8gc2F2ZSB0aGluZ3Mgc2luY2Ugd2UncmUgbW9kaWZ5aW5nIHRoZSB0cmFuc2Zv
cm0uCi0gICAgICAgIG1fZHJhd0NvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgbV9zYXZlZE9uRHJh
d0NvbnRleHQgPSB0cnVlOwotCi0gICAgICAgIC8vIEFjY291bnQgZm9yIHRoZSBmYWN0IHRoYXQg
dGhlIGxheWVyIG1heSBiZSBvZmZzZXQgZnJvbSB0aGUKLSAgICAgICAgLy8gb3JpZ2luYWwuIFRo
aXMgb25seSBoYXBwZW5zIHdoZW4gd2UgY3JlYXRlIGEgbGF5ZXIgdGhhdCBoYXMgdGhlCi0gICAg
ICAgIC8vIHNhbWUgY29vcmRpbmF0ZSBzcGFjZSBhcyB0aGUgcGFyZW50LgotICAgICAgICBBZmZp
bmVUcmFuc2Zvcm0geGZvcm07Ci0gICAgICAgIHhmb3JtLnRyYW5zbGF0ZSgtbV90cmFuc2Zvcm1l
ZFNvdXJjZVJlY3QueCgpLCAtbV90cmFuc2Zvcm1lZFNvdXJjZVJlY3QueSgpKTsKLQotICAgICAg
ICAvLyBXZSdyZSBtYWtpbmcgYSBsYXllciwgc28gYXBwbHkgdGhlIG9sZCB0cmFuc2Zvcm0gdG8g
dGhlIG5ldyBvbmUKLSAgICAgICAgLy8gc28gaXQncyBtYWludGFpbmVkLiBXZSBrbm93IHRoZSBu
ZXcgbGF5ZXIgaGFzIHRoZSBpZGVudGl0eQotICAgICAgICAvLyB0cmFuc2Zvcm0gbm93LCB3ZSB3
ZSBjYW4ganVzdCBtdWx0aXBseSBpdC4KLSAgICAgICAgeGZvcm0gKj0gbV9vcmdUcmFuc2Zvcm07
Ci0gICAgICAgIG1fZHJhd0NvbnRleHQtPmNvbmNhdENUTSh4Zm9ybSk7Ci0gICAgfQotICAgIG1f
ZHJhd1JlY3QgPSBtX3NvdXJjZVJlY3Q7Ci19Ci0KLXZvaWQgVHJhbnNwYXJlbmN5V2luOjpzZXR1
cFRyYW5zZm9ybUZvclVudHJhbnNmb3JtKCkKLXsKLSAgICBBU1NFUlQobV9sYXllck1vZGUgIT0g
Tm9MYXllcik7Ci0gICAgLy8gV2Ugbm93IGhhdmUgYSBuZXcgbGF5ZXIgd2l0aCB0aGUgaWRlbnRp
dHkgdHJhbnNmb3JtLCB3aGljaCBpcyB0aGUKLSAgICAvLyBVbnRyYW5zZm9ybWVkIHNwYWNlIHdl
J2xsIHVzZSBmb3IgZHJhd2luZy4KLSAgICBtX2RyYXdSZWN0ID0gSW50UmVjdChJbnRQb2ludCgw
LCAwKSwgbV9sYXllclNpemUpOwotfQotCi12b2lkIFRyYW5zcGFyZW5jeVdpbjo6c2V0dXBUcmFu
c2Zvcm1Gb3JTY2FsZVRyYW5zZm9ybSgpCi17Ci0gICAgaWYgKCFtX3ZhbGlkTGF5ZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2xheWVyTW9kZSA9PSBOb0xheWVyKSB7Ci0gICAgICAg
IC8vIE5lZWQgdG8gc2F2ZSB0aGluZ3Mgc2luY2Ugd2UncmUgbW9kaWZ5aW5nIHRoZSBsYXllci4K
LSAgICAgICAgbV9kcmF3Q29udGV4dC0+c2F2ZSgpOwotICAgICAgICBtX3NhdmVkT25EcmF3Q29u
dGV4dCA9IHRydWU7Ci0KLSAgICAgICAgLy8gVW5kbyB0aGUgdHJhbnNmb3JtIG9uIHRoZSBjdXJy
ZW50IGxheWVyIHdoZW4gd2UncmUgcmUtdXNpbmcgdGhlCi0gICAgICAgIC8vIGN1cnJlbnQgb25l
LgotICAgICAgICBtX2RyYXdDb250ZXh0LT5jb25jYXRDVE0obV9kcmF3Q29udGV4dC0+Z2V0Q1RN
KCkuaW52ZXJzZSgpKTsKLQotICAgICAgICAvLyBXZSdyZSBkcmF3aW5nIHRvIHRoZSBvcmlnaW5h
bCBsYXllciB3aXRoIGp1c3QgYSBkaWZmZXJlbnQgc2l6ZS4KLSAgICAgICAgbV9kcmF3UmVjdCA9
IG1fdHJhbnNmb3JtZWRTb3VyY2VSZWN0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEp1c3Qg
Z28gYWhlYWQgYW5kIHVzZSB0aGUgbGF5ZXIncyBjb29yZGluYXRlIHNwYWNlIHRvIGRyYXcgaW50
by4KLSAgICAgICAgLy8gSXQgd2lsbCBoYXZlIHRoZSBzY2FsZWQgc2l6ZSwgYW5kIGFuIGlkZW50
aXR5IHRyYW5zZm9ybSBsb2FkZWQuCi0gICAgICAgIG1fZHJhd1JlY3QgPSBJbnRSZWN0KEludFBv
aW50KDAsIDApLCBtX2xheWVyU2l6ZSk7Ci0gICAgfQotfQotCi12b2lkIFRyYW5zcGFyZW5jeVdp
bjo6c2V0VGV4dENvbXBvc2l0ZUNvbG9yKENvbG9yIGNvbG9yKQotewotICAgIG1fdGV4dENvbXBv
c2l0ZUNvbG9yID0gY29sb3I7Ci19Ci0KLXZvaWQgVHJhbnNwYXJlbmN5V2luOjppbml0aWFsaXpl
TmV3Q29udGV4dCgpCi17Ci0gICAgaW50IHBpeGVsU2l6ZSA9IG1fbGF5ZXJTaXplLndpZHRoKCkg
KiBtX2xheWVyU2l6ZS5oZWlnaHQoKTsKLSAgICBpZiAocGl4ZWxTaXplIDw9IDApIAotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAocGl4ZWxTaXplID4gbWF4Q2FjaGVkQnVmZmVyUGl4ZWxTaXpl
KSB7Ci0gICAgICAgIC8vIENyZWF0ZSBhIDEtb2ZmIGJ1ZmZlciBmb3IgZHJhd2luZyBpbnRvLiBX
ZSBvbmx5IG5lZWQgdGhlIHJlZmVyZW5jZQotICAgICAgICAvLyBidWZmZXIgaWYgd2UncmUgbWFr
aW5nIGFuIE9wYXF1ZUNvbXBvc2l0ZUxheWVyLgotICAgICAgICBib29sIG5lZWRSZWZlcmVuY2VC
aXRtYXAgPSBtX2xheWVyTW9kZSA9PSBPcGFxdWVDb21wb3NpdGVMYXllcjsKLSAgICAgICAgbV9v
d25lZEJ1ZmZlcnMgPSBhZG9wdFB0cihuZXcgT3duZWRCdWZmZXJzKG1fbGF5ZXJTaXplLCBuZWVk
UmVmZXJlbmNlQml0bWFwKSk7Ci0gICAgICAgIG1fbGF5ZXJCdWZmZXIgPSBtX293bmVkQnVmZmVy
cy0+ZGVzdEJpdG1hcCgpOwotICAgICAgICBpZiAoIW1fbGF5ZXJCdWZmZXIpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgbV9kcmF3Q29udGV4dCA9IG1fbGF5ZXJCdWZmZXItPmNvbnRl
eHQoKTsKLSAgICAgICAgaWYgKG5lZWRSZWZlcmVuY2VCaXRtYXApIHsKLSAgICAgICAgICAgIG1f
cmVmZXJlbmNlQml0bWFwID0gbV9vd25lZEJ1ZmZlcnMtPnJlZmVyZW5jZUJpdG1hcCgpOwotICAg
ICAgICAgICAgaWYgKCFtX3JlZmVyZW5jZUJpdG1hcCB8fCAhbV9yZWZlcmVuY2VCaXRtYXAtPmdl
dFBpeGVscygpKSAKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
bV92YWxpZExheWVyID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICht
X2NhY2hlZEJ1ZmZlcnMgJiYgbV9jYWNoZWRCdWZmZXJzLT5jYW5IYW5kbGVTaXplKG1fbGF5ZXJT
aXplKSkgewotICAgICAgICAvLyBXZSBjYW4gcmUtdXNlIHRoZSBleGlzdGluZyBidWZmZXIuIFdl
IGRvbid0IG5lZWQgdG8gY2xlYXIgaXQgc2luY2UKLSAgICAgICAgLy8gYWxsIGxheWVyIG1vZGVz
IHdpbGwgY2xlYXIgaXQgaW4gdGhlaXIgaW5pdGlhbGl6YXRpb24uCi0gICAgICAgIG1fbGF5ZXJC
dWZmZXIgPSBtX2NhY2hlZEJ1ZmZlcnMtPmRlc3RCaXRtYXAoKTsKLSAgICAgICAgbV9kcmF3Q29u
dGV4dCA9IG1fY2FjaGVkQnVmZmVycy0+ZGVzdEJpdG1hcCgpLT5jb250ZXh0KCk7Ci0gICAgICAg
IGJpdG1hcEZvckNvbnRleHQoKm1fZHJhd0NvbnRleHQpLmVyYXNlQVJHQigwLCAwLCAwLCAwKTsK
LSAgICAgICAgbV9yZWZlcmVuY2VCaXRtYXAgPSBtX2NhY2hlZEJ1ZmZlcnMtPnJlZmVyZW5jZUJp
dG1hcCgpOwotICAgICAgICBtX3JlZmVyZW5jZUJpdG1hcC0+ZXJhc2VBUkdCKDAsIDAsIDAsIDAp
OwotICAgICAgICBtX3ZhbGlkTGF5ZXIgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gQ3JlYXRlIGEgbmV3IGNhY2hlZCBidWZmZXIuCi0gICAgaWYgKG1fY2FjaGVkQnVm
ZmVycykKLSAgICAgIGRlbGV0ZSBtX2NhY2hlZEJ1ZmZlcnM7Ci0gICAgbV9jYWNoZWRCdWZmZXJz
ID0gbmV3IE93bmVkQnVmZmVycyhtX2xheWVyU2l6ZSwgdHJ1ZSk7Ci0KLSAgICBtX2xheWVyQnVm
ZmVyID0gbV9jYWNoZWRCdWZmZXJzLT5kZXN0Qml0bWFwKCk7Ci0gICAgbV9kcmF3Q29udGV4dCA9
IG1fY2FjaGVkQnVmZmVycy0+ZGVzdEJpdG1hcCgpLT5jb250ZXh0KCk7Ci0gICAgbV9yZWZlcmVu
Y2VCaXRtYXAgPSBtX2NhY2hlZEJ1ZmZlcnMtPnJlZmVyZW5jZUJpdG1hcCgpOwotICAgIG1fdmFs
aWRMYXllciA9IHRydWU7Ci19Ci0KLXZvaWQgVHJhbnNwYXJlbmN5V2luOjpjb21wb3NpdGVPcGFx
dWVDb21wb3NpdGUoKQotewotICAgIGlmICghbV92YWxpZExheWVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBkZXN0UGxhdGZvcm1Db250ZXh0ID0gbV9kZXN0
Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgZGVzdFBsYXRmb3JtQ29udGV4dC0+c2F2
ZSgpOwotCi0gICAgU2tCaXRtYXAqIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAqPigKLSAg
ICAgICAgJmJpdG1hcEZvckNvbnRleHQoKm1fbGF5ZXJCdWZmZXItPmNvbnRleHQoKSkpOwotICAg
IAotICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZm9yIFdoaXRlTGF5ZXIgYXMg
d2VsbCwgd2hpY2ggd2UgZG9uJ3Qgd2FudAotICAgIC8vIHRvIGNoYW5nZS4KLSAgICBpZiAobV9s
YXllck1vZGUgPT0gT3BhcXVlQ29tcG9zaXRlTGF5ZXIpIHsKLSAgICAgICAgLy8gRml4IHVwIG91
ciBiaXRtYXAsIG1ha2luZyBpdCBjb250YWluIG9ubHkgdGhlIHBpeGVscyB3aGljaCBjaGFuZ2Vk
Ci0gICAgICAgIC8vIGFuZCB0cmFuc3BhcmVudCBldmVyeXdoZXJlIGVsc2UuCi0gICAgICAgIFNr
QXV0b0xvY2tQaXhlbHMgc291cmNlTG9jaygqbV9yZWZlcmVuY2VCaXRtYXApOwotICAgICAgICBT
a0F1dG9Mb2NrUGl4ZWxzIGxvY2soKmJpdG1hcCk7Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgYml0bWFwLT5oZWlnaHQoKTsgeSsrKSB7Ci0gICAgICAgICAgICB1aW50MzJfdCogc291cmNl
ID0gbV9yZWZlcmVuY2VCaXRtYXAtPmdldEFkZHIzMigwLCB5KTsKLSAgICAgICAgICAgIHVpbnQz
Ml90KiBkZXN0ID0gYml0bWFwLT5nZXRBZGRyMzIoMCwgeSk7Ci0gICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGJpdG1hcC0+d2lkdGgoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgLy8g
Q2xlYXIgb3V0IGFueSBwaXhlbHMgdGhhdCB3ZXJlIHVudG91Y2hlZC4KLSAgICAgICAgICAgICAg
ICBpZiAoZGVzdFt4XSA9PSBzb3VyY2VbeF0pCi0gICAgICAgICAgICAgICAgICAgIGRlc3RbeF0g
PSAwOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSB8
PSAoMHhGRiA8PCBTS19BMzJfU0hJRlQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fSBlbHNlCi0gICAgICAgIG1ha2VMYXllck9wYXF1ZSgpOwotCi0gICAgU2tSZWN0IGRlc3RSZWN0
OwotICAgIGlmIChtX3RyYW5zZm9ybU1vZGUgIT0gVW50cmFuc2Zvcm0pIHsKLSAgICAgICAgLy8g
V2Ugd2FudCB0byB1c2UgVW50cmFuc2Zvcm1lZCBzcGFjZS4KLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gTm90ZSB0aGF0IHdlIERPTidUIGNhbGwgbV9sYXllckJ1ZmZlci0+aW1hZ2UoKSBoZXJlLiBU
aGlzIGFjdHVhbGx5Ci0gICAgICAgIC8vIG1ha2VzIGEgY29weSBvZiB0aGUgaW1hZ2UsIHdoaWNo
IGlzIHVubmVjZXNzYXJ5IGFuZCBzbG93LiBJbnN0ZWFkLCB3ZQotICAgICAgICAvLyBqdXN0IGRy
YXcgdGhlIGltYWdlIGZyb20gaW5zaWRlIHRoZSBkZXN0aW5hdGlvbiBjb250ZXh0LgotICAgICAg
ICBTa01hdHJpeCBpZGVudGl0eTsKLSAgICAgICAgaWRlbnRpdHkucmVzZXQoKTsKLSAgICAgICAg
ZGVzdFBsYXRmb3JtQ29udGV4dC0+c2V0TWF0cml4KGlkZW50aXR5KTsKLQotICAgICAgICBkZXN0
UmVjdC5zZXQobV90cmFuc2Zvcm1lZFNvdXJjZVJlY3QueCgpLCBtX3RyYW5zZm9ybWVkU291cmNl
UmVjdC55KCksIG1fdHJhbnNmb3JtZWRTb3VyY2VSZWN0Lm1heFgoKSwgbV90cmFuc2Zvcm1lZFNv
dXJjZVJlY3QubWF4WSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGVzdFJlY3Quc2V0KG1fc291
cmNlUmVjdC54KCksIG1fc291cmNlUmVjdC55KCksIG1fc291cmNlUmVjdC5tYXhYKCksIG1fc291
cmNlUmVjdC5tYXhZKCkpOwotCi0gICAgU2tQYWludCBwYWludDsKLSAgICBwYWludC5zZXRGaWx0
ZXJCaXRtYXAodHJ1ZSk7Ci0gICAgcGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOwotCi0gICAgLy8g
Tm90ZSB0aGF0IHdlIG5lZWQgdG8gc3BlY2lmeSB0aGUgc291cmNlIGxheWVyIHN1YnNldCwgc2lu
Y2UgdGhlIGJpdG1hcAotICAgIC8vIG1heSBoYXZlIGJlZW4gY2FjaGVkIGFuZCBpdCBjb3VsZCBi
ZSBsYXJnZXIgdGhhbiB3aGF0IHdlJ3JlIHVzaW5nLgotICAgIFNrSVJlY3Qgc291cmNlUmVjdCA9
IHsgMCwgMCwgbV9sYXllclNpemUud2lkdGgoKSwgbV9sYXllclNpemUuaGVpZ2h0KCkgfTsKLSAg
ICBkZXN0UGxhdGZvcm1Db250ZXh0LT5kcmF3Qml0bWFwUmVjdCgqYml0bWFwLCAmc291cmNlUmVj
dCwgZGVzdFJlY3QsICZwYWludCk7Ci0gICAgZGVzdFBsYXRmb3JtQ29udGV4dC0+cmVzdG9yZSgp
OwotfQotCi12b2lkIFRyYW5zcGFyZW5jeVdpbjo6Y29tcG9zaXRlVGV4dENvbXBvc2l0ZSgpCi17
Ci0gICAgaWYgKCFtX3ZhbGlkTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IFNr
Qml0bWFwJiBiaXRtYXAgPSBtX2xheWVyQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4
dCgpLT5sYXllckJpdG1hcChQbGF0Zm9ybUNvbnRleHRTa2lhOjpSZWFkV3JpdGUpOwotICAgIFNr
Q29sb3IgdGV4dENvbG9yID0gbV90ZXh0Q29tcG9zaXRlQ29sb3IucmdiKCk7Ci0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBtX2xheWVyU2l6ZS5oZWlnaHQoKTsgeSsrKSB7Ci0gICAgICAgIHVpbnQz
Ml90KiByb3cgPSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IG1fbGF5ZXJTaXplLndpZHRoKCk7IHgrKykgewotICAgICAgICAgICAgLy8gVGhlIGFs
cGhhIGlzIHRoZSBhdmVyYWdlIG9mIHRoZSBSLCBHLCBhbmQgQiBjaGFubmVscy4KLSAgICAgICAg
ICAgIGludCBhbHBoYSA9IChTa0dldFBhY2tlZFIzMihyb3dbeF0pICsgU2tHZXRQYWNrZWRHMzIo
cm93W3hdKSArIFNrR2V0UGFja2VkQjMyKHJvd1t4XSkpIC8gMzsKLQotICAgICAgICAgICAgLy8g
QXBwbHkgdGhhdCBhbHBoYSB0byB0aGUgdGV4dCBjb2xvciBhbmQgd3JpdGUgdGhlIHJlc3VsdC4K
LSAgICAgICAgICAgIHJvd1t4XSA9IFNrQWxwaGFNdWxRKHRleHRDb2xvciwgU2tBbHBoYTI1NVRv
MjU2KDI1NSAtIGFscGhhKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOb3cgdGhlIGxh
eWVyIGhhcyB0ZXh0IHdpdGggdGhlIHByb3BlciBjb2xvciBhbmQgb3BhY2l0eS4KLSAgICBQbGF0
Zm9ybUNvbnRleHRTa2lhKiBkZXN0UGxhdGZvcm1Db250ZXh0ID0gbV9kZXN0Q29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7Ci0gICAgZGVzdFBsYXRmb3JtQ29udGV4dC0+c2F2ZSgpOwotCi0gICAg
Ly8gV2Ugd2FudCB0byB1c2UgVW50cmFuc2Zvcm1lZCBzcGFjZSAoc2VlIGFib3ZlKQotICAgIFNr
TWF0cml4IGlkZW50aXR5OwotICAgIGlkZW50aXR5LnJlc2V0KCk7Ci0gICAgZGVzdFBsYXRmb3Jt
Q29udGV4dC0+c2V0TWF0cml4KGlkZW50aXR5KTsKLSAgICBTa1JlY3QgZGVzdFJlY3QgPSB7IG1f
dHJhbnNmb3JtZWRTb3VyY2VSZWN0LngoKSwgbV90cmFuc2Zvcm1lZFNvdXJjZVJlY3QueSgpLCBt
X3RyYW5zZm9ybWVkU291cmNlUmVjdC5tYXhYKCksIG1fdHJhbnNmb3JtZWRTb3VyY2VSZWN0Lm1h
eFkoKSB9OwotCi0gICAgLy8gTm90ZSB0aGF0IHdlIG5lZWQgdG8gc3BlY2lmeSB0aGUgc291cmNl
IGxheWVyIHN1YnNldCwgc2luY2UgdGhlIGJpdG1hcAotICAgIC8vIG1heSBoYXZlIGJlZW4gY2Fj
aGVkIGFuZCBpdCBjb3VsZCBiZSBsYXJnZXIgdGhhbiB3aGF0IHdlJ3JlIHVzaW5nLgotICAgIFNr
SVJlY3Qgc291cmNlUmVjdCA9IHsgMCwgMCwgbV9sYXllclNpemUud2lkdGgoKSwgbV9sYXllclNp
emUuaGVpZ2h0KCkgfTsKLSAgICBkZXN0UGxhdGZvcm1Db250ZXh0LT5kcmF3Qml0bWFwUmVjdChi
aXRtYXAsICZzb3VyY2VSZWN0LCBkZXN0UmVjdCwgMCk7Ci0gICAgZGVzdFBsYXRmb3JtQ29udGV4
dC0+cmVzdG9yZSgpOwotfQotCi12b2lkIFRyYW5zcGFyZW5jeVdpbjo6bWFrZUxheWVyT3BhcXVl
KCkKLXsKLSAgICBpZiAoIW1fdmFsaWRMYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2tC
aXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihtX2RyYXdDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+bGF5ZXJCaXRtYXAoUGxhdGZvcm1Db250ZXh0U2tpYTo6UmVhZFdyaXRl
KSk7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xheWVyU2l6ZS5oZWlnaHQoKTsgeSsrKSB7
Ci0gICAgICAgIHVpbnQzMl90KiByb3cgPSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOwotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IG1fbGF5ZXJTaXplLndpZHRoKCk7IHgrKykKLSAgICAgICAg
ICAgIHJvd1t4XSB8PSAweEZGMDAwMDAwOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJh
bnNwYXJlbmN5V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmgJKHJldmlzaW9uIDE0NzczMikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDI2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUcmFuc3BhcmVuY3lX
aW5faAotI2RlZmluZSBUcmFuc3BhcmVuY3lXaW5faAotCi0jaW5jbHVkZSA8d2luZG93cy5oPgot
Ci0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
LSAKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
Ci0KLWNsYXNzIFNrQml0bWFwOwotY2xhc3MgU2tDYW52YXM7Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgVHJhbnNwYXJlbmN5V2luX05vTGF5
ZXJfVGVzdDsKLWNsYXNzIFRyYW5zcGFyZW5jeVdpbl9XaGl0ZUxheWVyX1Rlc3Q7Ci1jbGFzcyBU
cmFuc3BhcmVuY3lXaW5fVGV4dENvbXBvc2l0ZV9UZXN0OwotY2xhc3MgVHJhbnNwYXJlbmN5V2lu
X09wYXF1ZUNvbXBvc2l0ZUxheWVyX1Rlc3Q7Ci0KLS8vIEhlbHBlciBjbGFzcyB0aGF0IGFic3Ry
YWN0cyBhd2F5IGRyYXdpbmcgQ2xlYXJUeXBlIHRleHQgYW5kIFdpbmRvd3MgZm9ybQotLy8gY29u
dHJvbHMgZWl0aGVyIHRvIHRoZSBvcmlnaW5hbCBjb250ZXh0IGRpcmVjdGx5LCBvciB0byBhbiBv
ZmZzY3JlZW4gY29udGV4dAotLy8gdGhhdCBpcyBjb21wb3NpdGVkIGxhdGVyIG1hbnVhbGx5LiBU
aGlzIGlzIHRvIGdldCBhcm91bmQgV2luZG93cycgaW5hYmlsaXR5Ci0vLyB0byBoYW5kbGUgdGhl
IGFscGhhIGNoYW5uZWwsIHNlbWl0cmFuc3BhcmVudCB0ZXh0LCBhbmQgdHJhbnNmb3JtZWQgZm9y
bQotLy8gY29udHJvbHMuCi1jbGFzcyBUcmFuc3BhcmVuY3lXaW4gewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFRyYW5zcGFyZW5jeVdpbik7Ci1wdWJsaWM6Ci0gICAgZW51bSBMYXllck1vZGUg
ewotICAgICAgICAvLyBObyBleHRyYSBsYXllciBpcyBjcmVhdGVkLiBEcmF3aW5nIHdpbGwgaGFw
cGVuIHRvIHRoZSBzb3VyY2UuCi0gICAgICAgIC8vIFZhbGlkIG9ubHkgd2l0aCBLZWVwVHJhbnNm
b3JtIGFuZCBTY2FsZVRyYW5zZm9ybS4gVGhlIHJlZ2lvbiBiZWluZwotICAgICAgICAvLyBkcmF3
biBvbnRvIG11c3QgYmUgb3BhcXVlLCBzaW5jZSB0aGUgbW9kaWZpZWQgcmVnaW9uIHdpbGwgYmUg
Zm9yY2VkCi0gICAgICAgIC8vIHRvIG9wYXF1ZSB3aGVuIGRyYXdpbmcgaXMgY29tcGxldGUuCi0g
ICAgICAgIE5vTGF5ZXIsCi0KLSAgICAgICAgLy8gTWFrZXMgYSB0ZW1wb3JhcnkgbGF5ZXIgY29u
c2lzdGluZyBvZiB0aGUgY29tcG9zaXRlZCBsYXllcnMgYmVsb3cKLSAgICAgICAgLy8gaXQuIFRo
aXMgcmVzdWx0IG11c3QgYmUgb3BhcXVlLiBXaGVuIGNvbXBsZXRlLCB0aGUgcmVzdWx0IHdpbGwg
YmUKLSAgICAgICAgLy8gY29tcGFyZWQgdG8gdGhlIG9yaWdpbmFsLCBhbmQgdGhlIGRpZmZlcmVu
Y2Ugd2lsbCBiZSBhZGRlZCB0byBhIHRoZWUKLSAgICAgICAgLy8gZGVzdGluYXRpb24gbGF5ZXIu
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoaXMgbW9kZSBvbmx5IHdvcmtzIGlmIHRoZSBsb3dl
ciBsYXllcnMgYXJlIG9wcXVlIChub3JtYWxseSB0aGUKLSAgICAgICAgLy8gY2FzZSBmb3IgYSB3
ZWIgcGFnZSkgYW5kIGxheWVycyBhcmUgb25seSBkcmF3biBpbiB0aGUgc3RhY2sgb3JkZXIsCi0g
ICAgICAgIC8vIG1lYW5pbmcgeW91IGNhbiBuZXZlciBkcmF3IHVuZGVybmVhdGggYSBsYXllci4K
LSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHRlY2huaWNhbGx5IHByb2R1Y2Ug
dGhlIGNvcnJlY3QgYW5zd2VyIGluIGFsbCBjYXNlcy4gSWYKLSAgICAgICAgLy8geW91IGhhdmUg
YW4gb3BhcXVlIGJhc2UsIGEgdHJhbnNwYXJlbmN5IGxheWVyLCB0aGFuIGEgc2VtaXRyYW5zcGFy
ZW50Ci0gICAgICAgIC8vIGRyYXdpbmcgb24gdG9wLCB0aGUgcmVzdWx0IHdpbGwgYWN0dWFsbHkg
YmUgYmxlbmRlZCBpbiB0d2ljZS4gQnV0Ci0gICAgICAgIC8vIHRoaXMgaXNuJ3QgYSB2ZXJ5IGlt
cG9ydGFudCBjYXNlLiBUaGlzIG1vZGUgaXMgdXNlZCBmb3IgZm9ybQotICAgICAgICAvLyBjb250
cm9scyB3aGljaCBhcmUgYWx3YXlzIG9wYXF1ZSBleGNlcHQgZm9yIG9jY2F0aW9uYWxseSBzb21l
Ci0gICAgICAgIC8vIGFudGlhbGlhc2luZy4gSXQgbWVhbnMgZm9ybSBjb250cm9sIGFudGlhbGlh
c2luZyB3aWxsIGJlIHRvbyBsaWdodCBpbgotICAgICAgICAvLyBzb21lIGNhc2VzLCBidXQgb25s
eSBpZiB5b3UgaGF2ZSBleHRyYSBsYXllcnMuCi0gICAgICAgIE9wYXF1ZUNvbXBvc2l0ZUxheWVy
LAotCi0gICAgICAgIC8vIEFsbG93cyBzZW1pdHJhbnNwYXJlbnQgdGV4dCB0byBiZSBkcmF3biBv
biBhbnkgYmFja2dyb3VuZCAoZXZlbiBpZiBpdAotICAgICAgICAvLyBpcyBpdHNlbGYgc2VtaXRy
YW5zcGFyZW50KSwgYnV0IGRpc2FibGVzIENsZWFyVHlwZS4KLSAgICAgICAgLy8KLSAgICAgICAg
Ly8gSXQgbWFrZXMgYSB0cm1wb3JhcnkgbGF5ZXIgZmlsbGVkIHdpdGggd2hpdGUuIFRoaXMgaXMg
Y29tcG9zaXRlZCB3aXRoCi0gICAgICAgIC8vIHRoZSBsb3dlciBsYXllciB3aXRoIGEgY3VzdG9t
IGNvbG9yIGFwcGxpZWQgdG8gcHJvZHVjZSB0aGUgcmVzdWx0LgotICAgICAgICAvLyBUaGUgY2Fs
bGVyIG11c3QgZHJhdyB0aGUgdGV4dCBpbiBibGFjaywgYW5kIHNldCB0aGUgZGVzaXJlZCBmaW5h
bAotICAgICAgICAvLyB0ZXh0IGNvbG9yIGJ5IGNhbGxpbmcgc2V0VGV4dENvbXBvc2l0ZUNvbG9y
KCkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIE9ubHkgdmFsaWQgd2l0aCBLZWVwVHJhbnNmb3Jt
LCB3aGljaCBpcyB0aGUgb25seSBtb2RlIHdoZXJlIGRyYXdpbmcKLSAgICAgICAgLy8gdGV4dCBp
biB0aGlzIGZhc2hpb24gbWFrZXMgc2Vuc2UuCi0gICAgICAgIFRleHRDb21wb3NpdGUsCi0KLSAg
ICAgICAgLy8gTWFrZXMgYSB0ZW1wb3JhcnkgbGF5ZXIgZmlsbGVkIHdpdGggd2hpdGUuIFdoZW4g
Y29tcGxldGUsIHRoZSBsYXllcgotICAgICAgICAvLyB3aWxsIGJlIGZvcmNlZCB0byBiZSBvcHFh
dWUgKHNpbmNlIFdpbmRvd3MgbWF5IGhhdmUgbWVzc2VkIHVwIHRoZQotICAgICAgICAvLyBhbHBo
YSBjaGFubmVsKSBhbmQgY29tcG9zaXRlZCBkb3duLiBBbnkgYXJlYXMgbm90IGRyYXduIGludG8g
d2lsbAotICAgICAgICAvLyByZW1haW4gd2hpdGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRo
aXMgaXMgdGhlIG1vZGUgb2YgbGFzdCByZXNvcnQuIElmIHRoZSBvcGFjaXR5IG9mIHRoZSBmaW5h
bCBpbWFnZQotICAgICAgICAvLyBpcyB1bmtub3duIGFuZCB3ZSBjYW4ndCBkbyB0aGUgdGV4dCB0
cmljayAoc2luY2Ugd2Uga25vdyBpdHMgY29sb3IpLAotICAgICAgICAvLyB0aGVuIHdlIGhhdmUg
dG8gbGl2ZSB3aXRoIHBvdGVudGlhbCB3aGl0ZSBoYWxvcy4gVGhpcyBpcyB1c2VkIGZvcgotICAg
ICAgICAvLyBmb3JtIGNvbnRyb2wgZHJhd2luZywgZm9yIGV4YW1wbGUuCi0gICAgICAgIFdoaXRl
TGF5ZXIsCi0gICAgfTsKLQotICAgIGVudW0gVHJhbnNmb3JtTW9kZSB7Ci0gICAgICAgIC8vIFRo
ZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHRoZSB0cmFuc2Zvcm0uIFVzZSB0aGlzIHdoZW4gZHJhd2lu
ZwotICAgICAgICAvLyBob3Jpem9udGFsIHRleHQuIFRoZSBjdXJyZW50IHRyYW5zZm9ybSBtdXN0
IG5vdCBoYXZlIHJvdGF0aW9uLgotICAgICAgICBLZWVwVHJhbnNmb3JtLAotCi0gICAgICAgIC8v
IERyYXdpbmcgaGFwcGVucyBpbiBhbiBVbnRyYW5zZm9ybWVkIHNwYWNlLCBhbmQgdGhlbiB0aGF0
IGJpdG1hcCBpcwotICAgICAgICAvLyB0cmFuc2Zvcm1lZCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJl
bnQgY29udGV4dCB3aGVuIGl0IGlzIGNvcGllZCBkb3duLgotICAgICAgICAvLyBSZXF1aXJlcyB0
aGF0IGEgbGF5ZXIgYmUgY3JlYXRlZCAobGF5ZXIgbW9kZSBpcyBub3QgTm9MYXllcikuCi0gICAg
ICAgIFVudHJhbnNmb3JtLAotCi0gICAgICAgIC8vIFdoZW4gdGhlIGN1cnJlbnQgdHJhbnNmb3Jt
IG9ubHkgaGFzIGEgc2NhbGluZyBmYWN0b3IgYXBwbGllZCBhbmQKLSAgICAgICAgLy8geW91J3Jl
IGRyYXdpbmcgZm9ybSBlbGVtZW50cywgdXNlIHRoaXMgcGFyYW1ldGVyLiBUaGlzIHdpbGwgdW5z
Y2FsZQotICAgICAgICAvLyB0aGUgY29vcmRpbmF0ZSBzcGFjZSwgc28gdGhlIE9TIHdpbGwganVz
dCBkcmF3IHRoZSBmb3JtIGNvbnRyb2xzCi0gICAgICAgIC8vIGxhcmdlciBvciBzbWFsbGVyIGRl
cGVuZGluZyBvbiB0aGUgZGVzdGluYXRpb24gc2l6ZS4KLSAgICAgICAgU2NhbGVUcmFuc2Zvcm0s
Ci0gICAgfTsKLQotICAgIC8vIFlvdSBNVVNUIGNhbGwgaW5pdCgpIGJlbG93LgotICAgIC8vIHxy
ZWdpb258IGlzIGV4cHJlc3NlZCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB0cmFuc2Zvcm1hdGlv
bi4KLSAgICBUcmFuc3BhcmVuY3lXaW4oKTsKLSAgICB+VHJhbnNwYXJlbmN5V2luKCk7Ci0KLSAg
ICAvLyBJbml0aWFsaXplcyB0aGUgbWVtYmVycyBpZiB5b3UgdXNlIHRoZSAwLWFyZ3VtZW50IGNv
bnN0cnVjdG9yLiBEb24ndCBjYWxsCi0gICAgLy8gdGhpcyBpZiB5b3UgdXNlIHRoZSBtdWx0aXBs
ZS1hcmd1bWVudCBjb25zdHJ1Y3Rvci4KLSAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0KiBk
ZXN0LAotICAgICAgICAgICAgICBMYXllck1vZGUgbGF5ZXJNb2RlLAotICAgICAgICAgICAgICBU
cmFuc2Zvcm1Nb2RlIHRyYW5zZm9ybU1vZGUsCi0gICAgICAgICAgICAgIGNvbnN0IEludFJlY3Qm
IHJlZ2lvbik7Ci0KLSAgICAvLyBDb21iaW5lcyB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBi
aXRtYXBzIHVzaW5nIHRoZSBnaXZlbiBtb2RlLgotICAgIC8vIENhbGxpbmcgdGhpcyBmdW5jdGlv
biBiZWZvcmUgdGhlIGRlc3RydWN0b3IgcnVucyBpcyBtYW5kYXRvcnkgaW4gbW9zdAotICAgIC8v
IGNhc2VzLCBhbmQgaGFybWxlc3Mgb3RoZXJ3aXNlLiAgVGhlIG1hbmRhdG9yeSBjYXNlcyBhcmU6
Ci0gICAgLy8gICAgICAgKG1fbGF5ZXJNb2RlICE9IE5vTGF5ZXIpIHx8IChtX3RyYW5zZm9ybU1v
ZGUgPT0gU2NhbGVUcmFuc2Zvcm0pCi0gICAgdm9pZCBjb21wb3NpdGUoKTsKLQotICAgIC8vIFJl
dHVybnMgdGhlIGNvbnRleHQgZm9yIGRyYXdpbmcgaW50bywgd2hpY2ggbWF5IGJlIHRoZSBkZXN0
aW5hdGlvbgotICAgIC8vIGNvbnRleHQsIG9yIGEgdGVtcG9yYXJ5IG9uZS4KLSAgICBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2RyYXdDb250ZXh0OyB9Ci0KLSAg
ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9kcmF3Q29udGV4dCA/IG1fZHJhd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogMDsg
fQotCi0gICAgLy8gV2hlbiB0aGUgbW9kZSBpcyBUZXh0Q29tcG9zaXRlLCB0aGlzIHNldHMgdGhl
IGNvbG9yIHRoYXQgdGhlIHRleHQgd2lsbAotICAgIC8vIGdldC4gU2VlIHRoZSBlbnVtIGFib3Zl
IGZvciBtb3JlLgotICAgIHZvaWQgc2V0VGV4dENvbXBvc2l0ZUNvbG9yKENvbG9yIGNvbG9yKTsK
LQotICAgIC8vIFJldHVybnMgdGhlIGlucHV0IGJvdW5kcyB0cmFuc2xhdGVkIGludG8gdGhlIGRl
c3RpbmF0aW9uIHNwYWNlLiBUaGlzIGlzCi0gICAgLy8gbm90IG5lY2Vzc2FyeSBmb3IgS2VlcFRy
YW5zZm9ybSBzaW5jZSB0aGUgcmVjdGFuZ2xlIHdpbGwgYmUgdW5jaGFuZ2VkLgotICAgIGNvbnN0
IEludFJlY3QmIGRyYXdSZWN0KCkgeyByZXR1cm4gbV9kcmF3UmVjdDsgfQotCi1wcml2YXRlOgot
ICAgIGZyaWVuZCBUcmFuc3BhcmVuY3lXaW5fTm9MYXllcl9UZXN0OwotICAgIGZyaWVuZCBUcmFu
c3BhcmVuY3lXaW5fV2hpdGVMYXllcl9UZXN0OwotICAgIGZyaWVuZCBUcmFuc3BhcmVuY3lXaW5f
VGV4dENvbXBvc2l0ZV9UZXN0OwotICAgIGZyaWVuZCBUcmFuc3BhcmVuY3lXaW5fT3BhcXVlQ29t
cG9zaXRlTGF5ZXJfVGVzdDsKLQotICAgIGNsYXNzIE93bmVkQnVmZmVyczsKLQotICAgIHZvaWQg
Y29tcHV0ZUxheWVyU2l6ZSgpOwotCi0gICAgLy8gU2V0cyB1cCBhIG5ldyBsYXllciwgaWYgYW55
LiBzZXR1cExheWVyKCkgd2lsbCBjYWxsIHRoZSBhcHBvcHJpYXRlIGxheWVyLQotICAgIC8vIHNw
ZWNpZmljIGhlbHBlci4gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY29tcHV0ZUxheWVyU2l6ZSgpOwot
ICAgIHZvaWQgc2V0dXBMYXllcigpOwotICAgIHZvaWQgc2V0dXBMYXllckZvck5vTGF5ZXIoKTsK
LSAgICB2b2lkIHNldHVwTGF5ZXJGb3JPcGFxdWVDb21wb3NpdGVMYXllcigpOwotICAgIHZvaWQg
c2V0dXBMYXllckZvclRleHRDb21wb3NpdGUoKTsKLSAgICB2b2lkIHNldHVwTGF5ZXJGb3JXaGl0
ZUxheWVyKCk7Ci0KLSAgICAvLyBTZXRzIHVwIHRoZSB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgbmV3
bHkgY3JlYXRlZCBsYXllci4gc2V0dXBUcmFuc2Zvcm0oKQotICAgIC8vIHdpbGwgY2FsbCB0aGUg
YXBwcm9wcmlhdGUgdHJhbnNmb3JtLXNwZWNpZmljIGhlbHBlci4gTXVzdCBiZSBjYWxsZWQgYWZ0
ZXIKLSAgICAvLyBzZXR1cExheWVyKCkuCi0gICAgdm9pZCBzZXR1cFRyYW5zZm9ybShjb25zdCBJ
bnRSZWN0JiByZWdpb24pOwotICAgIHZvaWQgc2V0dXBUcmFuc2Zvcm1Gb3JLZWVwVHJhbnNmb3Jt
KGNvbnN0IEludFJlY3QmIHJlZ2lvbik7Ci0gICAgdm9pZCBzZXR1cFRyYW5zZm9ybUZvclVudHJh
bnNmb3JtKCk7Ci0gICAgdm9pZCBzZXR1cFRyYW5zZm9ybUZvclNjYWxlVHJhbnNmb3JtKCk7Ci0K
LSAgICB2b2lkIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Ci0KLSAgICB2b2lkIGNvbXBvc2l0ZU9w
YXF1ZUNvbXBvc2l0ZSgpOwotICAgIHZvaWQgY29tcG9zaXRlVGV4dENvbXBvc2l0ZSgpOwotCi0g
ICAgLy8gRml4ZXMgdGhlIGFscGhhIGNoYW5uZWwgdG8gbWFrZSB0aGUgcmVnaW9uIGluc2lkZSBt
X3RyYW5zZm9ybWVkUmVjdAotICAgIC8vIG9wYXF1ZS4KLSAgICB2b2lkIG1ha2VMYXllck9wYXF1
ZSgpOwotCi0gICAgLy8gVGhlIGNvbnRleHQgb3VyIGRyYXdpbmcgd2lsbCBldmVudHVhbGx5IGVu
ZCB1cCBpbi4KLSAgICBHcmFwaGljc0NvbnRleHQqIG1fZGVzdENvbnRleHQ7Ci0KLSAgICAvLyBU
aGUgb3JpZ2luYWwgdHJhbnNmb3JtIGZyb20gdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQuCi0gICAg
QWZmaW5lVHJhbnNmb3JtIG1fb3JnVHJhbnNmb3JtOwotCi0gICAgTGF5ZXJNb2RlIG1fbGF5ZXJN
b2RlOwotICAgIFRyYW5zZm9ybU1vZGUgbV90cmFuc2Zvcm1Nb2RlOwotCi0gICAgLy8gVGhlIHJl
Y3RhbmdsZSB3ZSdyZSBkcmF3aW5nIGluIHRoZSBkZXN0aW5hdGlvbidzIGNvb3JkaW5hdGUgc3Bh
Y2UKLSAgICBJbnRSZWN0IG1fc291cmNlUmVjdDsKLQotICAgIC8vIFRoZSBzb3VyY2UgcmVjdGFu
Z2xlIHRyYW5zZm9ybWVkIGludG8gcGl4ZWxzIGluIHRoZSBmaW5hbCBpbWFnZS4gRm9yCi0gICAg
Ly8gVW50cmFuc2Zvcm0gdGhpcyBoYXMgbm8gbWVhbmluZywgc2luY2UgdGhlIGRlc3RpbmF0aW9u
IG1pZ2h0IG5vdCBiZSBhCi0gICAgLy8gcmVjdGFuZ2xlLgotICAgIEludFJlY3QgbV90cmFuc2Zv
cm1lZFNvdXJjZVJlY3Q7Ci0KLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgbGF5ZXIgd2UgY3JlYXRl
ZC4gSWYgdGhlcmUncyBubyBsYXllciwgdGhpcyBpcyB0aGUgc2l6ZQotICAgIC8vIG9mIHRoZSBy
ZWdpb24gd2UncmUgdXNpbmcgaW4gdGhlIHNvdXJjZS4KLSAgICBJbnRTaXplIG1fbGF5ZXJTaXpl
OwotCi0gICAgLy8gVGhlIHJlY3RhbmdsZSB3ZSdyZSBkcmF3aW5nIHRvIGluIHRoZSBkcmF3IGNv
bnRleHQncyBjb29yZGluYXRlIHNwYWNlLgotICAgIC8vIFRoaXMgd2lsbCBiZSB0aGUgc2FtZSBh
cyB0aGUgc291cmNlIHJlY3RhbmdsZSBleGNlcHQgZm9yIFNjYWxlVHJhbnNmb3JtCi0gICAgLy8g
d2hlcmUgd2UgY3JlYXRlIGEgbmV3IHZpcnR1YWwgY29vcmRpbmF0ZSBzcGFjZSBmb3IgdGhlIGxh
eWVyLgotICAgIEludFJlY3QgbV9kcmF3UmVjdDsKLQotICAgIC8vIFBvaW50cyB0byB0aGUgZ3Jh
cGhpY3MgY29udGV4dCB0byBkcmF3IHRleHQgdG8sIHdoaWNoIHdpbGwgZWl0aGVyIGJlCi0gICAg
Ly8gdGhlIG9yaWdpbmFsIGNvbnRleHQgb3IgdGhlIGNvcHksIGRlcGVuZGluZyBvbiBvdXIgbW9k
ZS4KLSAgICBHcmFwaGljc0NvbnRleHQqIG1fZHJhd0NvbnRleHQ7Ci0KLSAgICAvLyBUaGlzIGZs
YWcgaXMgc2V0IHdoZW4gd2UgY2FsbCBzYXZlKCkgb24gdGhlIGRyYXcgY29udGV4dCBkdXJpbmcK
LSAgICAvLyBpbml0aWFsaXphdGlvbi4gSXQgYWxsb3dzIHVzIHRvIGF2b2lkIGRvaW5nIGFuIGV4
dHJhIHNhdmUoKS9yZXN0b3JlKCkKLSAgICAvLyB3aGVuIG9uZSBpcyB1bm5lY2Vzc2FyeS4KLSAg
ICBib29sIG1fc2F2ZWRPbkRyYXdDb250ZXh0OwotCi0gICAgLy8gVXNlZCBvbmx5IHdoZW4gbV9t
b2RlID0gVGV4dENvbXBvc2l0ZSwgdGhpcyBpcyB0aGUgY29sb3IgdGhhdCB0aGUgdGV4dAotICAg
IC8vIHdpbGwgZW5kIHVwIGJlaW5nIG9uY2Ugd2UgZmlndXJlIG91dCB0aGUgdHJhbnNwYXJlbmN5
LgotICAgIENvbG9yIG1fdGV4dENvbXBvc2l0ZUNvbG9yOwotCi0gICAgLy8gTGF5ZXIgd2UncmUg
ZHJhd2luZyB0by4KLSAgICBJbWFnZUJ1ZmZlciogbV9sYXllckJ1ZmZlcjsKLQotICAgIC8vIFdo
ZW4gdGhlIGxheWVyIHR5cGUgaXMgT3BhcXVlQ29tcG9zaXRlTGF5ZXIsIHRoaXMgd2lsbCBjb250
YWluIGEgY29weQotICAgIC8vIG9mIHRoZSBvcmlnaW5hbCBjb250ZW50cyBvZiB0aGUgbV9sYXll
ckJ1ZmZlciBiZWZvcmUgV2luZG93cyBkcmV3IG9uIGl0LgotICAgIC8vIEl0IGFsbG93cyB1cyB0
byByZS1jcmVhdGUgd2hhdCBXaW5kb3dzIGRpZCB0byB0aGUgbGF5ZXIuIEl0IGlzIGFuCi0gICAg
Ly8gU2tCaXRtYXAgaW5zdGVhZCBvZiBhbiBJbWFnZUJ1ZmZlciBiZWNhdXNlIGFuIFNrQml0bWFw
IGlzIGxpZ2h0ZXItd2VpZ2h0Ci0gICAgLy8gKEltYWdlQnVmZmVycyBhcmUgYWxzbyBHREkgc3Vy
ZmFjZXMsIHdoaWNoIHdlIGRvbid0IG5lZWQgaGVyZSkuCi0gICAgU2tCaXRtYXAqIG1fcmVmZXJl
bmNlQml0bWFwOwotCi0gICAgLy8gSWYgdGhlIGdpdmVuIHNpemUgb2YgYml0bWFwIGNhbiBiZSBj
YWNoZWQsIHRoZXkgd2lsbCBiZSBzdG9yZWQgaGVyZS4gQm90aAotICAgIC8vIHRoZSBiaXRtYXAg
YW5kIHRoZSByZWZlcmVuY2UgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYWxsb2NhdGVkIGlmIHRoaXMK
LSAgICAvLyBtZW1iZXIgaXMgbm9uLW51bGwuCi0gICAgc3RhdGljIE93bmVkQnVmZmVycyogbV9j
YWNoZWRCdWZmZXJzOwotCi0gICAgLy8gSWYgYSBidWZmZXIgd2FzIHRvbyBiaWcgdG8gYmUgY2Fj
aGVkLCBpdCB3aWxsIGJlIGNyZWF0ZWQgdGVtcG9yYXJpbHksIGFuZAotICAgIC8vIHRoaXMgbWVt
YmVyIHRyYWNrcyBpdHMgc2NvcGUgdG8gbWFrZSBzdXJlIGl0IGdldHMgZGVsZXRlZC4gQWx3YXlz
IHVzZQotICAgIC8vIG1fbGF5ZXJCdWZmZXIsIHdoaWNoIHdpbGwgZWl0aGVyIHBvaW50IHRvIHRo
aXMgb2JqZWN0LCBvciB0aGUgc3RhdGljYWxseQotICAgIC8vIGNhY2hlZCBvbmUuIERvbid0IGFj
Y2VzcyBkaXJlY3RseS4KLSAgICBPd25QdHI8T3duZWRCdWZmZXJzPiBtX293bmVkQnVmZmVyczsK
LQotICAgIC8vIFNvbWV0aW1lcyB3ZSdyZSBhc2tlZCB0byBjcmVhdGUgbGF5ZXJzIHRoYXQgaGF2
ZSBuZWdhdGl2ZSBkaW1lbnNpb25zLgotICAgIC8vIFRoaXMgQVBJIGlzIG5vdCBkZXNpZ25lZCB0
byBmYWlsIHRvIGluaXRpYWxpemUsIHNvIHdlIGhpZGUgdGhlIGZhY3QgCi0gICAgLy8gdGhhdCB0
aGV5IGFyZSBpbGxlZ2FsIGFuZCBjYW4ndCBiZSByZW5kZXJlZCAoZmFpbGluZyBzaWxlbnRseSwg
ZHJhd2luZwotICAgIC8vIG5vdGhpbmcpLgotICAgIGJvb2wgbV92YWxpZExheWVyOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVHJhbnNhcHJlbmN5V2luX2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhl
bHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmNwcAkocmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJlSGVscGVyLmgiCi0KLSNp
bmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udFV0aWxzQ2hyb21pdW1XaW4uaCIKLSNpbmNs
dWRlICJIV25kREMuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCi0jaW5jbHVk
ZSAiU2tpYUZvbnRXaW4uaCIKLSNpbmNsdWRlICJTa1BvaW50LmgiCi0jaW5jbHVkZSA8d2luZG93
cy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotLy8gVGhlIGZ1bmN0aW9uIHR5cGVzIGZvciBTY3JpcHRJdGVtaXplT3BlblR5cGUoKSBhbmQg
U2NyaXB0U2hhcGVPcGVuVHlwZSgpLgotLy8gV2Ugd2FudCB0byB1c2UgdGhlc2UgZnVuY3Rpb25z
IGZvciBPcGVuVHlwZSBmZWF0dXJlIHN1cHBvcnQsIGJ1dCB3ZSBjYW4ndAotLy8gY2FsbCB0aGVt
IGRpcmVjdGx5IGJlY2F1c2UgdXNwMTAuZGxsIGRvZXMgbm90IGFsd2F5cyBoYXZlIHRoZW0uCi0v
LyBJbnN0ZWFkLCB3ZSB1c2UgR2V0UHJvY0FkZHJlc3MoKSB0byBjaGVjayB3aGV0aGVyIHdlIGNh
biBhY3R1YWxseSB1c2UgdGhlc2UKLS8vIGZ1bmN0aW9uLiBJZiB3ZSBjYW4ndCB1c2UgdGhlc2Ug
ZnVuY3Rpb25zLCB3ZSBzdWJzdGl0dXRlIFNjcmlwdEl0ZW16ZSgpIGFuZAotLy8gU2NyaXB0U2hh
cGUoKS4KLXR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJICpTY3JpcHRJdGVtaXplT3BlblR5cGVGdW5j
KShjb25zdCBXQ0hBUiosIGludCwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNDUklQVF9DT05UUk9MKiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTQ1JJUFRfU1RB
VEUqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNDUklQVF9JVEVNKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPUEVOVFlQRV9UQUcqLCBpbnQqKTsKLXR5cGVkZWYgSFJFU1VMVCAoV0lOQVBJ
ICpTY3JpcHRTaGFwZU9wZW5UeXBlRnVuYykoSERDLCBTQ1JJUFRfQ0FDSEUqLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1JJUFRfQU5BTFlTSVMq
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUEVO
VFlQRV9UQUcsIE9QRU5UWVBFX1RBRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50KiwgVEVYVFJBTkdFX1BST1BFUlRJRVMqKiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBjb25zdCBXQ0hB
UiosIGludCwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXT1JEKiwgU0NSSVBUX0NIQVJQUk9QKiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV09SRCosIFNDUklQVF9HTFlQSFBST1AqLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqKTsKLQot
c3RhdGljIFNjcmlwdEl0ZW1pemVPcGVuVHlwZUZ1bmMgZ1NjcmlwdEl0ZW1pemVPcGVuVHlwZUZ1
bmMgPSAwOwotc3RhdGljIFNjcmlwdFNoYXBlT3BlblR5cGVGdW5jIGdTY3JpcHRTaGFwZU9wZW5U
eXBlRnVuYyA9IDA7Ci1zdGF0aWMgYm9vbCBnT3BlblR5cGVGdW5jdGlvbnNMb2FkZWQgPSBmYWxz
ZTsKLQotc3RhdGljIHZvaWQgbG9hZE9wZW5UeXBlRnVuY3Rpb25zKCkKLXsKLSAgICBITU9EVUxF
IGhNb2R1bGUgPSBHZXRNb2R1bGVIYW5kbGUoTCJ1c3AxMCIpOwotICAgIGlmIChoTW9kdWxlKSB7
Ci0gICAgICAgIGdTY3JpcHRJdGVtaXplT3BlblR5cGVGdW5jID0gcmVpbnRlcnByZXRfY2FzdDxT
Y3JpcHRJdGVtaXplT3BlblR5cGVGdW5jPihHZXRQcm9jQWRkcmVzcyhoTW9kdWxlLCAiU2NyaXB0
SXRlbWl6ZU9wZW5UeXBlIikpOwotICAgICAgICBnU2NyaXB0U2hhcGVPcGVuVHlwZUZ1bmMgPSBy
ZWludGVycHJldF9jYXN0PFNjcmlwdFNoYXBlT3BlblR5cGVGdW5jPihHZXRQcm9jQWRkcmVzcyho
TW9kdWxlLCAiU2NyaXB0U2hhcGVPcGVuVHlwZSIpKTsKLSAgICB9Ci0gICAgaWYgKCFnU2NyaXB0
SXRlbWl6ZU9wZW5UeXBlRnVuYyB8fCAhZ1NjcmlwdFNoYXBlT3BlblR5cGVGdW5jKSB7Ci0gICAg
ICAgIGdTY3JpcHRJdGVtaXplT3BlblR5cGVGdW5jID0gMDsKLSAgICAgICAgZ1NjcmlwdFNoYXBl
T3BlblR5cGVGdW5jID0gMDsKLSAgICB9Ci0gICAgZ09wZW5UeXBlRnVuY3Rpb25zTG9hZGVkID0g
dHJ1ZTsKLX0KLQotLy8gSEZPTlQgaXMgdGhlICdpbmNhcm5hdGlvbicgb2YgJ2V2ZXJ5dGhpbmcn
IGFib3V0IGZvbnQsIGJ1dCBpdCdzIGFuIG9wYXF1ZQotLy8gaGFuZGxlIGFuZCB3ZSBjYW4ndCBk
aXJlY3RseSBxdWVyeSBpdCB0byBtYWtlIGEgbmV3IEhGT05UIHNoYXJpbmcKLS8vIGl0cyBjaGFy
YWN0ZXJpc3RpY3MgKGhlaWdodCwgc3R5bGUsIGV0YykgZXhjZXB0IGZvciBmYW1pbHkgbmFtZS4K
LS8vIFRoaXMgZnVuY3Rpb24gdXNlcyBHZXRPYmplY3QgdG8gY29udmVydCBIRk9OVCBiYWNrIHRv
IExPR0ZPTlQsCi0vLyByZXNldHMgdGhlIGZpZWxkcyBvZiBMT0dGT05UIGFuZCBjYWxjdWxhdGVz
IHN0eWxlIHRvIHVzZSBsYXRlcgotLy8gZm9yIHRoZSBjcmVhdGlvbiBvZiBhIGZvbnQgaWRlbnRp
Y2FsIHRvIEhGT05UIG90aGVyIHRoYW4gZmFtaWx5IG5hbWUuCi1zdGF0aWMgdm9pZCBzZXRMb2dG
b250QW5kU3R5bGUoSEZPTlQgaGZvbnQsIExPR0ZPTlQgKmxvZ2ZvbnQsIGludCAqc3R5bGUpCi17
Ci0gICAgQVNTRVJUKGhmb250ICYmIGxvZ2ZvbnQpOwotICAgIGlmICghaGZvbnQgfHwgIWxvZ2Zv
bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdldE9iamVjdChoZm9udCwgc2l6ZW9mKExPR0ZP
TlQpLCBsb2dmb250KTsKLSAgICAvLyBXZSByZXNldCB0aGVzZSBmaWVsZHMgdG8gdmFsdWVzIGFw
cHJvcHJpYXRlIGZvciBDcmVhdGVGb250SW5kaXJlY3QuCi0gICAgLy8gd2hpbGUga2VlcGluZyBs
ZkhlaWdodCwgd2hpY2ggaXMgdGhlIG1vc3QgaW1wb3J0YW50IHZhbHVlIGluIGNyZWF0aW5nCi0g
ICAgLy8gYSBuZXcgZm9udCBzaW1pbGFyIHRvIGhmb250LgotICAgIGxvZ2ZvbnQtPmxmV2lkdGgg
PSAwOwotICAgIGxvZ2ZvbnQtPmxmRXNjYXBlbWVudCA9IDA7Ci0gICAgbG9nZm9udC0+bGZPcmll
bnRhdGlvbiA9IDA7Ci0gICAgbG9nZm9udC0+bGZDaGFyU2V0ID0gREVGQVVMVF9DSEFSU0VUOwot
ICAgIGxvZ2ZvbnQtPmxmT3V0UHJlY2lzaW9uID0gT1VUX1RUX09OTFlfUFJFQ0lTOwotICAgIGxv
Z2ZvbnQtPmxmUXVhbGl0eSA9IERFRkFVTFRfUVVBTElUWTsgIC8vIEhvbm9yIHVzZXIncyBkZXNr
dG9wIHNldHRpbmdzLgotICAgIGxvZ2ZvbnQtPmxmUGl0Y2hBbmRGYW1pbHkgPSBERUZBVUxUX1BJ
VENIIHwgRkZfRE9OVENBUkU7Ci0gICAgaWYgKHN0eWxlKQotICAgICAgICAqc3R5bGUgPSBnZXRT
dHlsZUZyb21Mb2dmb250KGxvZ2ZvbnQpOwotfQotCi0vLyBUaGlzIG1lbW9yeSBEQyB3aWxsIE5P
VCBiZSByZWxlYXNlZCBidXQgaXQncyBPSwotLy8gc2luY2Ugd2Ugd2FudCB0byBrZWVwIGl0IGZv
ciB0aGUgd2hvbGUgbGlmZSBzcGFuIG9mIHRoZSBwcm9jZXNzLgotSERDIFVuaXNjcmliZUhlbHBl
cjo6bV9jYWNoZWREQyA9IDA7Ci0KLXN0YXRpYyBib29sIGNhblVzZUdseXBoSW5kZXgoY29uc3Qg
U0NSSVBUX0lURU0mIHJ1bikKLXsKLSAgICAvLyBPbiBlYXJseSB2ZXJzaW9uIG9mIFVuaXNjcmli
ZSwgU2NyaXB0U2hhcGUoKSBzZXRzIHJ1bi5hLmZOb0dseXBoSW5kZXgKLSAgICAvLyB0byBUUlVF
IHdoZW4gaXQgY2FuJ3Qgc2hhcGUgdGhlIHJ1biB3aXRoIGdseXBoIGluZGV4ZXMuIFRoaXMgY291
bGQKLSAgICAvLyBvY2N1ciB3aGVuIHdlIHVzZSBDRkYgd2ViZm9udHMoU2VlIGh0dHA6Ly9jcmJ1
Zy5jb20vMzkwMTcpLgotICAgIC8vIFdlIGRvbid0IHVzZSB0aGUgZm9udCBpbiB0aGF0IGNhc2Ug
YW5kIHRyeSB0byB1c2UgZmFsbGJhY2sgZm9udHMuCi0gICAgcmV0dXJuICFydW4uYS5mTm9HbHlw
aEluZGV4OwotfQotCi1VbmlzY3JpYmVIZWxwZXI6OlVuaXNjcmliZUhlbHBlcihjb25zdCBVQ2hh
ciogaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dExlbmd0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1J0bCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSEZPTlQgaGZvbnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNDUklQVF9DQUNIRSogc2NyaXB0Q2FjaGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogZm9udFByb3BlcnRpZXMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdPUkQgc3BhY2VHbHlwaCkKLSAgICA6IG1f
aW5wdXQoaW5wdXQpCi0gICAgLCBtX2lucHV0TGVuZ3RoKGlucHV0TGVuZ3RoKQotICAgICwgbV9p
c1J0bChpc1J0bCkKLSAgICAsIG1faGZvbnQoaGZvbnQpCi0gICAgLCBtX3NjcmlwdENhY2hlKHNj
cmlwdENhY2hlKQotICAgICwgbV9mb250UHJvcGVydGllcyhmb250UHJvcGVydGllcykKLSAgICAs
IG1fc3BhY2VHbHlwaChzcGFjZUdseXBoKQotICAgICwgbV9kaXJlY3Rpb25hbE92ZXJyaWRlKGZh
bHNlKQotICAgICwgbV9pbmhpYml0TGlnYXRlKGZhbHNlKQotICAgICwgbV9sZXR0ZXJTcGFjaW5n
KDApCi0gICAgLCBtX3NwYWNlV2lkdGgoMCkKLSAgICAsIG1fd29yZFNwYWNpbmcoMCkKLSAgICAs
IG1fYXNjZW50KDApCi0gICAgLCBtX2Rpc2FibGVGb250RmFsbGJhY2soZmFsc2UpCi0KLXsKLSAg
ICBtX2xvZ2ZvbnQubGZGYWNlTmFtZVswXSA9IDA7Ci0gICAgaWYgKCFnT3BlblR5cGVGdW5jdGlv
bnNMb2FkZWQpCi0gICAgICAgIGxvYWRPcGVuVHlwZUZ1bmN0aW9ucygpOwotfQotCi1VbmlzY3Jp
YmVIZWxwZXI6On5VbmlzY3JpYmVIZWxwZXIoKQotewotfQotCi12b2lkIFVuaXNjcmliZUhlbHBl
cjo6aW5pdFdpdGhPcHRpb25hbExlbmd0aFByb3RlY3Rpb24oYm9vbCBsZW5ndGhQcm90ZWN0aW9u
KQotewotICAgIC8vIFdlIGNhcCB0aGUgaW5wdXQgbGVuZ3RoIGFuZCBqdXN0IGRvbid0IGRvIGFu
eXRoaW5nLiBXZSdsbCBhbGxvY2F0ZSBhIGxvdAotICAgIC8vIG9mIHRoaW5ncyBvZiB0aGUgc2l6
ZSBvZiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMsIHNvIHRoZSBhbGxvY2F0ZWQKLSAgICAvLyBt
ZW1vcnkgd2lsbCBiZSBzZXZlcmFsIHRpbWVzIHRoZSBpbnB1dCBsZW5ndGguIFBsdXMgc2hhcGlu
ZyBzdWNoIGEgbGFyZ2UKLSAgICAvLyBidWZmZXIgbWF5IGJlIGEgZm9ybSBvZiBkZW5pYWwgb2Yg
c2VydmljZS4gTm8gbGVnaXRpbWF0ZSB0ZXh0IHNob3VsZCBiZQotICAgIC8vIHRoaXMgbG9uZy4g
IEl0IGFsc28gYXBwZWFycyB0aGF0IFVuaXNjcmliZSBmbGF0bHkgcmVqZWN0cyB2ZXJ5IGxvbmcK
LSAgICAvLyBzdHJpbmdzLCBzbyB3ZSBkb24ndCBsb3NlIGFueXRoaW5nIGJ5IGRvaW5nIHRoaXMu
Ci0gICAgLy8KLSAgICAvLyBUaGUgaW5wdXQgbGVuZ3RoIHByb3RlY3Rpb24gbWF5IGJlIGRpc2Fi
bGVkIGJ5IHRoZSB1bml0IHRlc3RzIHRvIGNhdXNlCi0gICAgLy8gYW4gZXJyb3IgY29uZGl0aW9u
LgotICAgIHN0YXRpYyBjb25zdCBpbnQga01heElucHV0TGVuZ3RoID0gNjU1MzU7Ci0gICAgaWYg
KG1faW5wdXRMZW5ndGggPT0gMCB8fCAobGVuZ3RoUHJvdGVjdGlvbiAmJiBtX2lucHV0TGVuZ3Ro
ID4ga01heElucHV0TGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmlsbFJ1bnMoKTsK
LSAgICBmaWxsU2hhcGVzKCk7Ci0gICAgZmlsbFNjcmVlbk9yZGVyKCk7Ci19Ci0KLWludCBVbmlz
Y3JpYmVIZWxwZXI6OndpZHRoKCkgY29uc3QKLXsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIGZv
ciAoaW50IGl0ZW1JbmRleCA9IDA7IGl0ZW1JbmRleCA8IHN0YXRpY19jYXN0PGludD4obV9ydW5z
LnNpemUoKSk7IGl0ZW1JbmRleCsrKQotICAgICAgICB3aWR0aCArPSBhZHZhbmNlRm9ySXRlbShp
dGVtSW5kZXgpOwotICAgIHJldHVybiB3aWR0aDsKLX0KLQotdm9pZCBVbmlzY3JpYmVIZWxwZXI6
Omp1c3RpZnkoaW50IGFkZGl0aW9uYWxTcGFjZSkKLXsKLSAgICAvLyBDb3VudCB0aGUgdG90YWwg
bnVtYmVyIG9mIGdseXBocyB3ZSBoYXZlIHNvIHdlIGtub3cgaG93IGJpZyB0byBtYWtlIHRoZQot
ICAgIC8vIGJ1ZmZlcnMgYmVsb3cuCi0gICAgaW50IHRvdGFsR2x5cGhzID0gMDsKLSAgICBmb3Ig
KHNpemVfdCBydW4gPSAwOyBydW4gPCBtX3J1bnMuc2l6ZSgpOyBydW4rKykgewotICAgICAgICBp
bnQgcnVuSW5kZXggPSBtX3NjcmVlbk9yZGVyW3J1bl07Ci0gICAgICAgIHRvdGFsR2x5cGhzICs9
IHN0YXRpY19jYXN0PGludD4obV9zaGFwZXNbcnVuSW5kZXhdLmdseXBoTGVuZ3RoKCkpOwotICAg
IH0KLSAgICBpZiAodG90YWxHbHlwaHMgPT0gMCkKLSAgICAgICAgcmV0dXJuOyAgLy8gTm90aGlu
ZyB0byBkby4KLQotICAgIC8vIFdlIG1ha2Ugb25lIGJpZyBidWZmZXIgaW4gc2NyZWVuIG9yZGVy
IG9mIGFsbCB0aGUgZ2x5cGhzIHdlIGFyZSBkcmF3aW5nCi0gICAgLy8gYWNyb3NzIHJ1bnMgc28g
dGhhdCB0aGUganVzdGlmaWNhdGlvbiBmdW5jdGlvbiB3aWxsIGFkanVzdCBldmVubHkgYWNyb3Nz
Ci0gICAgLy8gYWxsIGdseXBocy4KLSAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFIsIDY0PiB2aXN1
YWxBdHRyaWJ1dGVzOwotICAgIHZpc3VhbEF0dHJpYnV0ZXMucmVzaXplKHRvdGFsR2x5cGhzKTsK
LSAgICBWZWN0b3I8aW50LCA2ND4gYWR2YW5jZXM7Ci0gICAgYWR2YW5jZXMucmVzaXplKHRvdGFs
R2x5cGhzKTsKLSAgICBWZWN0b3I8aW50LCA2ND4ganVzdGlmeTsKLSAgICBqdXN0aWZ5LnJlc2l6
ZSh0b3RhbEdseXBocyk7Ci0KLSAgICAvLyBCdWlsZCB0aGUgcGFja2VkIGlucHV0LgotICAgIGlu
dCBkZXN0SW5kZXggPSAwOwotICAgIGZvciAoc2l6ZV90IHJ1biA9IDA7IHJ1biA8IG1fcnVucy5z
aXplKCk7IHJ1bisrKSB7Ci0gICAgICAgIGludCBydW5JbmRleCA9IG1fc2NyZWVuT3JkZXJbcnVu
XTsKLSAgICAgICAgY29uc3QgU2hhcGluZyYgc2hhcGluZyA9IG1fc2hhcGVzW3J1bkluZGV4XTsK
LQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNoYXBpbmcuZ2x5cGhMZW5ndGgoKTsgaSsr
LCBkZXN0SW5kZXgrKykgewotICAgICAgICAgICAgbWVtY3B5KCZ2aXN1YWxBdHRyaWJ1dGVzW2Rl
c3RJbmRleF0sICZzaGFwaW5nLm1fdmlzdWFsQXR0cmlidXRlc1tpXSwKLSAgICAgICAgICAgICAg
ICAgICBzaXplb2YoU0NSSVBUX1ZJU0FUVFIpKTsKLSAgICAgICAgICAgIGFkdmFuY2VzW2Rlc3RJ
bmRleF0gPSBzaGFwaW5nLm1fYWR2YW5jZVtpXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IFRoZSBkb2N1bWVudGF0aW9uIGZvciBTY3JpcHRqdXN0aWZ5IGlzIHdyb25nLCB0aGUgcGFyYW1l
dGVyIGlzIHRoZSBzcGFjZQotICAgIC8vIHRvIGFkZCBhbmQgbm90IHRoZSB3aWR0aCBvZiB0aGUg
Y29sdW1uIHlvdSB3YW50LgotICAgIGludCBtaW5LYXNoaWRhOwotI2lmIFVTRShTS0lBX1RFWFQp
Ci0gICAgLy8gRGlzYWJsZSBrYXNoaWRhIGp1c3RpZmljYXRpb24gYmFzZWQgb24gCi0gICAgLy8g
aHR0cDovL2Jsb2dzLm1zZG4uY29tL2IvbWljaGthcC9hcmNoaXZlLzIwMTAvMDgvMzEvMTAwNTYx
NDAuYXNweC4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsR2x5cGhzOyArK2kpIHsKLSAg
ICAgICAgaWYgKHZpc3VhbEF0dHJpYnV0ZXNbaV0udUp1c3RpZmljYXRpb24gPT0gU0NSSVBUX0pV
U1RJRllfQVJBQklDX0tBU0hJREEpCi0gICAgICAgICAgICB2aXN1YWxBdHRyaWJ1dGVzW2ldLnVK
dXN0aWZpY2F0aW9uID0gU0NSSVBUX0pVU1RJRllfTk9ORTsgICAKLSAgICB9Ci0gICAgbWluS2Fz
aGlkYSA9IDA7Ci0jZWxzZQotICAgIG1pbkthc2hpZGEgPSAxOyAvLyBIb3cgZG8gd2UgZGVjaWRl
IHdoYXQgdGhpcyBzaG91bGQgYmU/Ci0jZW5kaWYKLSAgICBTY3JpcHRKdXN0aWZ5KCZ2aXN1YWxB
dHRyaWJ1dGVzWzBdLCAmYWR2YW5jZXNbMF0sIHRvdGFsR2x5cGhzLAotICAgICAgICAgICAgICAg
ICAgYWRkaXRpb25hbFNwYWNlLCBtaW5LYXNoaWRhLCAmanVzdGlmeVswXSk7Ci0KLSAgICAvLyBO
b3cgd2UgaGF2ZSB0byB1bnBhY2sgdGhlIGp1c3RpZmljYXRpb24gYW1vdW50cyBiYWNrIGludG8g
dGhlIHJ1bnMgc28KLSAgICAvLyB0aGUgZ2x5cGggaW5kaWNlcyBtYXRjaC4KLSAgICBpbnQgZ2xv
YmFsR2x5cGhJbmRleCA9IDA7Ci0gICAgZm9yIChzaXplX3QgcnVuID0gMDsgcnVuIDwgbV9ydW5z
LnNpemUoKTsgcnVuKyspIHsKLSAgICAgICAgaW50IHJ1bkluZGV4ID0gbV9zY3JlZW5PcmRlclty
dW5dOwotICAgICAgICBTaGFwaW5nJiBzaGFwaW5nID0gbV9zaGFwZXNbcnVuSW5kZXhdOwotCi0g
ICAgICAgIHNoYXBpbmcubV9qdXN0aWZ5LnJlc2l6ZShzaGFwaW5nLmdseXBoTGVuZ3RoKCkpOwot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNoYXBpbmcuZ2x5cGhMZW5ndGgoKTsgaSsrLCBn
bG9iYWxHbHlwaEluZGV4KyspCi0gICAgICAgICAgICBzaGFwaW5nLm1fanVzdGlmeVtpXSA9IGp1
c3RpZnlbZ2xvYmFsR2x5cGhJbmRleF07Ci0gICAgfQotfQotCi1pbnQgVW5pc2NyaWJlSGVscGVy
OjpjaGFyYWN0ZXJUb1goaW50IG9mZnNldCkgY29uc3QKLXsKLSAgICBIUkVTVUxUIGhyOwotICAg
IEFTU0VSVChvZmZzZXQgPD0gbV9pbnB1dExlbmd0aCk7Ci0KLSAgICAvLyBPdXIgYWxnb3JpdGht
IGlzIHRvIHRyYXZlcnNlIHRoZSBpdGVtcyBpbiBzY3JlZW4gb3JkZXIgZnJvbSBsZWZ0IHRvCi0g
ICAgLy8gcmlnaHQsIGFkZGluZyBpbiBlYWNoIGl0ZW0ncyBzY3JlZW4gd2lkdGggdW50aWwgd2Ug
ZmluZCB0aGUgaXRlbSB3aXRoCi0gICAgLy8gdGhlIHJlcXVlc3RlZCBjaGFyYWN0ZXIgaW4gaXQu
Ci0gICAgaW50IHdpZHRoID0gMDsKLSAgICBmb3IgKHNpemVfdCBzY3JlZW5JbmRleCA9IDA7IHNj
cmVlbkluZGV4IDwgbV9ydW5zLnNpemUoKTsgc2NyZWVuSW5kZXgrKykgewotICAgICAgICAvLyBD
b21wdXRlIHRoZSBsZW5ndGggb2YgdGhpcyBydW4uCi0gICAgICAgIGludCBpdGVtSW5kZXggPSBt
X3NjcmVlbk9yZGVyW3NjcmVlbkluZGV4XTsKLSAgICAgICAgY29uc3QgU0NSSVBUX0lURU0mIGl0
ZW0gPSBtX3J1bnNbaXRlbUluZGV4XTsKLSAgICAgICAgY29uc3QgU2hhcGluZyYgc2hhcGluZyA9
IG1fc2hhcGVzW2l0ZW1JbmRleF07Ci0gICAgICAgIGludCBpdGVtTGVuZ3RoID0gc2hhcGluZy5j
aGFyTGVuZ3RoKCk7Ci0KLSAgICAgICAgaWYgKG9mZnNldCA+PSBpdGVtLmlDaGFyUG9zICYmIG9m
ZnNldCA8PSBpdGVtLmlDaGFyUG9zICsgaXRlbUxlbmd0aCkgewotICAgICAgICAgICAgLy8gQ2hh
cmFjdGVyIG9mZnNldCBpcyBpbiB0aGlzIHJ1bi4KLSAgICAgICAgICAgIGludCBjaGFyTGVuZ3Ro
ID0gb2Zmc2V0IC0gaXRlbS5pQ2hhclBvczsKLQotICAgICAgICAgICAgaW50IGN1clggPSAwOwot
ICAgICAgICAgICAgaHIgPSBTY3JpcHRDUHRvWChjaGFyTGVuZ3RoLCBGQUxTRSwgaXRlbUxlbmd0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGluZy5nbHlwaExlbmd0aCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX2xvZ3NbMF0sICZzaGFwaW5n
Lm1fdmlzdWFsQXR0cmlidXRlc1swXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hh
cGluZy5lZmZlY3RpdmVBZHZhbmNlcygpLCAmaXRlbS5hLCAmY3VyWCk7Ci0gICAgICAgICAgICBp
ZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAgICAg
d2lkdGggKz0gY3VyWCArIHNoYXBpbmcubV9wcmVQYWRkaW5nOwotICAgICAgICAgICAgQVNTRVJU
KHdpZHRoID49IDApOwotICAgICAgICAgICAgcmV0dXJuIHdpZHRoOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBpdGVtLgotICAgICAgICB3aWR0aCArPSBhZHZhbmNl
Rm9ySXRlbShpdGVtSW5kZXgpOwotICAgIH0KLSAgICBBU1NFUlQod2lkdGggPj0gMCk7Ci0gICAg
cmV0dXJuIHdpZHRoOwotfQotCi1pbnQgVW5pc2NyaWJlSGVscGVyOjp4VG9DaGFyYWN0ZXIoaW50
IHgpIGNvbnN0Ci17Ci0gICAgLy8gV2UgaXRlcmF0ZSBpbiBzY3JlZW4gb3JkZXIgdW50aWwgd2Ug
ZmluZCB0aGUgaXRlbSB3aXRoIHRoZSBnaXZlbiBwaXhlbAotICAgIC8vIHBvc2l0aW9uIGluIGl0
LiBXaGVuIHdlIGZpbmQgdGhhdCBndXksIHdlIGFzayBVbmlzY3JpYmUgZm9yIHRoZQotICAgIC8v
IGNoYXJhY3RlciBpbmRleC4KLSAgICBIUkVTVUxUIGhyOwotICAgIGZvciAoc2l6ZV90IHNjcmVl
bkluZGV4ID0gMDsgc2NyZWVuSW5kZXggPCBtX3J1bnMuc2l6ZSgpOyBzY3JlZW5JbmRleCsrKSB7
Ci0gICAgICAgIGludCBpdGVtSW5kZXggPSBtX3NjcmVlbk9yZGVyW3NjcmVlbkluZGV4XTsKLSAg
ICAgICAgaW50IGl0ZW1BZHZhbmNlID0gYWR2YW5jZUZvckl0ZW0oaXRlbUluZGV4KTsKLQotICAg
ICAgICAvLyBOb3RlIHRoYXQgdGhlIHJ1biBtYXkgYmUgZW1wdHkgaWYgc2hhcGluZyBmYWlsZWQs
IHNvIHdlIHdhbnQgdG8gc2tpcAotICAgICAgICAvLyBvdmVyIGl0LgotICAgICAgICBjb25zdCBT
aGFwaW5nJiBzaGFwaW5nID0gbV9zaGFwZXNbaXRlbUluZGV4XTsKLSAgICAgICAgaW50IGl0ZW1M
ZW5ndGggPSBzaGFwaW5nLmNoYXJMZW5ndGgoKTsKLSAgICAgICAgaWYgKHggPD0gaXRlbUFkdmFu
Y2UgJiYgaXRlbUxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgIC8vIFRoZSByZXF1ZXN0ZWQgb2Zm
c2V0IGlzIHdpdGhpbiB0aGlzIGl0ZW0uCi0gICAgICAgICAgICBjb25zdCBTQ1JJUFRfSVRFTSYg
aXRlbSA9IG1fcnVuc1tpdGVtSW5kZXhdOwotCi0gICAgICAgICAgICAvLyBBY2NvdW50IGZvciB0
aGUgbGVhZGluZyBzcGFjZSB3ZSd2ZSBhZGRlZCB0byB0aGlzIHJ1biB0aGF0Ci0gICAgICAgICAg
ICAvLyBVbmlzY3JpYmUgZG9lc24ndCBrbm93IGFib3V0LgotICAgICAgICAgICAgeCAtPSBzaGFw
aW5nLm1fcHJlUGFkZGluZzsKLQotICAgICAgICAgICAgaW50IGNoYXJYID0gMDsKLSAgICAgICAg
ICAgIGludCB0cmFpbGluZzsKLSAgICAgICAgICAgIGhyID0gU2NyaXB0WHRvQ1AoeCwgaXRlbUxl
bmd0aCwgc2hhcGluZy5nbHlwaExlbmd0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmc2hhcGluZy5tX2xvZ3NbMF0sICZzaGFwaW5nLm1fdmlzdWFsQXR0cmlidXRlc1swXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGluZy5lZmZlY3RpdmVBZHZhbmNlcygpLCAm
aXRlbS5hLCAmY2hhclgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFpbGluZyk7
Ci0KLSAgICAgICAgICAgIC8vIFRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGlzIHdpdGhpbiB0aGUgaXRl
bS4gV2UgbmVlZCB0byBhZGQgdGhlCi0gICAgICAgICAgICAvLyBpdGVtJ3Mgb2Zmc2V0IHRvIHRy
YW5zZm9ybSBpdCBpbnRvIHRoZSBzcGFjZSBvZiB0aGUgVGV4dFJ1bgotICAgICAgICAgICAgcmV0
dXJuIGNoYXJYICsgaXRlbS5pQ2hhclBvczsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZSBv
ZmZzZXQgaXMgYmV5b25kIHRoaXMgaXRlbSwgYWNjb3VudCBmb3IgaXRzIGxlbmd0aCBhbmQgbW92
ZSBvbi4KLSAgICAgICAgeCAtPSBpdGVtQWR2YW5jZTsKLSAgICB9Ci0KLSAgICAvLyBFcnJvciBj
b25kaXRpb24sIHdlIGRvbid0IGtub3cgd2hhdCB0byBkbyBpZiB3ZSBkb24ndCBoYXZlIHRoYXQg
WAotICAgIC8vIHBvc2l0aW9uIGluIGFueSBvZiBvdXIgaXRlbXMuCi0gICAgcmV0dXJuIDA7Ci19
Ci0KLXZvaWQgVW5pc2NyaWJlSGVscGVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgSERDIGRjLCBpbnQgeCwgaW50IHks
IGludCBmcm9tLCBpbnQgdG8pCi17Ci0gICAgSEdESU9CSiBvbGRGb250ID0gMDsKLSAgICBpbnQg
Y3VyWCA9IHg7Ci0gICAgYm9vbCBmaXJzdFJ1biA9IHRydWU7Ci0jaWYgIVVTRShTS0lBX1RFWFQp
Ci0gICAgYm9vbCB1c2VXaW5kb3dzRHJhd2luZyA9IHdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2lu
ZyhncmFwaGljc0NvbnRleHQpOwotI2VuZGlmCi0KLSAgICBmb3IgKHNpemVfdCBzY3JlZW5JbmRl
eCA9IDA7IHNjcmVlbkluZGV4IDwgbV9ydW5zLnNpemUoKTsgc2NyZWVuSW5kZXgrKykgewotICAg
ICAgICBpbnQgaXRlbUluZGV4ID0gbV9zY3JlZW5PcmRlcltzY3JlZW5JbmRleF07Ci0gICAgICAg
IGNvbnN0IFNDUklQVF9JVEVNJiBpdGVtID0gbV9ydW5zW2l0ZW1JbmRleF07Ci0gICAgICAgIGNv
bnN0IFNoYXBpbmcmIHNoYXBpbmcgPSBtX3NoYXBlc1tpdGVtSW5kZXhdOwotCi0gICAgICAgIC8v
IENoYXJhY3RlciBvZmZzZXRzIHdpdGhpbiB0aGlzIHJ1bi4gVEhFU0UgTUFZIE5PVCBCRSBJTiBS
QU5HRSBhbmQgbWF5Ci0gICAgICAgIC8vIGJlIG5lZ2F0aXZlLCBldGMuIFRoZSBjb2RlIGJlbG93
IGhhbmRsZXMgdGhpcy4KLSAgICAgICAgaW50IGZyb21DaGFyID0gZnJvbSAtIGl0ZW0uaUNoYXJQ
b3M7Ci0gICAgICAgIGludCB0b0NoYXIgPSB0byAtIGl0ZW0uaUNoYXJQb3M7Ci0KLSAgICAgICAg
Ly8gU2VlIGlmIHdlIG5lZWQgdG8gZHJhdyBhbnkgY2hhcmFjdGVycyBpbiB0aGlzIGl0ZW0uCi0g
ICAgICAgIGlmIChzaGFwaW5nLmNoYXJMZW5ndGgoKSA9PSAwIHx8Ci0gICAgICAgICAgICBmcm9t
Q2hhciA+PSBzaGFwaW5nLmNoYXJMZW5ndGgoKSB8fCB0b0NoYXIgPD0gMCkgewotICAgICAgICAg
ICAgLy8gTm8gY2hhcnMgaW4gdGhpcyBpdGVtIHRvIGRpc3BsYXkuCi0gICAgICAgICAgICBjdXJY
ICs9IGFkdmFuY2VGb3JJdGVtKGl0ZW1JbmRleCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIENvbXB1dGUgdGhlIHN0YXJ0aW5nIGdseXBoIHdpdGhpbiB0
aGlzIHNwYW4uIHxmcm9tfCBhbmQgfHRvfCBhcmUKLSAgICAgICAgLy8gZ2xvYmFsIG9mZnNldHMg
dGhhdCBtYXkgaW50ZXJzZWN0IGFyYml0cmFyaWx5IHdpdGggb3VyIGxvY2FsIHJ1bi4KLSAgICAg
ICAgaW50IGZyb21HbHlwaCwgYWZ0ZXJHbHlwaDsKLSAgICAgICAgaWYgKGl0ZW0uYS5mUlRMKSB7
Ci0gICAgICAgICAgICAvLyBUbyBjb21wdXRlIHRoZSBmaXJzdCBnbHlwaCB3aGVuIGdvaW5nIFJU
TCwgd2UgdXNlIHx0b3wuCi0gICAgICAgICAgICBpZiAodG9DaGFyID49IHNoYXBpbmcuY2hhckxl
bmd0aCgpKQotICAgICAgICAgICAgICAgIC8vIFRoZSBlbmQgb2YgdGhlIHRleHQgaXMgYWZ0ZXIg
KHRvIHRoZSBsZWZ0KSBvZiB1cy4KLSAgICAgICAgICAgICAgICBmcm9tR2x5cGggPSAwOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gU2luY2UgfHRvfCBpcyBleGNsdXNp
dmUsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgd2UgZHJhdyBvbiB0aGUKLSAgICAgICAgICAgICAgICAv
LyBsZWZ0IGlzIGFjdHVhbGx5IHRoZSBvbmUgcmlnaHQgYmVmb3JlICh0byB0aGUgcmlnaHQpIG9m
Ci0gICAgICAgICAgICAgICAgLy8gfHRvfC4KLSAgICAgICAgICAgICAgICBmcm9tR2x5cGggPSBz
aGFwaW5nLm1fbG9nc1t0b0NoYXIgLSAxXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gVGhlIGxhc3QgZ2x5cGggaXMgYWN0dWFsbHkgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUg
cmFuZ2UuCi0gICAgICAgICAgICBpZiAoZnJvbUNoYXIgPD0gMCkgewotICAgICAgICAgICAgICAg
IC8vIFRoZSBmaXJzdCBjaGFyYWN0ZXIgdG8gZHJhdyBpcyBiZWZvcmUgKHRvIHRoZSByaWdodCkg
b2YgdGhpcwotICAgICAgICAgICAgICAgIC8vIHNwYW4sIHNvIGRyYXcgYWxsIHRoZSB3YXkgdG8g
dGhlIGVuZC4KLSAgICAgICAgICAgICAgICBhZnRlckdseXBoID0gc2hhcGluZy5nbHlwaExlbmd0
aCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBXZSB3YW50IHRv
IGRyYXcgZXZlcnl0aGluZyB1cCB1bnRpbCB0aGUgY2hhcmFjdGVyIHRvIHRoZQotICAgICAgICAg
ICAgICAgIC8vIHJpZ2h0IG9mIHxmcm9tfC4gVG8gdGhlIHJpZ2h0IGlzIC0gMSwgc28gd2UgbG9v
ayB0aGF0IHVwCi0gICAgICAgICAgICAgICAgLy8gKHJlbWVtYmVyIG91ciBjaGFyYWN0ZXIgY291
bGQgYmUgbW9yZSB0aGFuIG9uZSBnbHlwaCwgc28gd2UKLSAgICAgICAgICAgICAgICAvLyBjYW4n
dCBsb29rIHVwIG91ciBnbHlwaCBhbmQgYWRkIG9uZSkuCi0gICAgICAgICAgICAgICAgYWZ0ZXJH
bHlwaCA9IHNoYXBpbmcubV9sb2dzW2Zyb21DaGFyIC0gMV07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBFYXN5IGNhc2UsIGV2ZXJ5Ym9keSBhZ3JlZXMg
YWJvdXQgZGlyZWN0aW9ucy4gV2Ugb25seSBuZWVkIHRvCi0gICAgICAgICAgICAvLyBoYW5kbGUg
Ym91bmRhcnkgY29uZGl0aW9ucyB0byBnZXQgYSByYW5nZSBpbmNsdXNpdmUgYXQgdGhlCi0gICAg
ICAgICAgICAvLyBiZWdpbm5pbmcsIGFuZCBleGNsdXNpdmUgYXQgdGhlIGVuZGluZy4gV2UgaGF2
ZSB0byBkbyBzb21lCi0gICAgICAgICAgICAvLyBjb21wdXRhdGlvbiB0byBzZWUgdGhlIGdseXBo
IG9uZSBwYXN0IHRoZSBlbmQuCi0gICAgICAgICAgICBmcm9tR2x5cGggPSBzaGFwaW5nLm1fbG9n
c1tmcm9tQ2hhciA8IDAgPyAwIDogZnJvbUNoYXJdOwotICAgICAgICAgICAgaWYgKHRvQ2hhciA+
PSBzaGFwaW5nLmNoYXJMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBhZnRlckdseXBoID0gc2hh
cGluZy5nbHlwaExlbmd0aCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFm
dGVyR2x5cGggPSBzaGFwaW5nLm1fbG9nc1t0b0NoYXJdOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gQWNjb3VudCBmb3IgdGhlIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIHNraXBwZWQgaW4gdGhpcyBy
dW4uIFdoZW4KLSAgICAgICAgLy8gV2ViS2l0IGFza3MgdXMgdG8gZHJhdyBhIHN1YnNldCBvZiB0
aGUgcnVuLCBpdCBhY3R1YWxseSB0ZWxscyB1cwotICAgICAgICAvLyB0byBkcmF3IGF0IHRoZSBY
IG9mZnNldCBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBydW4sIHNpbmNlIGl0Ci0gICAgICAgIC8v
IGRvZXNuJ3Qga25vdyB0aGUgaW50ZXJuYWwgcG9zaXRpb24gb2YgYW55IG9mIG91ciBjaGFyYWN0
ZXJzLgotICAgICAgICBjb25zdCBpbnQqIGVmZmVjdGl2ZUFkdmFuY2VzID0gc2hhcGluZy5lZmZl
Y3RpdmVBZHZhbmNlcygpOwotICAgICAgICBpbnQgaW5uZXJPZmZzZXQgPSAwOwotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGZyb21HbHlwaDsgaSsrKQotICAgICAgICAgICAgaW5uZXJPZmZz
ZXQgKz0gZWZmZWN0aXZlQWR2YW5jZXNbaV07Ci0KLSAgICAgICAgLy8gQWN0dWFsbHkgZHJhdyB0
aGUgZ2x5cGhzIHdlIGZvdW5kLgotICAgICAgICBpbnQgZ2x5cGhDb3VudCA9IGFmdGVyR2x5cGgg
LSBmcm9tR2x5cGg7Ci0gICAgICAgIGlmIChmcm9tR2x5cGggPj0gMCAmJiBnbHlwaENvdW50ID4g
MCkgewotICAgICAgICAgICAgLy8gQWNjb3VudCBmb3IgdGhlIHByZWNlZGluZyBzcGFjZSB3ZSBu
ZWVkIHRvIGFkZCB0byB0aGlzIHJ1bi4gV2UKLSAgICAgICAgICAgIC8vIGRvbid0IG5lZWQgdG8g
Y291bnQgZm9yIHRoZSBmb2xsb3dpbmcgc3BhY2UgYmVjYXVzZSB0aGF0IHdpbGwgYmUKLSAgICAg
ICAgICAgIC8vIGNvdW50ZWQgaW4gYWR2YW5jZUZvckl0ZW0gYmVsb3cgd2hlbiB3ZSBtb3ZlIHRv
IHRoZSBuZXh0IHJ1bi4KLSAgICAgICAgICAgIGlubmVyT2Zmc2V0ICs9IHNoYXBpbmcubV9wcmVQ
YWRkaW5nOwotCi0gICAgICAgICAgICAvLyBQYXNzIDAgaW4gd2hlbiB0aGVyZSBpcyBubyBqdXN0
aWZpY2F0aW9uLgotICAgICAgICAgICAgY29uc3QgaW50KiBqdXN0aWZ5ID0gc2hhcGluZy5tX2p1
c3RpZnkuc2l6ZSgpID09IDAgPyAwIDogJnNoYXBpbmcubV9qdXN0aWZ5W2Zyb21HbHlwaF07Ci0K
LSNpZiBVU0UoU0tJQV9URVhUKQotICAgICAgICAgICAgY29uc3QgaW50KiBhZHZhbmNlcyA9IHNo
YXBpbmcubV9qdXN0aWZ5LnNpemUoKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZzaGFwaW5nLm1fanVzdGlmeVtmcm9tR2x5cGhdCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6ICZzaGFwaW5nLm1fYWR2YW5jZVtmcm9tR2x5cGhdOwotI2Vsc2UK
LSAgICAgICAgICAgIGlmICh1c2VXaW5kb3dzRHJhd2luZykgewotICAgICAgICAgICAgICAgIGlm
IChmaXJzdFJ1bikgewotICAgICAgICAgICAgICAgICAgICBvbGRGb250ID0gU2VsZWN0T2JqZWN0
KGRjLCBzaGFwaW5nLm1faGZvbnQpOwotICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1biA9IGZh
bHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBTZWxlY3RP
YmplY3QoZGMsIHNoYXBpbmcubV9oZm9udCk7Ci0gICAgICAgICAgICB9Ci0KLSNlbmRpZgotICAg
ICAgICAgICAgLy8gRm9udHMgd2l0aCBkaWZmZXJlbnQgYXNjZW50cyBjYW4gYmUgdXNlZCB0byBy
ZW5kZXIgZGlmZmVyZW50Ci0gICAgICAgICAgICAvLyBydW5zLiAgJ0Fjcm9zcy1ydW5zJyB5LWNv
b3JkaW5hdGUgY29ycmVjdGlvbiBuZWVkcyB0byBiZQotICAgICAgICAgICAgLy8gYWRqdXN0ZWQg
Zm9yIGVhY2ggZm9udC4KLSAgICAgICAgICAgIGJvb2wgdGV4dE91dE9rID0gZmFsc2U7Ci0gICAg
ICAgICAgICBmb3IgKGludCBleGVjdXRpb25zID0gMDsgZXhlY3V0aW9ucyA8IDI7ICsrZXhlY3V0
aW9ucykgewotI2lmIFVTRShTS0lBX1RFWFQpCi0gICAgICAgICAgICAgICAgU2tQb2ludCBvcmln
aW47Ci0gICAgICAgICAgICAgICAgb3JpZ2luLmZYID0gY3VyWCArICsgaW5uZXJPZmZzZXQ7Ci0g
ICAgICAgICAgICAgICAgb3JpZ2luLmZZID0geSArIG1fYXNjZW50OwotICAgICAgICAgICAgICAg
IHBhaW50U2tpYVRleHQoZ3JhcGhpY3NDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2hhcGluZy5tX2hmb250LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5
cGhDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaGFwaW5nLm1fZ2x5cGhz
W2Zyb21HbHlwaF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaGFwaW5nLm1fb2Zmc2V0c1tmcm9tR2x5cGhd
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9yaWdpbik7Ci0gICAgICAgICAgICAg
ICAgdGV4dE91dE9rID0gdHJ1ZTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKHVzZVdpbmRv
d3NEcmF3aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBTY3JpcHRUZXh0
T3V0KGRjLCBzaGFwaW5nLm1fc2NyaXB0Q2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGN1clggKyBpbm5lck9mZnNldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAtIHNoYXBpbmcubV9hc2NlbnRPZmZz
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAs
ICZpdGVtLmEsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZzaGFwaW5nLm1fZ2x5cGhzW2Zyb21HbHlwaF0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoQ291bnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaGFwaW5nLm1fYWR2YW5jZVtmcm9tR2x5
cGhdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0
aWZ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hh
cGluZy5tX29mZnNldHNbZnJvbUdseXBoXSk7Ci0gICAgICAgICAgICAgICAgICAgIHRleHRPdXRP
ayA9IChociA9PSBTX09LKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBTa1BvaW50IG9yaWdpbjsKLSAgICAgICAgICAgICAgICAgICAgb3JpZ2luLmZYID0g
Y3VyWCArICsgaW5uZXJPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG9yaWdpbi5mWSA9IHkg
KyBtX2FzY2VudDsKLSAgICAgICAgICAgICAgICAgICAgcGFpbnRTa2lhVGV4dChncmFwaGljc0Nv
bnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGluZy5tX2hmb250
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoQ291bnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYXBpbmcubV9nbHlwaHNbZnJvbUdseXBoXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX2FkdmFuY2VbZnJv
bUdseXBoXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX29m
ZnNldHNbZnJvbUdseXBoXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3Jp
Z2luKTsKLSAgICAgICAgICAgICAgICAgICAgdGV4dE91dE9rID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dE91dE9rICYmIDAgPT0g
ZXhlY3V0aW9ucykgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBUZXh0T3V0IGlzIGNhbGxl
ZCBmcm9tIHRoZSByZW5kZXJlciBpdCBtaWdodCBmYWlsCi0gICAgICAgICAgICAgICAgICAgIC8v
IGJlY2F1c2UgdGhlIHNhbmRib3ggaXMgcHJldmVudGluZyBpdCBmcm9tIG9wZW5pbmcgdGhlCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGZvbnQgZmlsZXMuICBJZiB3ZSBhcmUgcnVubmluZyBpbiB0
aGUgcmVuZGVyZXIsCi0gICAgICAgICAgICAgICAgICAgIC8vIFRyeVRvUHJlbG9hZEZvbnQgaXMg
b3ZlcnJpZGRlbiB0byBhc2sgdGhlIGJyb3dzZXIgdG8KLSAgICAgICAgICAgICAgICAgICAgLy8g
cHJlbG9hZCB0aGUgZm9udCBmb3IgdXMgc28gd2UgY2FuIGFjY2VzcyBpdC4KLSAgICAgICAgICAg
ICAgICAgICAgdHJ5VG9QcmVsb2FkRm9udChzaGFwaW5nLm1faGZvbnQpOwotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjdXJYICs9IGFkdmFuY2VG
b3JJdGVtKGl0ZW1JbmRleCk7Ci0gICAgfQotCi0gICAgaWYgKG9sZEZvbnQpCi0gICAgICAgIFNl
bGVjdE9iamVjdChkYywgb2xkRm9udCk7Ci19Ci0KLVdPUkQgVW5pc2NyaWJlSGVscGVyOjpmaXJz
dEdseXBoRm9yQ2hhcmFjdGVyKGludCBjaGFyT2Zmc2V0KSBjb25zdAotewotICAgIC8vIEZpbmQg
dGhlIHJ1biBmb3IgdGhlIGdpdmVuIGNoYXJhY3Rlci4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IHN0YXRpY19jYXN0PGludD4obV9ydW5zLnNpemUoKSk7IGkrKykgewotICAgICAgICBpbnQgZmly
c3RDaGFyID0gbV9ydW5zW2ldLmlDaGFyUG9zOwotICAgICAgICBjb25zdCBTaGFwaW5nJiBzaGFw
aW5nID0gbV9zaGFwZXNbaV07Ci0gICAgICAgIGludCBsb2NhbE9mZnNldCA9IGNoYXJPZmZzZXQg
LSBmaXJzdENoYXI7Ci0gICAgICAgIGlmIChsb2NhbE9mZnNldCA+PSAwICYmIGxvY2FsT2Zmc2V0
IDwgc2hhcGluZy5jaGFyTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBjaGFyYWN0ZXIg
aXMgaW4gdGhpcyBydW4sIHJldHVybiB0aGUgZmlyc3QgZ2x5cGggZm9yIGl0Ci0gICAgICAgICAg
ICAvLyAoc2hvdWxkIGdlbmVyYWxseSBiZSB0aGUgb25seSBnbHlwaCkuIEl0IHNlZW1zIFVuaXNj
cmliZSBnaXZlcwotICAgICAgICAgICAgLy8gZ2x5cGggMCBmb3IgZW1wdHksIHdoaWNoIGlzIHdo
YXQgd2Ugd2FudCB0byByZXR1cm4gaW4gdGhlCi0gICAgICAgICAgICAvLyAibWlzc2luZyIgY2Fz
ZS4KLSAgICAgICAgICAgIHNpemVfdCBnbHlwaEluZGV4ID0gc2hhcGluZy5tX2xvZ3NbbG9jYWxP
ZmZzZXRdOwotICAgICAgICAgICAgaWYgKGdseXBoSW5kZXggPj0gc2hhcGluZy5tX2dseXBocy5z
aXplKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgZ2x5cGggc2hvdWxkIGJlIGluIHRoaXMg
cnVuLCBidXQgdGhlIHJ1biBoYXMgdG9vIGZldwotICAgICAgICAgICAgICAgIC8vIGFjdHVhbCBj
aGFyYWN0ZXJzLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBzaGFwaW5nIHRoZSBydW4KLSAgICAgICAg
ICAgICAgICAvLyBmYWlscywgaW4gd2hpY2ggY2FzZSwgd2Ugc2hvdWxkIGhhdmUgbm8gZGF0YSBp
biB0aGUgbG9ncyBhdAotICAgICAgICAgICAgICAgIC8vIGFsbC4KLSAgICAgICAgICAgICAgICBB
U1NFUlQoc2hhcGluZy5tX2dseXBocy5zaXplKCkgPT0gMCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2hhcGluZy5tX2dseXBo
c1tnbHlwaEluZGV4XTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi12
b2lkIFVuaXNjcmliZUhlbHBlcjo6ZmlsbFJ1bnMoKQotewotICAgIEhSRVNVTFQgaHI7Ci0gICAg
bV9ydW5zLnJlc2l6ZShjVW5pc2NyaWJlSGVscGVyU3RhY2tSdW5zKTsKLSAgICBtX3NjcmlwdFRh
Z3MucmVzaXplKGNVbmlzY3JpYmVIZWxwZXJTdGFja1J1bnMpOwotCi0gICAgU0NSSVBUX1NUQVRF
IGlucHV0U3RhdGU7Ci0gICAgaW5wdXRTdGF0ZS51QmlkaUxldmVsID0gbV9pc1J0bDsKLSAgICBp
bnB1dFN0YXRlLmZPdmVycmlkZURpcmVjdGlvbiA9IG1fZGlyZWN0aW9uYWxPdmVycmlkZTsKLSAg
ICBpbnB1dFN0YXRlLmZJbmhpYml0U3ltU3dhcCA9IGZhbHNlOwotICAgIGlucHV0U3RhdGUuZkNo
YXJTaGFwZSA9IGZhbHNlOyAgLy8gTm90IGltcGxlbWVudGVkIGluIFVuaXNjcmliZQotICAgIGlu
cHV0U3RhdGUuZkRpZ2l0U3Vic3RpdHV0ZSA9IGZhbHNlOyAgLy8gRG8gd2Ugd2FudCB0aGlzIGZv
ciBBcmFiaWM/Ci0gICAgaW5wdXRTdGF0ZS5mSW5oaWJpdExpZ2F0ZSA9IG1faW5oaWJpdExpZ2F0
ZTsKLSAgICBpbnB1dFN0YXRlLmZEaXNwbGF5WldHID0gZmFsc2U7ICAvLyBEb24ndCBkcmF3IGNv
bnRyb2wgY2hhcmFjdGVycy4KLSAgICBpbnB1dFN0YXRlLmZBcmFiaWNOdW1Db250ZXh0ID0gbV9p
c1J0bDsgIC8vIERvIHdlIHdhbnQgdGhpcyBmb3IgQXJhYmljPwotICAgIGlucHV0U3RhdGUuZkdj
cENsdXN0ZXJzID0gZmFsc2U7Ci0gICAgaW5wdXRTdGF0ZS5mUmVzZXJ2ZWQgPSAwOwotICAgIGlu
cHV0U3RhdGUuZkVuZ2luZVJlc2VydmVkID0gMDsKLSAgICAvLyBUaGUgcHNDb250cm9sIGFyZ3Vt
ZW50IHRvIFNjcmlwdEl0ZW1pemUgc2hvdWxkIGJlIG5vbi0wIGZvciBSVEwgdGV4dCwKLSAgICAv
LyBwZXIgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNzc2NTMyLmFz
cHggLiBTbyB1c2UgYQotICAgIC8vIFNDUklQVF9DT05UUk9MIHRoYXQgaXMgc2V0IHRvIGFsbCB6
ZXJvcy4gIFplcm8gYXMgYSBsb2NhbGUgSUQgbWVhbnMgdGhlCi0gICAgLy8gbmV1dHJhbCBsb2Nh
bGUgcGVyIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczc3NjI5NC5h
c3B4Ci0gICAgc3RhdGljIFNDUklQVF9DT05UUk9MIGlucHV0Q29udHJvbCA9IHswLCAvLyB1RGVm
YXVsdExhbmd1YWdlICAgIDoxNjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAvLyBmQ29udGV4dERpZ2l0cyAgICAgIDoxOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC8vIGZJbnZlcnRQcmVCb3VuZERpciAgOjE7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLy8gZkludmVydFBv
c3RCb3VuZERpciA6MTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAvLyBmTGlua1N0cmluZ0JlZm9yZSAgIDoxOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIC8vIGZMaW5rU3RyaW5nQWZ0ZXIgICAgOjE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLy8gZk5ldXRyYWxPdmVycmlk
ZSAgICA6MTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAv
LyBmTnVtZXJpY092ZXJyaWRlICAgIDoxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIC8vIGZMZWdhY3lCaWRpQ2xhc3MgICAgOjE7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLy8gZk1lcmdlTmV1dHJhbEl0ZW1zICA6
MTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwfTsvLyBmUmVz
ZXJ2ZWQgICAgICAgICAgIDo3OwotICAgIC8vIENhbGxpbmcgU2NyaXB0QXBwbHlEaWdpdFN1YnN0
aXR1dGlvbiggMCwgJmlucHV0Q29udHJvbCwgJmlucHV0U3RhdGUpCi0gICAgLy8gaGVyZSB3b3Vs
ZCBiZSBhcHByb3ByaWF0ZSBpZiB3ZSB3YW50ZWQgdG8gc2V0IHRoZSBsYW5ndWFnZSBJRCwgYW5k
IGdldAotICAgIC8vIGxvY2FsIGRpZ2l0IHN1YnN0aXR1dGlvbiBiZWhhdmlvci4gIEZvciBub3cs
IGRvbid0IGRvIGl0LgotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgaW50IG51bWJlck9m
SXRlbXMgPSAwOwotCi0gICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxkIGhhdmUgYSB3YXkgdG8g
a25vdyB0aGUgcnVucyBiZWZvcmUgYW5kIGFmdGVyIHRoaXMKLSAgICAgICAgLy8gb25lLCBhbmQg
cHV0IHRoZW0gaW50byB0aGUgY29udHJvbCBwYXJhbWV0ZXIgb2YgU2NyaXB0SXRlbWl6ZS4gVGhp
cwotICAgICAgICAvLyB3b3VsZCBhbGxvdyB1cyB0byBzaGFwZSBjaGFyYWN0ZXJzIHByb3Blcmx5
IHRoYXQgY3Jvc3Mgc3R5bGUKLSAgICAgICAgLy8gYm91bmRhcmllcyAoV2ViS2l0IGJ1ZyA2MTQ4
KS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gV2UgdGVsbCBTY3JpcHRJdGVtaXplIHRoYXQgdGhl
IG91dHB1dCBsaXN0IG9mIGl0ZW1zIGlzIG9uZSBzbWFsbGVyCi0gICAgICAgIC8vIHRoYW4gaXQg
YWN0dWFsbHkgaXMuIEFjY29yZGluZyB0byBNb3ppbGxhIGJ1ZyAzNjY2NDMsIGlmIHRoZXJlIGlz
Ci0gICAgICAgIC8vIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgYXJyYXkgb24gcHJlLVNQMiBzeXN0
ZW1zLCBTY3JpcHRJdGVtaXplIHdpbGwKLSAgICAgICAgLy8gd3JpdGUgb25lIHBhc3QgdGhlIGVu
ZCBvZiB0aGUgYnVmZmVyLgotICAgICAgICAvLwotICAgICAgICAvLyBTY3JpcHRJdGVtaXplIGlz
IHZlcnkgc3RyYW5nZS4gSXQgd2lsbCBvZnRlbiByZXF1aXJlIGEgbXVjaCBsYXJnZXIKLSAgICAg
ICAgLy8gSVRFTSBidWZmZXIgaW50ZXJuYWxseSB0aGFuIGl0IHdpbGwgZ2l2ZSB1cyBhcyBvdXRw
dXQuIEZvciBleGFtcGxlLAotICAgICAgICAvLyBpdCB3aWxsIHNheSBhIDE2LWl0ZW0gYnVmZmVy
IGlzIG5vdCBiaWcgZW5vdWdoLCBhbmQgd2lsbCB3cml0ZQotICAgICAgICAvLyBpbnRlcmVzdGlu
ZyBudW1iZXJzIGludG8gYWxsIHRob3NlIGl0ZW1zLiBCdXQgd2hlbiB3ZSBnaXZlIGl0IGEgMzIK
LSAgICAgICAgLy8gaXRlbSBidWZmZXIgYW5kIGl0IHN1Y2NlZWRzLCBpdCBvbmx5IGhhcyBvbmUg
aXRlbSBvdXRwdXQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEl0IHNlZW1zIHRvIGJlIGRvaW5n
IGF0IGxlYXN0IHR3byBwYXNzZXMsIHRoZSBmaXJzdCB3aGVyZSBpdCBwdXRzIGEKLSAgICAgICAg
Ly8gbG90IG9mIGludGVybWVkaWF0ZSBkYXRhIGludG8gb3VyIGl0ZW1zLCBhbmQgdGhlIHNlY29u
ZCB3aGVyZSBpdAotICAgICAgICAvLyBjb2xsYXRlcyB0aGVtLgotICAgICAgICBpZiAoZ1Njcmlw
dEl0ZW1pemVPcGVuVHlwZUZ1bmMpIHsKLSAgICAgICAgICAgIGhyID0gZ1NjcmlwdEl0ZW1pemVP
cGVuVHlwZUZ1bmMobV9pbnB1dCwgbV9pbnB1dExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtX3J1bnMuc2l6ZSgpKSAt
IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnB1dENv
bnRyb2wsICZpbnB1dFN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmbV9ydW5zWzBdLCAmbV9zY3JpcHRUYWdzWzBdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmbnVtYmVyT2ZJdGVtcyk7Ci0KLSAgICAgICAgICAg
IGlmIChTVUNDRUVERUQoaHIpKSB7IAotICAgICAgICAgICAgICAgIC8vIFBhY2sgY29uc2VjdXRp
dmUgcnVucywgdGhlIHNjcmlwdCB0YWcgb2Ygd2hpY2ggYXJlIAotICAgICAgICAgICAgICAgIC8v
IFNDUklQVF9UQUdfVU5LTk9XTiwgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgcnVucy4gCi0gICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1zOyArK2kpIHsgCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChtX3NjcmlwdFRhZ3NbaV0gPT0gU0NSSVBUX1RBR19VTktO
T1dOKSB7IAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGogPSAxOyAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChpICsgaiA8IG51bWJlck9mSXRlbXMgJiYgbV9zY3JpcHRUYWdz
W2kgKyBqXSA9PSBTQ1JJUFRfVEFHX1VOS05PV04pIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICsrajsgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoLS1qKSB7IAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fcnVucy5yZW1vdmUoaSArIDEsIGopOyAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3NjcmlwdFRhZ3MucmVtb3ZlKGkgKyAxLCBqKTsgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJdGVtcyAtPSBqOyAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0gCi0gICAgICAgICAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAgICAgfSAK
LSAgICAgICAgICAgICAgICBtX3NjcmlwdFRhZ3MucmVzaXplKG51bWJlck9mSXRlbXMpOyAKLSAg
ICAgICAgICAgIH0gCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBociA9IFNjcmlwdEl0
ZW1pemUobV9pbnB1dCwgbV9pbnB1dExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQ+KG1fcnVucy5zaXplKCkpIC0gMSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmaW5wdXRDb250cm9sLCAmaW5wdXRTdGF0ZSwgJm1fcnVuc1swXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbnVtYmVyT2ZJdGVtcyk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChocikpIHsKLSAgICAgICAgICAgIG1fcnVucy5yZXNp
emUobnVtYmVyT2ZJdGVtcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoaHIgIT0gRV9PVVRPRk1FTU9SWSkgewotICAgICAgICAgICAgLy8gU29tZSBraW5kIG9m
IHVuZXhwZWN0ZWQgZXJyb3IuCi0gICAgICAgICAgICBtX3J1bnMucmVzaXplKDApOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVGhlcmUgd2FzIG5vdCBlbm91Z2gg
aXRlbXMgZm9yIGl0IHRvIHdyaXRlIGludG8sIGV4cGFuZC4KLSAgICAgICAgbV9ydW5zLnJlc2l6
ZShtX3J1bnMuc2l6ZSgpICogMik7Ci0gICAgICAgIG1fc2NyaXB0VGFncy5yZXNpemUobV9ydW5z
LnNpemUoKSk7Ci0gICAgfQotfQotCi1ib29sIFVuaXNjcmliZUhlbHBlcjo6c2hhcGUoY29uc3Qg
VUNoYXIqIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpdGVtTGVuZ3Ro
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1HbHlwaHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU0NSSVBUX0lURU0mIHJ1biwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPUEVOVFlQRV9UQUcgc2NyaXB0VGFnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNoYXBpbmcmIHNoYXBpbmcpCi17Ci0gICAgSEZPTlQgaGZvbnQgPSBtX2hmb250OwotICAg
IFNDUklQVF9DQUNIRSogc2NyaXB0Q2FjaGUgPSBtX3NjcmlwdENhY2hlOwotICAgIFNDUklQVF9G
T05UUFJPUEVSVElFUyogZm9udFByb3BlcnRpZXMgPSBtX2ZvbnRQcm9wZXJ0aWVzOwotICAgIFZl
Y3RvcjxTQ1JJUFRfQ0hBUlBST1AsIGNVbmlzY3JpYmVIZWxwZXJTdGFja0NoYXJzPiBjaGFyUHJv
cHM7Ci0gICAgVmVjdG9yPFNDUklQVF9HTFlQSFBST1AsIGNVbmlzY3JpYmVIZWxwZXJTdGFja0No
YXJzPiBnbHlwaFByb3BzOwotICAgIGludCBhc2NlbnQgPSBtX2FzY2VudDsKLSAgICBXT1JEIHNw
YWNlR2x5cGggPSBtX3NwYWNlR2x5cGg7Ci0gICAgSFJFU1VMVCBocjsKLSAgICAvLyBXaGVuIHVz
ZWQgdG8gZmlsbCB1cCBnbHlwaCBwYWdlcyBmb3Igc2ltcGxlIHNjcmlwdHMgaW4gbm9uLUJNUCwK
LSAgICAvLyB3ZSBkb24ndCB3YW50IGFueSBmb250IGZhbGxiYWNrIGluIHRoaXMgY2xhc3MuIFRo
ZSBzaW1wbGUgc2NyaXB0Ci0gICAgLy8gZm9udCBwYXRoIGNhbiB0YWtlIGNhcmUgb2YgZm9udCBm
YWxsYmFjay4KLSAgICBib29sIGxhc3RGYWxsYmFja1RyaWVkID0gbV9kaXNhYmxlRm9udEZhbGxi
YWNrOwotICAgIGJvb2wgcmVzdWx0OwotCi0gICAgaW50IGdlbmVyYXRlZEdseXBocyA9IDA7Ci0K
LSAgICAvLyBJbiBjYXNlIEhGT05UIHBhc3NlZCBpbiBjdG9yIGNhbm5vdCByZW5kZXIgdGhpcyBy
dW4sIHdlIGhhdmUgdG8gc2NhbgotICAgIC8vIG90aGVyIGZvbnRzIGZyb20gdGhlIGJlZ2lubmlu
ZyBvZiB0aGUgZm9udCBsaXN0LgotICAgIHJlc2V0Rm9udEluZGV4KCk7Ci0KLSAgICAvLyBDb21w
dXRlIHNoYXBlcy4KLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBzaGFwaW5nLm1fbG9ncy5y
ZXNpemUoaXRlbUxlbmd0aCk7Ci0gICAgICAgIHNoYXBpbmcubV9nbHlwaHMucmVzaXplKG51bUds
eXBocyk7Ci0gICAgICAgIHNoYXBpbmcubV92aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShudW1HbHlw
aHMpOwotICAgICAgICBjaGFyUHJvcHMucmVzaXplKGl0ZW1MZW5ndGgpOwotICAgICAgICBnbHlw
aFByb3BzLnJlc2l6ZShudW1HbHlwaHMpOwotICAgICAgICBydW4uYS5mTm9HbHlwaEluZGV4ID0g
RkFMU0U7Ci0KLSNpZmRlZiBQVVJJRlkKLSAgICAgICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNv
bS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTMwOQotICAgICAgICAvLyBQdXJpZnkgaXNu
J3QgYWJsZSB0byB0cmFjayB0aGUgYXNzaWdubWVudHMgdGhhdCBTY3JpcHRTaGFwZSBtYWtlcyB0
bwotICAgICAgICAvLyBzaGFwaW5nLm1fZ2x5cGhzLiBDb25zZXF1ZW50bHksIGFueSBieXRlcyB3
aXRoIHZhbHVlIDB4Q0QgdGhhdCBpdAotICAgICAgICAvLyB3cml0ZXMsIHdpbGwgYmUgY29uc2lk
ZXJlZCB1bi1pbml0aWFsaXplZCBkYXRhLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGlzIGhh
Y2sgYXZvaWQgdGhlIGZhbHNlLXBvc2l0aXZlIFVNUnMgYnkgbWFya2luZyB0aGUgYnVmZmVyIGFz
Ci0gICAgICAgIC8vIGluaXRpYWxpemVkLgotICAgICAgICAvLwotICAgICAgICAvLyBGSVhNRTog
QSBiZXR0ZXIgc29sdXRpb24gd291bGQgYmUgdG8gdXNlIFB1cmlmeSdzIEFQSSBhbmQgbWFyayBv
bmx5Ci0gICAgICAgIC8vIHRoZSBwb3B1bGF0ZWQgcmFuZ2UgYXMgaW5pdGlhbGl6ZWQ6Ci0gICAg
ICAgIC8vCi0gICAgICAgIC8vICAgICBQdXJpZnlNYXJrQXNJbml0aWFsaXplZCgKLSAgICAgICAg
Ly8gICAgICAgICAmc2hhcGluZy5tX2dseXBoc1swXSwKLSAgICAgICAgLy8gICAgICAgICBzaXpl
b2Yoc2hhcGluZy5tX2dseXBoc1swXSAqIGdlbmVyYXRlZEdseXBocyk7Ci0KLSAgICAgICAgWmVy
b01lbW9yeSgmc2hhcGluZy5tX2dseXBoc1swXSwKLSAgICAgICAgICAgICAgICAgICBzaXplb2Yo
c2hhcGluZy5tX2dseXBoc1swXSkgKiBzaGFwaW5nLm1fZ2x5cGhzLnNpemUoKSk7Ci0jZW5kaWYK
LSAgICAgICAgLy8gSWYgb3VyIERDIGlzIGFscmVhZHkgY3JlYXRlZCwgc2VsZWN0IHRoZSBmb250
IGluIGl0IHNvIHdlIGNhbiB1c2UgaXQgbm93LgotICAgICAgICAvLyBPdGhlcndpc2UsIHdlJ2xs
IGNyZWF0ZSBpdCBhcyBuZWVkZWQgYWZ0ZXJ3YXJkLi4uCi0gICAgICAgIGlmIChtX2NhY2hlZERD
KQotICAgICAgICAgICAgU2VsZWN0T2JqZWN0KG1fY2FjaGVkREMsIGhmb250KTsKLQotICAgICAg
ICAvLyBGaXJlZm94IHNldHMgU0NSSVBUX0FOQUxZU0lTLlNDUklQVF9TVEFURS5mRGlzcGxheVpX
RyB0byB0cnVlCi0gICAgICAgIC8vIGhlcmUuIElzIHRoYXQgd2hhdCB3ZSB3YW50PyBJdCB3aWxs
IGRpc3BsYXkgY29udHJvbCBjaGFyYWN0ZXJzLgotICAgICAgICBpZiAoZ1NjcmlwdFNoYXBlT3Bl
blR5cGVGdW5jKSB7Ci0gICAgICAgICAgICBURVhUUkFOR0VfUFJPUEVSVElFUyogcmFuZ2VQcm9w
cyA9IG1fZmVhdHVyZVJlY29yZHMuc2l6ZSgpID8gJm1fcmFuZ2VQcm9wZXJ0aWVzIDogMDsKLSAg
ICAgICAgICAgIGhyID0gZ1NjcmlwdFNoYXBlT3BlblR5cGVGdW5jKG1fY2FjaGVkREMsIHNjcmlw
dENhY2hlLCAmcnVuLmEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzY3JpcHRUYWcsIDAsICZpdGVtTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJnJhbmdlUHJvcHMsIHJhbmdlUHJvcHMgPyAxIDogMCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBpdGVtTGVuZ3RoLCBudW1H
bHlwaHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGlu
Zy5tX2xvZ3NbMF0sICZjaGFyUHJvcHNbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmc2hhcGluZy5tX2dseXBoc1swXSwgJmdseXBoUHJvcHNbMF0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2VuZXJhdGVkR2x5cGhzKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGhyID0gU2NyaXB0U2hhcGUobV9jYWNoZWRE
Qywgc2NyaXB0Q2FjaGUsIGlucHV0LCBpdGVtTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBudW1HbHlwaHMsICZydW4uYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JnNoYXBpbmcubV9nbHlwaHNbMF0sICZzaGFwaW5nLm1fbG9nc1swXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJnNoYXBpbmcubV92aXN1YWxBdHRyaWJ1dGVzWzBdLCAmZ2VuZXJhdGVk
R2x5cGhzKTsKLSAgICAgICAgfQotICAgICAgICAvLyBXZSByZWNlaXZlIEVfUEVORElORyB3aGVu
IHdlIG5lZWQgdG8gdHJ5IGFnYWluIHdpdGggYSBEcmF3aW5nIENvbnRleHQsCi0gICAgICAgIC8v
IGJ1dCB3ZSBkb24ndCB3YW50IHRvIHJldHJ5IGFnYWluIGlmIHdlIGFscmVhZHkgdHJpZWQgd2l0
aCBub24temVybyBEQy4KLSAgICAgICAgaWYgKGhyID09IEVfUEVORElORyAmJiAhbV9jYWNoZWRE
QykgewotICAgICAgICAgICAgRW5zdXJlQ2FjaGVkRENDcmVhdGVkKCk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaHIgPT0gRV9PVVRPRk1FTU9SWSkgewot
ICAgICAgICAgICAgbnVtR2x5cGhzICo9IDI7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSAmJiAobGFzdEZhbGxiYWNrVHJpZWQgfHwg
IWNvbnRhaW5zTWlzc2luZ0dseXBocyhzaGFwaW5nLCBydW4sIGZvbnRQcm9wZXJ0aWVzKSAmJiBj
YW5Vc2VHbHlwaEluZGV4KHJ1bikpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8g
VGhlIGN1cnJlbnQgZm9udCBjYW4ndCByZW5kZXIgdGhpcyBydW4sIHRyeSBuZXh0IGZvbnQuCi0g
ICAgICAgIGlmICghbV9kaXNhYmxlRm9udEZhbGxiYWNrICYmCi0gICAgICAgICAgICBuZXh0V2lu
Rm9udERhdGEoJmhmb250LCAmc2NyaXB0Q2FjaGUsICZmb250UHJvcGVydGllcywgJmFzY2VudCkp
IHsKLSAgICAgICAgICAgIC8vIFRoZSBwcmltYXJ5IGZvbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGlz
IHJ1bi4gVHJ5IG5leHQgZm9udC4KLSAgICAgICAgICAgIC8vIEluIGNhc2Ugb2Ygd2ViIHBhZ2Ug
cmVuZGVyaW5nLCB0aGV5IGNvbWUgZnJvbSBmb250cyBzcGVjaWZpZWQgaW4KLSAgICAgICAgICAg
IC8vIENTUyBzdHlsZXNoZWV0cy4KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9IGVs
c2UgaWYgKCFsYXN0RmFsbGJhY2tUcmllZCkgewotICAgICAgICAgICAgbGFzdEZhbGxiYWNrVHJp
ZWQgPSB0cnVlOwotCi0gICAgICAgICAgICAvLyBHZW5lcmF0ZSBhIGxhc3QgZmFsbGJhY2sgZm9u
dCBiYXNlZCBvbiB0aGUgc2NyaXB0IG9mCi0gICAgICAgICAgICAvLyBhIGNoYXJhY3RlciB0byBk
cmF3IHdoaWxlIGluaGVyaXRpbmcgc2l6ZSBhbmQgc3R5bGVzCi0gICAgICAgICAgICAvLyBmcm9t
IHRoZSBwcmltYXJ5IGZvbnQKLSAgICAgICAgICAgIGlmICghbV9sb2dmb250LmxmRmFjZU5hbWVb
MF0pCi0gICAgICAgICAgICAgICAgc2V0TG9nRm9udEFuZFN0eWxlKG1faGZvbnQsICZtX2xvZ2Zv
bnQsICZtX3N0eWxlKTsKLQotICAgICAgICAgICAgLy8gVE9ETyhqdW5nc2hpayk6IGdlbmVyaWMg
dHlwZSBzaG91bGQgY29tZSBmcm9tIHdlYmtpdCBmb3IKLSAgICAgICAgICAgIC8vIFVuaXNjcmli
ZUhlbHBlclRleHRSdW4gKGEgZGVyaXZlZCBjbGFzcyB1c2VkIGluIHdlYmtpdCkuCi0gICAgICAg
ICAgICBjb25zdCBVQ2hhciAqZmFtaWx5ID0gZ2V0RmFsbGJhY2tGYW1pbHkoaW5wdXQsIGl0ZW1M
ZW5ndGgsCi0gICAgICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseSwg
MCwgMCk7Ci0gICAgICAgICAgICBib29sIGZvbnRPayA9IGdldERlcml2ZWRGb250RGF0YShmYW1p
bHksIG1fc3R5bGUsICZtX2xvZ2ZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmYXNjZW50LCAmaGZvbnQsICZzY3JpcHRDYWNoZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcGFjZUdseXBoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgICAgICAgICAgaWYg
KCFmb250T2spIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIEdldERlcml2ZWRGb250RGF0
YSBpcyBjYWxsZWQgZnJvbSB0aGUgcmVuZGVyZXIgaXQKLSAgICAgICAgICAgICAgICAvLyBtaWdo
dCBmYWlsIGJlY2F1c2UgdGhlIHNhbmRib3ggaXMgcHJldmVudGluZyBpdCBmcm9tIG9wZW5pbmcK
LSAgICAgICAgICAgICAgICAvLyB0aGUgZm9udCBmaWxlcy4gIElmIHdlIGFyZSBydW5uaW5nIGlu
IHRoZSByZW5kZXJlciwKLSAgICAgICAgICAgICAgICAvLyBUcnlUb1ByZWxvYWRGb250IGlzIG92
ZXJyaWRkZW4gdG8gYXNrIHRoZSBicm93c2VyIHRvIHByZWxvYWQKLSAgICAgICAgICAgICAgICAv
LyB0aGUgZm9udCBmb3IgdXMgc28gd2UgY2FuIGFjY2VzcyBpdC4KLSAgICAgICAgICAgICAgICB0
cnlUb1ByZWxvYWRGb250KGhmb250KTsKLQotICAgICAgICAgICAgICAgIC8vIFRyeSBhZ2Fpbi4K
LSAgICAgICAgICAgICAgICBmb250T2sgPSBnZXREZXJpdmVkRm9udERhdGEoZmFtaWx5LCBtX3N0
eWxlLCAmbV9sb2dmb250LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmYXNjZW50LCAmaGZvbnQsICZzY3JpcHRDYWNoZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJnNwYWNlR2x5cGgpOwotICAgICAgICAgICAgICAgIEFT
U0VSVChmb250T2spOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUT0RPKGp1bmdz
aGlrKSA6IEN1cnJlbnRseSBHZXREZXJpdmVkSEZvbnQgYWx3YXlzIHJldHVybnMgYQotICAgICAg
ICAgICAgLy8gYSB2YWxpZCBIRk9OVCwgYnV0IGluIHRoZSBmdXR1cmUsIEkgbWF5IGNoYW5nZSBp
dCB0byByZXR1cm4gMC4KLSAgICAgICAgICAgIEFTU0VSVChoZm9udCk7Ci0KLSAgICAgICAgICAg
IC8vIFdlIGRvbid0IG5lZWQgYSBmb250X3Byb3BlcnRpZXMgZm9yIHRoZSBsYXN0IHJlc29ydCBm
YWxsYmFjayBmb250Ci0gICAgICAgICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYW55dGhp
bmcgbW9yZSB0byB0cnkgYW5kIGFyZSBmb3JjZWQgdG8KLSAgICAgICAgICAgIC8vIGFjY2VwdCBl
bXB0eSBnbHlwaCBib3hlcy4gSWYgd2UgdHJpZWQgYSBzZXJpZXMgb2YgZm9udHMgYXMKLSAgICAg
ICAgICAgIC8vICdsYXN0LXJlc29ydCBmYWxsYmFjaycsIHdlJ2QgbmVlZCBpdCwgYnV0IGN1cnJl
bnRseSwgd2UgZG9uJ3QuCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNlIGlm
IChociA9PSBVU1BfRV9TQ1JJUFRfTk9UX0lOX0ZPTlQpIHsKLSAgICAgICAgICAgIHJ1bi5hLmVT
Y3JpcHQgPSBTQ1JJUFRfVU5ERUZJTkVEOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0gZWxzZSBpZiAoRkFJTEVEKGhyKSkgewotICAgICAgICAgICAgLy8gRXJyb3Igc2hhcGluZy4K
LSAgICAgICAgICAgIGdlbmVyYXRlZEdseXBocyA9IDA7Ci0gICAgICAgICAgICByZXN1bHQgPSBm
YWxzZTsKLSAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIFNldHMgV2luZG93cyBmb250IGRhdGEgZm9yIHRoaXMgcnVuIHRvIHRob3NlIGNvcnJlc3Bv
bmRpbmcgdG8KLSAgICAvLyBhIGZvbnQgc3VwcG9ydGluZyB0aGlzIHJ1bi4gd2UgZG9uJ3QgbmVl
ZCB0byBzdG9yZSBmb250X3Byb3BlcnRpZXMKLSAgICAvLyBiZWNhdXNlIGl0J3Mgbm90IHVzZWQg
ZWxzZXdoZXJlLgotICAgIHNoYXBpbmcubV9oZm9udCA9IGhmb250OwotICAgIHNoYXBpbmcubV9z
Y3JpcHRDYWNoZSA9IHNjcmlwdENhY2hlOwotICAgIHNoYXBpbmcubV9zcGFjZUdseXBoID0gc3Bh
Y2VHbHlwaDsKLQotICAgIC8vIFRoZSBhc2NlbnQgb2YgYSBmb250IGZvciB0aGlzIHJ1biBjYW4g
YmUgZGlmZmVyZW50IGZyb20KLSAgICAvLyB0aGF0IG9mIHRoZSBwcmltYXJ5IGZvbnQgc28gdGhh
dCB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YKLSAgICAvLyB0aGUgZGlmZmVyZW5jZSBwZXIgcnVu
IGFuZCB0YWtlIHRoYXQgaW50byBhY2NvdW50IHdoZW4gY2FsbGluZwotICAgIC8vIFNjcmlwdFRl
eHRPdXQgaW4gfGRyYXd8LiBPdGhlcndpc2UsIGRpZmZlcmVudCBydW5zIHJlbmRlcmVkIGJ5Ci0g
ICAgLy8gZGlmZmVyZW50IGZvbnRzIHdvdWxkIG5vdCBiZSBhbGlnbmVkIHZlcnRpY2FsbHkuCi0g
ICAgc2hhcGluZy5tX2FzY2VudE9mZnNldCA9IG1fYXNjZW50ID8gYXNjZW50IC0gbV9hc2NlbnQg
OiAwOwotICAgIHJlc3VsdCA9IHRydWU7Ci0KLSAgY2xlYW51cDoKLSAgICBzaGFwaW5nLm1fZ2x5
cGhzLnJlc2l6ZShnZW5lcmF0ZWRHbHlwaHMpOwotICAgIHNoYXBpbmcubV92aXN1YWxBdHRyaWJ1
dGVzLnJlc2l6ZShnZW5lcmF0ZWRHbHlwaHMpOwotICAgIC8vIElmIHdlIHVzZSBTY3JpcHRTaGFw
ZU9wZW5UeXBlKCksIHZpc3VhbCBhdHRyaWJ1dGVzIGluZm9ybWF0aW9uIGZvciBlYWNoCi0gICAg
Ly8gY2hhcmFjdGVycyBhcmUgc3RvcmVkIGluIHxnbHlwaFByb3BzW2ldLnN2YXwuCi0gICAgaWYg
KGdTY3JpcHRTaGFwZU9wZW5UeXBlRnVuYykgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGdlbmVyYXRlZEdseXBoczsgKytpKQotICAgICAgICAgICAgbWVtY3B5KCZzaGFwaW5nLm1fdmlz
dWFsQXR0cmlidXRlc1tpXSwgJmdseXBoUHJvcHNbaV0uc3ZhLCBzaXplb2YoU0NSSVBUX1ZJU0FU
VFIpKTsKLSAgICB9Ci0gICAgc2hhcGluZy5tX2FkdmFuY2UucmVzaXplKGdlbmVyYXRlZEdseXBo
cyk7Ci0gICAgc2hhcGluZy5tX29mZnNldHMucmVzaXplKGdlbmVyYXRlZEdseXBocyk7Ci0KLSAg
ICAvLyBPbiBmYWlsdXJlLCBvdXIgbG9ncyBkb24ndCBtZWFuIGFueXRoaW5nLCBzbyB6ZXJvIHRo
b3NlIG91dC4KLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgc2hhcGluZy5tX2xvZ3MuY2xlYXIo
KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgVW5pc2NyaWJlSGVscGVyOjpFbnN1
cmVDYWNoZWREQ0NyZWF0ZWQoKQotewotICAgIGlmIChtX2NhY2hlZERDKQotICAgICAgICByZXR1
cm47Ci0gICAgLy8gQWxsb2NhdGUgYSBtZW1vcnkgREMgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGgg
dGhlIERlc2t0b3AgREMgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgd2luZG93LAotICAgIC8vIGFu
ZCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgRGVza3RvcCBEQyBkaXJlY3RseSBzaW5jZSBpdCBj
YW4gaGF2ZSBuYXN0eSBzaWRlIGVmZmVjdHMKLSAgICAvLyBhcyBpZGVudGlmaWVkIGluIENocm9t
ZSBJc3N1ZSBodHRwOi8vY3JidWcuY29tLzU5MzE1LgotICAgIEhXbmREQyBzY3JlZW5EQygwKTsK
LSAgICBtX2NhY2hlZERDID0gOjpDcmVhdGVDb21wYXRpYmxlREMoc2NyZWVuREMpOwotICAgIEFT
U0VSVChtX2NhY2hlZERDKTsKLX0KLQotdm9pZCBVbmlzY3JpYmVIZWxwZXI6OmZpbGxTaGFwZXMo
KQotewotICAgIG1fc2hhcGVzLnJlc2l6ZShtX3J1bnMuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fcnVucy5zaXplKCk7IGkrKykgewotICAgICAgICBpbnQgc3RhcnRJdGVt
ID0gbV9ydW5zW2ldLmlDaGFyUG9zOwotICAgICAgICBpbnQgaXRlbUxlbmd0aCA9IG1faW5wdXRM
ZW5ndGggLSBzdGFydEl0ZW07Ci0gICAgICAgIGlmIChpIDwgbV9ydW5zLnNpemUoKSAtIDEpCi0g
ICAgICAgICAgICBpdGVtTGVuZ3RoID0gbV9ydW5zW2kgKyAxXS5pQ2hhclBvcyAtIHN0YXJ0SXRl
bTsKLQotICAgICAgICBpbnQgbnVtR2x5cGhzOwotICAgICAgICBpZiAoaXRlbUxlbmd0aCA8IGNV
bmlzY3JpYmVIZWxwZXJTdGFja0NoYXJzKSB7Ci0gICAgICAgICAgICAvLyBXZSdsbCBzdGFydCBv
dXIgYnVmZmVyIHNpemVzIHdpdGggdGhlIGN1cnJlbnQgc3RhY2sgc3BhY2UKLSAgICAgICAgICAg
IC8vIGF2YWlsYWJsZSBpbiBvdXIgYnVmZmVycyBpZiB0aGUgY3VycmVudCBpbnB1dCBmaXRzLiBB
cyBsb25nIGFzCi0gICAgICAgICAgICAvLyBpdCBkb2Vzbid0IGV4cGFuZCBwYXN0IHRoYXQgd2Un
bGwgc2F2ZSBhIGxvdCBvZiB0aW1lIG1hbGxvY2luZy4KLSAgICAgICAgICAgIG51bUdseXBocyA9
IGNVbmlzY3JpYmVIZWxwZXJTdGFja0NoYXJzOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gV2hlbiB0aGUgaW5wdXQgZG9lc24ndCBmaXQsIGdpdmUgdXAgd2l0aCB0aGUgc3RhY2sg
c2luY2UgaXQgd2lsbAotICAgICAgICAgICAgLy8gYWxtb3N0IHN1cmVseSBub3QgYmUgZW5vdWdo
IHJvb20gKHVubGVzcyB0aGUgaW5wdXQgYWN0dWFsbHkKLSAgICAgICAgICAgIC8vIHNocmlua3Ms
IHdoaWNoIGlzIHVubGlrZWx5KSBhbmQganVzdCBzdGFydCB3aXRoIHRoZSBsZW5ndGgKLSAgICAg
ICAgICAgIC8vIHJlY29tbWVuZGVkIGJ5IHRoZSBVbmlzY3JpYmUgZG9jdW1lbnRhdGlvbiBhcyBh
ICJ1c3VhbGx5IGZpdHMiCi0gICAgICAgICAgICAvLyBzaXplLgotICAgICAgICAgICAgbnVtR2x5
cGhzID0gaXRlbUxlbmd0aCAqIDMgLyAyICsgMTY7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBD
b252ZXJ0IGEgc3RyaW5nIHRvIGEgZ2x5cGggc3RyaW5nIHRyeWluZyB0aGUgcHJpbWFyeSBmb250
LCBmb250cyBpbgotICAgICAgICAvLyB0aGUgZmFsbGJhY2sgbGlzdCBhbmQgdGhlbiBzY3JpcHQt
c3BlY2lmaWMgbGFzdCByZXNvcnQgZm9udC4KLSAgICAgICAgU2hhcGluZyYgc2hhcGluZyA9IG1f
c2hhcGVzW2ldOwotICAgICAgICBpZiAoIXNoYXBlKCZtX2lucHV0W3N0YXJ0SXRlbV0sIGl0ZW1M
ZW5ndGgsIG51bUdseXBocywgbV9ydW5zW2ldLCBtX3NjcmlwdFRhZ3NbaV0sIHNoYXBpbmcpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gQXQgdGhlIG1vbWVudCwgdGhlIG9u
bHkgdGltZSBtX2Rpc2FibGVGb250RmFsbGJhY2sgaXMgc2V0IGlzCi0gICAgICAgIC8vIHdoZW4g
d2UgbG9vayB1cCBnbHlwaCBpbmRpY2VzIGZvciBub24tQk1QIGNvZGUgcmFuZ2VzLiBTbywKLSAg
ICAgICAgLy8gd2UgY2FuIHNraXAgdGhlIGdseXBoIHBsYWNlbWVudC4gV2hlbiB0aGF0IGJlY29t
ZXMgbm90IHRoZSBjYXNlCi0gICAgICAgIC8vIGFueSBtb3JlLCB3ZSBoYXZlIHRvIGFkZCBhIG5l
dyBmbGFnIHRvIGNvbnRyb2wgZ2x5cGggcGxhY2VtZW50LgotICAgICAgICBpZiAobV9kaXNhYmxl
Rm9udEZhbGxiYWNrKQotICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIENvbXB1dGUg
cGxhY2VtZW50cy4gTm90ZSB0aGF0IG9mZnNldHMgaXMgZG9jdW1lbnRlZCBpbmNvcnJlY3RseQot
ICAgICAgICAvLyBhbmQgaXMgYWN0dWFsbHkgYW4gYXJyYXkuCi0gICAgICAgIEVuc3VyZUNhY2hl
ZERDQ3JlYXRlZCgpOwotICAgICAgICBTZWxlY3RPYmplY3QobV9jYWNoZWREQywgc2hhcGluZy5t
X2hmb250KTsKLSAgICAgICAgc2hhcGluZy5tX3ByZVBhZGRpbmcgPSAwOwotICAgICAgICBpZiAo
RkFJTEVEKFNjcmlwdFBsYWNlKG1fY2FjaGVkREMsIHNoYXBpbmcubV9zY3JpcHRDYWNoZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX2dseXBoc1swXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHNoYXBpbmcubV9nbHlw
aHMuc2l6ZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX3Zp
c3VhbEF0dHJpYnV0ZXNbMF0sICZtX3J1bnNbaV0uYSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmc2hhcGluZy5tX2FkdmFuY2VbMF0sICZzaGFwaW5nLm1fb2Zmc2V0c1swXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX2FiYykpKSB7Ci0gICAgICAg
ICAgICAvLyBTb21lIGVycm9yIHdlIGRvbid0IGtub3cgaG93IHRvIGhhbmRsZS4gTnVrZSBhbGwg
b2Ygb3VyIGRhdGEKLSAgICAgICAgICAgIC8vIHNpbmNlIHdlIGNhbid0IGRlYWwgd2l0aCBwYXJ0
aWFsbHkgdmFsaWQgZGF0YSBsYXRlci4KLSAgICAgICAgICAgIG1fcnVucy5jbGVhcigpOwotICAg
ICAgICAgICAgbV9zY3JpcHRUYWdzLmNsZWFyKCk7Ci0gICAgICAgICAgICBtX3NoYXBlcy5jbGVh
cigpOwotICAgICAgICAgICAgbV9zY3JlZW5PcmRlci5jbGVhcigpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgYWRqdXN0U3BhY2VBZHZhbmNlcygpOwotCi0gICAgaWYgKG1fbGV0dGVyU3BhY2lu
ZyAhPSAwIHx8IG1fd29yZFNwYWNpbmcgIT0gMCkKLSAgICAgICAgYXBwbHlTcGFjaW5nKCk7Ci19
Ci0KLXZvaWQgVW5pc2NyaWJlSGVscGVyOjpmaWxsU2NyZWVuT3JkZXIoKQotewotICAgIG1fc2Ny
ZWVuT3JkZXIucmVzaXplKG1fcnVucy5zaXplKCkpOwotCi0gICAgLy8gV2UgYXNzdW1lIHRoYXQg
dGhlIGlucHV0IGhhcyBvbmx5IG9uZSB0ZXh0IGRpcmVjdGlvbiBpbiBpdC4KLSAgICAvLyBUT0RP
KGJyZXR0dykgYXJlIHdlIHN1cmUgd2Ugd2FudCB0byBrZWVwIHRoaXMgcmVzdHJpY3Rpb24/Ci0g
ICAgaWYgKG1faXNSdGwpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2Fz
dDxpbnQ+KG1fc2NyZWVuT3JkZXIuc2l6ZSgpKTsgaSsrKQotICAgICAgICAgICAgbV9zY3JlZW5P
cmRlcltzdGF0aWNfY2FzdDxpbnQ+KG1fc2NyZWVuT3JkZXIuc2l6ZSgpKSAtIGkgLSAxXSA9IGk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxp
bnQ+KG1fc2NyZWVuT3JkZXIuc2l6ZSgpKTsgaSsrKQotICAgICAgICAgICAgbV9zY3JlZW5PcmRl
cltpXSA9IGk7Ci0gICAgfQotfQotCi12b2lkIFVuaXNjcmliZUhlbHBlcjo6YWRqdXN0U3BhY2VB
ZHZhbmNlcygpCi17Ci0gICAgaWYgKG1fc3BhY2VXaWR0aCA9PSAwKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpbnQgc3BhY2VXaWR0aFdpdGhvdXRMZXR0ZXJTcGFjaW5nID0gbV9zcGFjZVdpZHRo
IC0gbV9sZXR0ZXJTcGFjaW5nOwotCi0gICAgLy8gVGhpcyBtb3N0bHkgbWF0Y2hlcyB3aGF0IFdl
YktpdCdzIFVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlQW5kUGxhY2VJdGVtLgotICAgIGZvciAo
c2l6ZV90IHJ1biA9IDA7IHJ1biA8IG1fcnVucy5zaXplKCk7IHJ1bisrKSB7Ci0gICAgICAgIFNo
YXBpbmcmIHNoYXBpbmcgPSBtX3NoYXBlc1tydW5dOwotCi0gICAgICAgIC8vIEZJWE1FOiBUaGlz
IGxvb3AgaXMgbm90IFVURi0xNi1zYWZlLiBVbmljb2RlIDYuMCBoYXMgYSBjb3VwbGUKLSAgICAg
ICAgLy8gb2YgY29tcGxleCBzY3JpcHQgYmxvY2tzIGluIFBsYW5lIDEuCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc2hhcGluZy5jaGFyTGVuZ3RoKCk7IGkrKykgewotICAgICAgICAgICAg
VUNoYXIgYyA9IG1faW5wdXRbbV9ydW5zW3J1bl0uaUNoYXJQb3MgKyBpXTsKLSAgICAgICAgICAg
IGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udDo6dHJlYXRBc1NwYWNlKGMpOwotICAgICAgICAgICAg
aWYgKCF0cmVhdEFzU3BhY2UgJiYgIUZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxl
eFNjcmlwdChjKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaW50
IGdseXBoSW5kZXggPSBzaGFwaW5nLm1fbG9nc1tpXTsKLSAgICAgICAgICAgIGludCBjdXJyZW50
QWR2YW5jZSA9IHNoYXBpbmcubV9hZHZhbmNlW2dseXBoSW5kZXhdOwotCi0gICAgICAgICAgICBz
aGFwaW5nLm1fZ2x5cGhzW2dseXBoSW5kZXhdID0gc2hhcGluZy5tX3NwYWNlR2x5cGg7Ci0KLSAg
ICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UpIHsKLSAgICAgICAgICAgICAgICAvLyBjdXJyZW50
QWR2YW5jZSBkb2VzIG5vdCBpbmNsdWRlIGFkZGl0aW9uYWwgbGV0dGVyLXNwYWNpbmcsCi0gICAg
ICAgICAgICAgICAgLy8gYnV0IG1fc3BhY2VXaWR0aCBkb2VzLiBIZXJlIHdlIGZpbmQgb3V0IGhv
dyBvZmYgd2UgYXJlIGZyb20KLSAgICAgICAgICAgICAgICAvLyB0aGUgY29ycmVjdCB3aWR0aCAo
c3BhY2VXaWR0aFdpdGhvdXRMZXR0ZXJTcGFjaW5nKSBhbmQKLSAgICAgICAgICAgICAgICAvLyBq
dXN0IHN1YnRyYWN0IHRoYXQgZGlmZi4KLSAgICAgICAgICAgICAgICBpbnQgZGlmZiA9IGN1cnJl
bnRBZHZhbmNlIC0gc3BhY2VXaWR0aFdpdGhvdXRMZXR0ZXJTcGFjaW5nOwotICAgICAgICAgICAg
ICAgIC8vIFRoZSBzaGFwaW5nIGNhbiBjb25zaXN0IG9mIGEgcnVuIG9mIHRleHQsIHNvIG9ubHkg
c3VidHJhY3QKLSAgICAgICAgICAgICAgICAvLyB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgd2lkdGgg
b2YgdGhlIGdseXBoLgotICAgICAgICAgICAgICAgIHNoYXBpbmcubV9hZHZhbmNlW2dseXBoSW5k
ZXhdIC09IGRpZmY7Ci0gICAgICAgICAgICAgICAgc2hhcGluZy5tX2FiYy5hYmNCIC09IGRpZmY7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIEZvciBjaGFyYWN0ZXJzIHRyZWF0ZWQgYXMgemVyby13aWR0aCBzcGFjZSBpbiBjb21wbGV4
Ci0gICAgICAgICAgICAvLyBzY3JpcHRzLCBzZXQgdGhlIGFkdmFuY2Ugd2lkdGggdG8gemVybywg
YWRqdXN0Ci0gICAgICAgICAgICAvLyB8YWJjQnwgb2YgdGhlIGN1cnJlbnQgcnVuIGFjY29yZGlu
Z2x5IGFuZCBzZXQgCi0gICAgICAgICAgICAvLyB0aGUgZ2x5cGggdG8gbV9zcGFjZUdseXBoIChp
bnZpc2libGUpLgotICAgICAgICAgICAgc2hhcGluZy5tX2FkdmFuY2VbZ2x5cGhJbmRleF0gPSAw
OwotICAgICAgICAgICAgc2hhcGluZy5tX2FiYy5hYmNCIC09IGN1cnJlbnRBZHZhbmNlOwotICAg
ICAgICAgICAgc2hhcGluZy5tX29mZnNldHNbZ2x5cGhJbmRleF0uZHUgPSAwOwotICAgICAgICAg
ICAgc2hhcGluZy5tX29mZnNldHNbZ2x5cGhJbmRleF0uZHYgPSAwOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIFVuaXNjcmliZUhlbHBlcjo6YXBwbHlTcGFjaW5nKCkKLXsKLSAgICBmb3Ig
KHNpemVfdCBydW4gPSAwOyBydW4gPCBtX3J1bnMuc2l6ZSgpOyBydW4rKykgewotICAgICAgICBT
aGFwaW5nJiBzaGFwaW5nID0gbV9zaGFwZXNbcnVuXTsKLSAgICAgICAgYm9vbCBpc1J0bCA9IG1f
cnVuc1tydW5dLmEuZlJUTDsKLQotICAgICAgICBpZiAobV9sZXR0ZXJTcGFjaW5nICE9IDApIHsK
LSAgICAgICAgICAgIC8vIFJUTCB0ZXh0IGdldHMgcGFkZGVkIHRvIHRoZSBsZWZ0IG9mIGVhY2gg
Y2hhcmFjdGVyLiBXZSBpbmNyZW1lbnQKLSAgICAgICAgICAgIC8vIHRoZSBydW4ncyBhZHZhbmNl
IHRvIG1ha2UgdGhpcyBoYXBwZW4uIFRoaXMgd2lsbCBiZSBiYWxhbmNlZCBvdXQKLSAgICAgICAg
ICAgIC8vIGJ5IE5PVCBhZGRpbmcgYWRkaXRpb25hbCBhZHZhbmNlIHRvIHRoZSBsYXN0IGdseXBo
IGluIHRoZSBydW4uCi0gICAgICAgICAgICBpZiAoaXNSdGwpCi0gICAgICAgICAgICAgICAgc2hh
cGluZy5tX3ByZVBhZGRpbmcgKz0gbV9sZXR0ZXJTcGFjaW5nOwotCi0gICAgICAgICAgICAvLyBH
byB0aHJvdWdoIGFsbCB0aGUgZ2x5cGhzIGluIHRoaXMgcnVuIGFuZCBpbmNyZWFzZSB0aGUgImFk
dmFuY2UiCi0gICAgICAgICAgICAvLyB0byBhY2NvdW50IGZvciBsZXR0ZXIgc3BhY2luZy4gV2Ug
YWRqdXN0IGxldHRlciBzcGFjaW5nIG9ubHkgb24KLSAgICAgICAgICAgIC8vIGNsdXN0ZXIgYm91
bmRhcmllcy4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGlzIHdvcmtzIGZvciBt
b3N0IHNjcmlwdHMsIGJ1dCBtYXkgaGF2ZSBwcm9ibGVtcyB3aXRoIHNvbWUKLSAgICAgICAgICAg
IC8vIGluZGljIHNjcmlwdHMuIFRoaXMgYmVoYXZpb3IgaXMgYmV0dGVyIHRoYW4gRmlyZWZveCBv
ciBJRSBmb3IKLSAgICAgICAgICAgIC8vIEhlYnJldy4KLSAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2hhcGluZy5nbHlwaExlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBp
ZiAoc2hhcGluZy5tX3Zpc3VhbEF0dHJpYnV0ZXNbaV0uZkNsdXN0ZXJTdGFydCkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBJY2ssIHdlIG5lZWQgdG8gYXNzaWduIHRoZSBleHRyYSBzcGFjZSBz
byB0aGF0IHRoZSBnbHlwaAotICAgICAgICAgICAgICAgICAgICAvLyBjb21lcyBmaXJzdCwgdGhl
biBpcyBmb2xsb3dlZCBieSB0aGUgc3BhY2UuIFRoaXMgaXMKLSAgICAgICAgICAgICAgICAgICAg
Ly8gb3Bwb3NpdGUgZm9yIFJUTC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzUnRsKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSBzaGFwaW5nLmdseXBoTGVuZ3RoKCkgLSAx
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsIGJ1dCB0aGUgbGFzdCBjaGFy
YWN0ZXIganVzdCBnZXQgdGhlIHNwYWNpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBhcHBsaWVkIHRvIHRoZWlyIGFkdmFuY2UuIFRoZSBsYXN0IGNoYXJhY3RlcgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3QgZ2V0IGFueXRoaW5nLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNoYXBpbmcubV9hZHZhbmNlW2ldICs9IG1fbGV0dGVyU3BhY2luZzsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwaW5nLm1fYWJjLmFiY0IgKz0gbV9sZXR0
ZXJTcGFjaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTFRSIGNhc2UgaXMgZWFzaWVy
LCB3ZSBqdXN0IGFkZCB0byB0aGUgYWR2YW5jZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHNo
YXBpbmcubV9hZHZhbmNlW2ldICs9IG1fbGV0dGVyU3BhY2luZzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNoYXBpbmcubV9hYmMuYWJjQiArPSBtX2xldHRlclNwYWNpbmc7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBHbyB0aHJvdWdoIGFsbCB0aGUgY2hhcmFjdGVycyB0byBmaW5kIHdoaXRl
c3BhY2UgYW5kIGluc2VydCB0aGUKLSAgICAgICAgLy8gZXh0cmEgd29yZHNwYWNpbmcgYW1vdW50
IGZvciB0aGUgZ2x5cGhzIHRoZXkgY29ycmVzcG9uZCB0by4KLSAgICAgICAgaWYgKG1fd29yZFNw
YWNpbmcgIT0gMCkgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaGFwaW5nLmNo
YXJMZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFGb250Ojp0cmVhdEFzU3Bh
Y2UobV9pbnB1dFttX3J1bnNbcnVuXS5pQ2hhclBvcyArIGldKSkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAvLyBUaGUgY2hhciBpbiBxdWVzdGlvbiBp
cyBhIHdvcmQgc2VwYXJhdG9yLi4uCi0gICAgICAgICAgICAgICAgaW50IGdseXBoSW5kZXggPSBz
aGFwaW5nLm1fbG9nc1tpXTsKLQotICAgICAgICAgICAgICAgIC8vIFNwYWNlcyB3aWxsIG5vdCBo
YXZlIGEgZ2x5cGggaW4gVW5pc2NyaWJlLCBpdCB3aWxsIGp1c3QgYWRkCi0gICAgICAgICAgICAg
ICAgLy8gYWRkaXRpb25hbCBhZHZhbmNlIHRvIHRoZSBjaGFyYWN0ZXIgdG8gdGhlIGxlZnQgb2Yg
dGhlCi0gICAgICAgICAgICAgICAgLy8gc3BhY2UuIFRoZSBzcGFjZSdzIGNvcnJlc3BvbmRpbmcg
Z2x5cGggd2lsbCBiZSB0aGUgY2hhcmFjdGVyCi0gICAgICAgICAgICAgICAgLy8gZm9sbG93aW5n
IGl0IGluIHJlYWRpbmcgb3JkZXIuCi0gICAgICAgICAgICAgICAgaWYgKGlzUnRsKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIEluIFJUTCwgdGhlIGdseXBoIHRvIHRoZSBsZWZ0IG9mIHRoZSBz
cGFjZSBpcyB0aGUgc2FtZQotICAgICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgZmlyc3QgZ2x5
cGggb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIsIHNvIHdlIGNhbgotICAgICAgICAgICAgICAg
ICAgICAvLyBqdXN0IGluY3JlbWVudCBpdC4KLSAgICAgICAgICAgICAgICAgICAgc2hhcGluZy5t
X2FkdmFuY2VbZ2x5cGhJbmRleF0gKz0gbV93b3JkU3BhY2luZzsKLSAgICAgICAgICAgICAgICAg
ICAgc2hhcGluZy5tX2FiYy5hYmNCICs9IG1fd29yZFNwYWNpbmc7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTFRSIGlzIGFjdHVhbGx5IG1vcmUgY29t
cGxleCBoZXJlLCB3ZSBhcHBseSBpdCB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcHJl
dmlvdXMgY2hhcmFjdGVyIGlmIHRoZXJlIGlzIG9uZSwgb3RoZXJ3aXNlIHdlIGhhdmUgdG8KLSAg
ICAgICAgICAgICAgICAgICAgLy8gYXBwbHkgaXQgdG8gdGhlIGxlYWRpbmcgc3BhY2Ugb2YgdGhl
IHJ1bi4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoSW5kZXggPT0gMCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNoYXBpbmcubV9wcmVQYWRkaW5nICs9IG1fd29yZFNwYWNpbmc7Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGlu
Zy5tX2FkdmFuY2VbZ2x5cGhJbmRleCAtIDFdICs9IG1fd29yZFNwYWNpbmc7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzaGFwaW5nLm1fYWJjLmFiY0IgKz0gbV93b3JkU3BhY2luZzsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSAgLy8gbV93b3JkU3BhY2luZyAhPSAwCi0KLSAgICAgICAgLy8gTG9vcCBmb3IgbmV4dCBy
dW4uLi4KLSAgICB9Ci19Ci0KLS8vIFRoZSBhZHZhbmNlIGlzIHRoZSBBQkMgd2lkdGggb2YgdGhl
IHJ1bgotaW50IFVuaXNjcmliZUhlbHBlcjo6YWR2YW5jZUZvckl0ZW0oaW50IGl0ZW1JbmRleCkg
Y29uc3QKLXsKLSAgICBpbnQgYWNjdW0gPSAwOwotICAgIGNvbnN0IFNoYXBpbmcmIHNoYXBpbmcg
PSBtX3NoYXBlc1tpdGVtSW5kZXhdOwotCi0gICAgaWYgKHNoYXBpbmcubV9qdXN0aWZ5LnNpemUo
KSA9PSAwKSB7Ci0gICAgICAgIC8vIEVhc3kgY2FzZSB3aXRoIG5vIGp1c3RpZmljYXRpb24sIHRo
ZSB3aWR0aCBpcyBqdXN0IHRoZSBBQkMgd2lkdGggb2YKLSAgICAgICAgLy8gdGhlIHJ1bi4gKFRo
ZSBBQkMgd2lkdGggaXMgdGhlIHN1bSBvZiB0aGUgYWR2YW5jZXMpLgotICAgICAgICByZXR1cm4g
c2hhcGluZy5tX2FiYy5hYmNBICsgc2hhcGluZy5tX2FiYy5hYmNCICsKLSAgICAgICAgICAgICAg
IHNoYXBpbmcubV9hYmMuYWJjQyArIHNoYXBpbmcubV9wcmVQYWRkaW5nOwotICAgIH0KLQotICAg
IC8vIFdpdGgganVzdGlmaWNhdGlvbiwgd2UgdXNlIHRoZSBqdXN0aWZpZWQgYW1vdW50cyBpbnN0
ZWFkLiBUaGUKLSAgICAvLyBqdXN0aWZpY2F0aW9uIGFycmF5IGNvbnRhaW5zIGJvdGggdGhlIGFk
dmFuY2UgYW5kIHRoZSBleHRyYSBzcGFjZQotICAgIC8vIGFkZGVkIGZvciBqdXN0aWZpY2F0aW9u
LCBzbyBpcyB0aGUgd2lkdGggd2Ugd2FudC4KLSAgICBpbnQganVzdGlmaWNhdGlvbiA9IDA7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaGFwaW5nLm1fanVzdGlmeS5zaXplKCk7IGkrKykK
LSAgICAgICAganVzdGlmaWNhdGlvbiArPSBzaGFwaW5nLm1fanVzdGlmeVtpXTsKLQotICAgIHJl
dHVybiBzaGFwaW5nLm1fcHJlUGFkZGluZyArIGp1c3RpZmljYXRpb247Ci19Ci0KLS8vIFNDUklQ
VF9GT05UUFJPUEVSVElFUyBjb250YWlucyBnbHlwaCBpbmRpY2VzIGZvciBkZWZhdWx0LCBpbnZh
bGlkCi0vLyBhbmQgYmxhbmsgZ2x5cGhzLiBKdXN0IGJlY2F1c2UgU2NyaXB0U2hhcGUgc3VjY2Vl
ZHMgZG9lcyBub3QgbWVhbgotLy8gdGhhdCBhIHRleHQgcnVuIGlzIHJlbmRlcmVkIGNvcnJlY3Rs
eS4gU29tZSBjaGFyYWN0ZXJzIG1heSBiZSByZW5kZXJlZAotLy8gd2l0aCBkZWZhdWx0L2ludmFs
aWQvYmxhbmsgZ2x5cGhzLiBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGdseXBo
Ci0vLyBhcnJheSByZXR1cm5lZCBieSBTY3JpcHRTaGFwZSBjb250YWlucyBhbnkgb2YgdGhvc2Ug
Z2x5cGhzIHRvIG1ha2UKLS8vIHN1cmUgdGhhdCB0aGUgdGV4dCBydW4gaXMgcmVuZGVyZWQgc3Vj
Y2Vzc2Z1bGx5LgotLy8gSG93ZXZlciwgd2Ugc2hvdWxkIG5vdCBzdWJqZWN0IHplcm8td2lkdGgg
Y2hhcmFjdGVycyB0byB0aGlzIHRlc3QuCi0KLWJvb2wgVW5pc2NyaWJlSGVscGVyOjpjb250YWlu
c01pc3NpbmdHbHlwaHMoY29uc3QgU2hhcGluZyYgc2hhcGluZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU0NSSVBUX0lURU0mIHJ1biwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU0NSSVBUX0ZPTlRQ
Uk9QRVJUSUVTKiBwcm9wZXJ0aWVzKSBjb25zdAotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2hhcGluZy5jaGFyTGVuZ3RoKCk7IGkrKykgewotICAgICAgICBVQ2hhciBjID0gbV9pbnB1dFty
dW4uaUNoYXJQb3MgKyBpXTsKLSAgICAgICAgLy8gU2tpcCB6ZXJvLXdpZHRoIHNwYWNlIGNoYXJh
Y3RlcnMgYmVjYXVzZSB0aGV5J3JlIG5vdCBjb25zaWRlcmVkIHRvIGJlIG1pc3NpbmcgaW4gYSBm
b250LgotICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2Ny
aXB0KGMpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGludCBnbHlwaEluZGV4ID0g
c2hhcGluZy5tX2xvZ3NbaV07Ci0gICAgICAgIFdPUkQgZ2x5cGggPSBzaGFwaW5nLm1fZ2x5cGhz
W2dseXBoSW5kZXhdOwotICAgICAgICBpZiAoZ2x5cGggPT0gcHJvcGVydGllcy0+d2dEZWZhdWx0
Ci0gICAgICAgICAgICB8fCAoZ2x5cGggPT0gcHJvcGVydGllcy0+d2dJbnZhbGlkICYmIGdseXBo
ICE9IHByb3BlcnRpZXMtPndnQmxhbmspKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIE9QRU5UWVBFX1RBRyBjb252ZXJ0RmVh
dHVyZVRhZyhjb25zdCBTdHJpbmcmIHRhZykKLXsKLSAgICByZXR1cm4gKCh0YWdbMF0gJiAweEZG
KSB8ICgodGFnWzFdICYgMHhGRikgPDwgOCkgfCAoKHRhZ1syXSAmIDB4RkYpIDw8IDE2KSB8ICgo
dGFnWzNdICYgMHhGRikgPDwgMjQpKTsKLX0KLQotdm9pZCBVbmlzY3JpYmVIZWxwZXI6OnNldFJh
bmdlUHJvcGVydGllcyhjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmZWF0dXJlU2V0dGluZ3Mp
Ci17Ci0gICAgaWYgKCFmZWF0dXJlU2V0dGluZ3MgfHwgIWZlYXR1cmVTZXR0aW5ncy0+c2l6ZSgp
KSB7Ci0gICAgICAgIG1fZmVhdHVyZVJlY29yZHMucmVzaXplKDApOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9mZWF0dXJlUmVjb3Jkcy5yZXNpemUoZmVhdHVyZVNldHRpbmdzLT5z
aXplKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmZWF0dXJlU2V0dGluZ3MtPnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIG1fZmVhdHVyZVJlY29yZHNbaV0ubFBhcmFtZXRlciA9IGZl
YXR1cmVTZXR0aW5ncy0+YXQoaSkudmFsdWUoKTsKLSAgICAgICAgbV9mZWF0dXJlUmVjb3Jkc1tp
XS50YWdGZWF0dXJlID0gY29udmVydEZlYXR1cmVUYWcoZmVhdHVyZVNldHRpbmdzLT5hdChpKS50
YWcoKSk7Ci0gICAgfQotICAgIG1fcmFuZ2VQcm9wZXJ0aWVzLnBvdGZSZWNvcmRzID0gJm1fZmVh
dHVyZVJlY29yZHNbMF07Ci0gICAgbV9yYW5nZVByb3BlcnRpZXMuY290ZlJlY29yZHMgPSBtX2Zl
YXR1cmVSZWNvcmRzLnNpemUoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1VuaXNjcmliZUhlbHBlci5oCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw0NDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBBIHdyYXBwZXIg
YXJvdW5kIFVuaXNjcmliZSB0aGF0IHByb3ZpZGVzIGEgcmVhc29uYWJsZSBBUEkuCi0KLSNpZm5k
ZWYgVW5pc2NyaWJlSGVscGVyX2gKLSNkZWZpbmUgVW5pc2NyaWJlSGVscGVyX2gKLQotI2luY2x1
ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx1c3AxMC5oPgotI2luY2x1ZGUgPG1hcD4KLQotI2lu
Y2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLWNsYXNz
IFVuaXNjcmliZVRlc3RfVG9vQmlnX1Rlc3Q7IC8vIEEgZ3VuaXQgdGVzdCBmb3IgVW5pc2NyaWJl
SGVscGVyLgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZvbnRGZWF0dXJlU2V0dGlu
Z3M7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0KLWNvbnN0IHVuc2lnbmVkIGNVbmlzY3JpYmVI
ZWxwZXJTdGFja1J1bnMgPSA4OwotY29uc3QgdW5zaWduZWQgY1VuaXNjcmliZUhlbHBlclN0YWNr
Q2hhcnMgPSAzMjsKLWNvbnN0IHVuc2lnbmVkIGNVbmlzY3JpYmVIZWxwZXJGZWF0dXJlcyA9IDQ7
Ci0KLS8vIFRoaXMgb2JqZWN0IHNob3VsZCBiZSBzYWZlIHRvIGNyZWF0ZSAmIGRlc3Ryb3kgZnJl
cXVlbnRseSwgYXMgbG9uZyBhcyB0aGUKLS8vIGNhbGxlciBwcmVzZXJ2ZXMgdGhlIHNjcmlwdF9j
YWNoZSB3aGVuIHBvc3NpYmxlICh0aGlzIGRhdGEgbWF5IGJlIHNsb3cgdG8KLS8vIGNvbXB1dGUp
LgotLy8KLS8vIFRoaXMgb2JqZWN0IGlzICJraW5kIG9mIGxhcmdlIiAofjFLKSBiZWNhdXNlIGl0
IHJlc2VydmVzIGEgbG90IG9mIHNwYWNlIGZvcgotLy8gd29ya2luZyB3aXRoIHRvIGF2b2lkIGV4
cGVuc2l2ZSBoZWFwIG9wZXJhdGlvbnMuIFRoZXJlZm9yZSwgbm90IG9ubHkgc2hvdWxkCi0vLyB5
b3Ugbm90IHdvcnJ5IGFib3V0IGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIGl0LCB5b3Ugc2hvdWxk
IHRyeSB0byBub3Qga2VlcAotLy8gdGhlbSBhcm91bmQuCi1jbGFzcyBVbmlzY3JpYmVIZWxwZXIg
ewotcHVibGljOgotICAgIC8vIEluaXRpYWxpemVzIHRoaXMgVW5pc2NyaWJlIHJ1biB3aXRoIHRo
ZSB0ZXh0IHBvaW50ZWQgdG8gYnkgfHJ1bnwgd2l0aAotICAgIC8vIHxsZW5ndGh8LiBUaGUgaW5w
dXQgaXMgTk9UIG51bGwgdGVybWluYXRlZC4KLSAgICAvLwotICAgIC8vIFRoZSBpc19ydGwgZmxh
ZyBzaG91bGQgYmUgc2V0IGlmIHRoZSBpbnB1dCBzY3JpcHQgaXMgUlRMLiBJdCBpcyBhc3N1bWVk
Ci0gICAgLy8gdGhhdCB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGRpdmlkZWQgdXAgdGhlIGlucHV0
IHRleHQgKHVzaW5nIElDVSwgZm9yCi0gICAgLy8gZXhhbXBsZSkgaW50byBydW5zIG9mIHRoZSBz
YW1lIGRpcmVjdGlvbiBvZiBzY3JpcHQuIFRoaXMgYXZvaWRzCi0gICAgLy8gZGlzYWdyZWVtZW50
cyBiZXR3ZWVuIHRoZSBjYWxsZXIgYW5kIFVuaXNjcmliZSBsYXRlciAoc2VlIEZpbGxJdGVtcyku
Ci0gICAgLy8KLSAgICAvLyBBIHNjcmlwdCBjYWNoZSBzaG91bGQgYmUgcHJvdmlkZWQgYnkgdGhl
IGNhbGxlciB0aGF0IGlzIGluaXRpYWxpemVkIHRvCi0gICAgLy8gTlVMTC4gV2hlbiB0aGUgY2Fs
bGVyIGlzIGRvbmUgd2l0aCB0aGUgY2FjaGUgKGl0IG1heSBiZSBzdG9yZWQgYmV0d2VlbgotICAg
IC8vIHJ1bnMgYXMgbG9uZyBhcyBpdCBpcyB1c2VkIGNvbnNpc3RlbnRseSB3aXRoIHRoZSBzYW1l
IEhGT05UKSwgaXQgc2hvdWxkCi0gICAgLy8gY2FsbCBTY3JpcHRGcmVlQ2FjaGUoKS4KLSAgICBV
bmlzY3JpYmVIZWxwZXIoY29uc3QgVUNoYXIqIGlucHV0LAotICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgaXNSdGwsCi0gICAgICAg
ICAgICAgICAgICAgIEhGT05ULAotICAgICAgICAgICAgICAgICAgICBTQ1JJUFRfQ0FDSEUqLAot
ICAgICAgICAgICAgICAgICAgICBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqLAotICAgICAgICAgICAg
ICAgICAgICBXT1JEKTsKLQotICAgIHZpcnR1YWwgflVuaXNjcmliZUhlbHBlcigpOwotCi0gICAg
Ly8gU2V0cyBVbmlzY3JpYmUncyBkaXJlY3Rpb25hbCBvdmVycmlkZSBmbGFnLiBGYWxzZSBieSBk
ZWZhdWx0LgotICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9kaXJlY3Rpb25hbE92ZXJyaWRlOwotICAgIH0KLSAgICB2b2lkIHNldERp
cmVjdGlvbmFsT3ZlcnJpZGUoYm9vbCBvdmVycmlkZSkKLSAgICB7Ci0gICAgICAgIG1fZGlyZWN0
aW9uYWxPdmVycmlkZSA9IG92ZXJyaWRlOwotICAgIH0KLQotICAgIC8vIFNldCdzIFVuaXNjcmli
ZSdzIG5vLWxpZ2F0ZSBvdmVycmlkZSBmbGFnLiBGYWxzZSBieSBkZWZhdWx0LgotICAgIGJvb2wg
aW5oaWJpdExpZ2F0ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pbmhpYml0TGln
YXRlOwotICAgIH0KLSAgICB2b2lkIHNldEluaGliaXRMaWdhdGUoYm9vbCBpbmhpYml0KQotICAg
IHsKLSAgICAgICAgbV9pbmhpYml0TGlnYXRlID0gaW5oaWJpdDsKLSAgICB9Ci0KLSAgICAvLyBT
ZXQgbGV0dGVyIHNwYWNpbmcuIFdlIHdpbGwgdHJ5IHRvIGluc2VydCB0aGlzIG11Y2ggc3BhY2Ug
YmV0d2VlbgotICAgIC8vIGdyYXBoZW1lcyAob25lIG9yIG1vcmUgZ2x5cGhzIHBlcmNlaXZlZCBh
cyBhIHNpbmdsZSB1bml0IGJ5IG9yZGluYXJ5Ci0gICAgLy8gdXNlcnMgb2YgYSBzY3JpcHQpLiBQ
b3NpdGl2ZSB2YWx1ZXMgaW5jcmVhc2UgbGV0dGVyIHNwYWNpbmcsIG5lZ2F0aXZlCi0gICAgLy8g
dmFsdWVzIGRlY3JlYXNlIGl0LiAwIGJ5IGRlZmF1bHQuCi0gICAgaW50IGxldHRlclNwYWNpbmco
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGV0dGVyU3BhY2luZzsKLSAgICB9Ci0g
ICAgdm9pZCBzZXRMZXR0ZXJTcGFjaW5nKGludCBsZXR0ZXJTcGFjaW5nKQotICAgIHsKLSAgICAg
ICAgbV9sZXR0ZXJTcGFjaW5nID0gbGV0dGVyU3BhY2luZzsKLSAgICB9Ci0KLSAgICAvLyBTZXQg
dGhlIHdpZHRoIG9mIGEgc3RhbmRhcmQgc3BhY2UgY2hhcmFjdGVyLiBXZSB1c2UgdGhpcyB0byBu
b3JtYWxpemUKLSAgICAvLyBzcGFjZSB3aWR0aHMuIFdpbmRvd3Mgd2lsbCBtYWtlIHNwYWNlcyBh
ZnRlciBIaW5kaSBjaGFyYWN0ZXJzIGxhcmdlciB0aGFuCi0gICAgLy8gb3RoZXIgc3BhY2VzLiBB
IHNwYWNlX3dpZHRoIG9mIDAgbWVhbnMgdG8gdXNlIHRoZSBkZWZhdWx0IHNwYWNlIHdpZHRoLgot
ICAgIC8vCi0gICAgLy8gTXVzdCBiZSBzZXQgYmVmb3JlIEluaXQoKSBpcyBjYWxsZWQuCi0gICAg
aW50IHNwYWNlV2lkdGgoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3BhY2VXaWR0
aDsKLSAgICB9Ci0gICAgdm9pZCBzZXRTcGFjZVdpZHRoKGludCBzcGFjZVdpZHRoKQotICAgIHsK
LSAgICAgICAgbV9zcGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKLSAgICB9Ci0KLSAgICAvLyBTZXQg
d29yZCBzcGFjaW5nLiBXZSB3aWxsIHRyeSB0byBpbnNlcnQgdGhpcyBtdWNoIGV4dHJhIHNwYWNl
IGJldHdlZW4KLSAgICAvLyBlYWNoIHdvcmQgaW4gdGhlIGlucHV0IChiZXlvbmQgd2hhdGV2ZXIg
d2hpdGVzcGFjZSBjaGFyYWN0ZXIgc2VwYXJhdGVzCi0gICAgLy8gd29yZHMpLiBQb3NpdGl2ZSB2
YWx1ZXMgbGVhZCB0byBpbmNyZWFzZWQgbGV0dGVyIHNwYWNpbmcsIG5lZ2F0aXZlIHZhbHVlcwot
ICAgIC8vIGRlY3JlYXNlIGl0LiAwIGJ5IGRlZmF1bHQuCi0gICAgLy8KLSAgICAvLyBNdXN0IGJl
IHNldCBiZWZvcmUgSW5pdCgpIGlzIGNhbGxlZC4KLSAgICBpbnQgd29yZFNwYWNpbmcoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fd29yZFNwYWNpbmc7Ci0gICAgfQotICAgIHZvaWQg
c2V0V29yZFNwYWNpbmcoaW50IHdvcmRTcGFjaW5nKQotICAgIHsKLSAgICAgICAgbV93b3JkU3Bh
Y2luZyA9IHdvcmRTcGFjaW5nOwotICAgIH0KLQotICAgIHZvaWQgc2V0QXNjZW50KGludCBhc2Nl
bnQpCi0gICAgewotICAgICAgICBtX2FzY2VudCA9IGFzY2VudDsKLSAgICB9Ci0KLSAgICAvLyBX
aGVuIHNldCB0byB0cnVlLCB0aGlzIGNsYXNzIGlzIHVzZWQgb25seSB0byBsb29rIHVwIGdseXBo
Ci0gICAgLy8gaW5kaWNlcyBmb3IgYSByYW5nZSBvZiBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aG91
dCBnbHlwaCBwbGFjZW1lbnQuCi0gICAgLy8gQnkgZGVmYXVsdCwgaXQncyBmYWxzZS4gVGhpcyBz
aG91bGQgYmUgc2V0IHRvIHRydWUgd2hlbiB0aGlzCi0gICAgLy8gY2xhc3MgaXMgdXNlZCBmb3Ig
Z2x5cGggaW5kZXggbG9vay11cCBmb3Igbm9uLUJNUCBjaGFyYWN0ZXJzCi0gICAgLy8gaW4gR2x5
cGhQYWdlTm9kZUNocm9taXVtV2luLmNwcC4KLSAgICB2b2lkIHNldERpc2FibGVGb250RmFsbGJh
Y2soYm9vbCBkaXNhYmxlRm9udEZhbGxiYWNrKQotICAgIHsKLSAgICAgICAgbV9kaXNhYmxlRm9u
dEZhbGxiYWNrID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBTZXQgVEVYVFJBTkdFX1BST1BFUlRJ
RVMgc3RydWN0dXJlIHdoaWNoIGNvbnRhaW5zCi0gICAgLy8gT3BlblR5cGUgZmVhdHVyZSByZWNv
cmRzIGdlbmVyYXRlZCBmcm9tIEZvbnRGZWF0dXJlU2V0dGluZ3MuCi0gICAgdm9pZCBzZXRSYW5n
ZVByb3BlcnRpZXMoY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyopOwotCi0gICAgLy8gWW91IG11
c3QgY2FsbCB0aGlzIGFmdGVyIHNldHRpbmcgYW55IG9wdGlvbnMgYnV0IGJlZm9yZSBkb2luZyBh
bnkKLSAgICAvLyBvdGhlciBjYWxscyBsaWtlIGFza2luZyBmb3Igd2lkdGhzIG9yIGRyYXdpbmcu
Ci0gICAgdm9pZCBpbml0KCkKLSAgICB7Ci0gICAgICAgIGluaXRXaXRoT3B0aW9uYWxMZW5ndGhQ
cm90ZWN0aW9uKHRydWUpOwotICAgIH0KLQotICAgIC8vIFJldHVybnMgdGhlIHRvdGFsIHdpZHRo
IGluIHBpeGVscyBvZiB0aGUgdGV4dCBydW4uCi0gICAgaW50IHdpZHRoKCkgY29uc3Q7Ci0KLSAg
ICAvLyBDYWxsIHRvIGp1c3RpZnkgdGhlIHRleHQsIHdpdGggdGhlIGFtb3VudCBvZiBzcGFjZSB0
aGF0IHNob3VsZCBiZSBBRERFRAotICAgIC8vIHRvIGdldCB0aGUgZGVzaXJlZCB3aWR0aCB0aGF0
IHRoZSBjb2x1bW4gc2hvdWxkIGJlIGp1c3RpZmllZCB0by4KLSAgICAvLyBOb3JtYWxseSwgc3Bh
Y2VzIGFyZSBpbnNlcnRlZCwgYnV0IGZvciBBcmFiaWMgdGhlcmUgd2lsbCBiZSBrYXNoaWRhcwot
ICAgIC8vIChleHRyYSBzdHJva2VzKSBpbnNlcnRlZCBpbnN0ZWFkLgotICAgIC8vCi0gICAgLy8g
VGhpcyBmdW5jdGlvbiBNVVNUIGJlIGNhbGxlZCBBRlRFUiBJbml0KCkuCi0gICAgdm9pZCBqdXN0
aWZ5KGludCBhZGRpdGlvbmFsU3BhY2UpOwotCi0gICAgLy8gQ29tcHV0ZXMgdGhlIGdpdmVuIGNo
YXJhY3RlciBvZmZzZXQgaW50byBhIHBpeGVsIG9mZnNldCBvZiB0aGUgYmVnaW5uaW5nCi0gICAg
Ly8gb2YgdGhhdCBjaGFyYWN0ZXIuCi0gICAgaW50IGNoYXJhY3RlclRvWChpbnQgb2Zmc2V0KSBj
b25zdDsKLQotICAgIC8vIENvbnZlcnRzIHRoZSBnaXZlbiBwaXhlbCBYIHBvc2l0aW9uIGludG8g
YSBsb2dpY2FsIGNoYXJhY3RlciBvZmZzZXQgaW50bwotICAgIC8vIHRoZSBydW4uIEZvciBwb3Np
dGlvbnMgYXBwZWFyaW5nIGJlZm9yZSB0aGUgZmlyc3QgY2hhcmFjdGVyLCB0aGlzIHdpbGwKLSAg
ICAvLyByZXR1cm4gLTEuCi0gICAgaW50IHhUb0NoYXJhY3RlcihpbnQgeCkgY29uc3Q7Ci0KLSAg
ICAvLyBEcmF3cyB0aGUgZ2l2ZW4gY2hhcmFjdGVycyB0byAoeCwgeSkgaW4gdGhlIGdpdmVuIERD
LiBUaGUgZm9udCB3aWxsIGJlCi0gICAgLy8gaGFuZGxlZCBieSB0aGlzIGZ1bmN0aW9uLCBidXQg
dGhlIGZvbnQgY29sb3IgYW5kIG90aGVyIGF0dHJpYnV0ZXMgc2hvdWxkCi0gICAgLy8gYmUgcHJl
LXNldC4KLSAgICAvLwotICAgIC8vIFRoZSB5IHBvc2l0aW9uIGlzIHRoZSB1cHBlciBsZWZ0IGNv
cm5lciwgTk9UIHRoZSBiYXNlbGluZS4KLSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQsIEhEQyBkYywgaW50IHgsIGludCB5LCBpbnQgZnJvbSwKLSAgICAgICAg
ICAgICAgaW50IHRvKTsKLQotICAgIC8vIFJldHVybnMgdGhlIGZpcnN0IGdseXBoIGFzc2lnbmVk
IHRvIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGdpdmVuIG9mZnNldC4KLSAgICAvLyBUaGlzIGZ1bmN0
aW9uIGlzIHVzZWQgdG8gcmV0cmlldmUgZ2x5cGggaW5mb3JtYXRpb24gd2hlbiBVbmlzY3JpYmUg
aXMKLSAgICAvLyBiZWluZyB1c2VkIHRvIGdlbmVyYXRlIGdseXBocyBmb3Igbm9uLWNvbXBsZXgs
IG5vbi1CTVAgKGFib3ZlIFUrRkZGRikKLSAgICAvLyBjaGFyYWN0ZXJzLiBUaGVzZSBjaGFyYWN0
ZXJzIGFyZSBub3Qgb3RoZXJ3aXNlIHNwZWNpYWwgYW5kIGhhdmUgbm8KLSAgICAvLyBjb21wbGV4
IHNoYXBpbmcgcnVsZXMsIHNvIHdlIGRvbid0IG90aGVyd2lzZSBuZWVkIFVuaXNjcmliZSwgZXhj
ZXB0Ci0gICAgLy8gVW5pc2NyaWJlIGlzIHRoZSBvbmx5IHdheSB0byBnZXQgZ2x5cGhzIGZvciBu
b24tQk1QIGNoYXJhY3RlcnMuCi0gICAgLy8KLSAgICAvLyBSZXR1cm5zIDAgaWYgdGhlcmUgaXMg
bm8gZ2x5cGggZm9yIHRoZSBnaXZlbiBjaGFyYWN0ZXIuCi0gICAgV09SRCBmaXJzdEdseXBoRm9y
Q2hhcmFjdGVyKGludCBjaGFyT2Zmc2V0KSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIC8vIEJh
Y2tlbmQgZm9yIGluaXQuIFRoZSBmbGFnIGFsbG93cyB0aGUgdW5pdCB0ZXN0IHRvIHNwZWNpZnkg
d2hldGhlciB3ZQotICAgIC8vIHNob3VsZCBmYWlsIGVhcmx5IGZvciB2ZXJ5IGxvbmcgc3RyaW5n
cyBsaWtlIG5vcm1hbCwgb3IgdHJ5IHRvIHBhc3MgdGhlCi0gICAgLy8gbG9uZyBzdHJpbmcgdG8g
VW5pc2NyaWJlLiBUaGUgbGF0dGVyIHByb3ZpZGVzIGEgd2F5IHRvIGZvcmNlIGZhaWx1cmUgb2YK
LSAgICAvLyBzaGFwaW5nLgotICAgIHZvaWQgaW5pdFdpdGhPcHRpb25hbExlbmd0aFByb3RlY3Rp
b24oYm9vbCBsZW5ndGhQcm90ZWN0aW9uKTsKLQotICAgIC8vIFRyaWVzIHRvIHByZWxvYWQgdGhl
IGZvbnQgd2hlbiB0aGUgaXQgaXMgbm90IGFjY2Vzc2libGUuCi0gICAgLy8gVGhpcyBpcyB0aGUg
ZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhbmQgaXQgZG9lcyBub3QgZG8gYW55dGhpbmcuCi0gICAg
dmlydHVhbCB2b2lkIHRyeVRvUHJlbG9hZEZvbnQoSEZPTlQpIHt9Ci0KLXByaXZhdGU6Ci0gICAg
ZnJpZW5kIGNsYXNzIFVuaXNjcmliZVRlc3RfVG9vQmlnX1Rlc3Q7Ci0KLSAgICAvLyBBbiBhcnJh
eSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggaXRlbSBpbiBydW5zXyBjb250YWluaW5nIGluZm9ybWF0
aW9uCi0gICAgLy8gb24gZWFjaCBvZiB0aGUgZ2x5cGhzIHRoYXQgd2VyZSBnZW5lcmF0ZWQuIExp
a2UgcnVuc18sIHRoaXMgaXMgaW4KLSAgICAvLyByZWFkaW5nIG9yZGVyLiBIb3dldmVyLCBmb3Ig
cnRsIHRleHQsIHRoZSBjaGFyYWN0ZXJzIHdpdGhpbiBlYWNoCi0gICAgLy8gaXRlbSB3aWxsIGJl
IHJldmVyc2VkLgotICAgIHN0cnVjdCBTaGFwaW5nIHsKLSAgICAgICAgU2hhcGluZygpCi0gICAg
ICAgICAgICA6IG1fcHJlUGFkZGluZygwKQotICAgICAgICAgICAgLCBtX2hmb250KE5VTEwpCi0g
ICAgICAgICAgICAsIG1fc2NyaXB0Q2FjaGUoTlVMTCkKLSAgICAgICAgICAgICwgbV9hc2NlbnRP
ZmZzZXQoMCkKLSAgICAgICAgICAgICwgbV9zcGFjZUdseXBoKDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1fYWJjLmFiY0EgPSAwOwotICAgICAgICAgICAgbV9hYmMuYWJjQiA9IDA7Ci0gICAg
ICAgICAgICBtX2FiYy5hYmNDID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJldHVybnMg
dGhlIG51bWJlciBvZiBnbHlwaHMgKHdoaWNoIHdpbGwgYmUgZHJhd24gdG8gdGhlIHNjcmVlbikK
LSAgICAgICAgLy8gaW4gdGhpcyBydW4uCi0gICAgICAgIGludCBnbHlwaExlbmd0aCgpIGNvbnN0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fZ2x5cGhz
LnNpemUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg
Y2hhcmFjdGVycyAodGhhdCB3ZSBzdGFydGVkIHdpdGgpIGluIHRoaXMgcnVuLgotICAgICAgICBp
bnQgY2hhckxlbmd0aCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KG1fbG9ncy5zaXplKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0
dXJucyB0aGUgYWR2YW5jZSBhcnJheSB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gbWVhc3VyaW5n
IGdseXBocy4KLSAgICAgICAgLy8gVGhlIHJldHVybmVkIHBvaW50ZXIgd2lsbCBpbmRpY2F0ZSBh
biBhcnJheSB3aXRoIGdseXBoX2xlbmd0aCgpCi0gICAgICAgIC8vIGVsZW1lbnRzIGFuZCB0aGUg
YWR2YW5jZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBlYWNoIG9uZS4gVGhpcyBpcwotICAgICAg
ICAvLyBlaXRoZXIgdGhlIHJlYWwgYWR2YW5jZSwgb3IgdGhlIGp1c3RpZmllZCBhZHZhbmNlcyBp
ZiB0aGVyZSBpcyBvbmUsCi0gICAgICAgIC8vIGFuZCBpcyB0aGUgYXJyYXkgd2Ugd2FudCB0byB1
c2UgZm9yIG1lYXN1cmVtZW50LgotICAgICAgICBjb25zdCBpbnQqIGVmZmVjdGl2ZUFkdmFuY2Vz
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fYWR2YW5jZS5zaXplKCkgPT0g
MCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGlmIChtX2p1c3RpZnku
c2l6ZSgpID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuICZtX2FkdmFuY2VbMF07Ci0gICAg
ICAgICAgICByZXR1cm4gJm1fanVzdGlmeVswXTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRo
aXMgaXMgdGhlIGFkdmFuY2UgYW1vdW50IG9mIHNwYWNlIHRoYXQgd2UgaGF2ZSBhZGRlZCB0byB0
aGUKLSAgICAgICAgLy8gYmVnaW5uaW5nIG9mIHRoZSBydW4uIEl0IGlzIGxpa2UgdGhlIEFCQydz
IHxBfCBhZHZhbmNlIGJ1dCBvbmUgdGhhdAotICAgICAgICAvLyB3ZSBjcmVhdGUgYW5kIG11c3Qg
aGFuZGxlIGludGVybmFsbHkgd2hlbmV2ZXIgY29tcHV0aW5nIHdpdGggcGl4ZWwKLSAgICAgICAg
Ly8gb2Zmc2V0cy4KLSAgICAgICAgaW50IG1fcHJlUGFkZGluZzsKLQotICAgICAgICAvLyBHbHlw
aCBpbmRpY2VzIGluIHRoZSBmb250IHVzZWQgdG8gZGlzcGxheSB0aGlzIGl0ZW0uIFRoZXNlIGlu
ZGljZXMKLSAgICAgICAgLy8gYXJlIGluIHNjcmVlbiBvcmRlci4KLSAgICAgICAgVmVjdG9yPFdP
UkQsIGNVbmlzY3JpYmVIZWxwZXJTdGFja0NoYXJzPiBtX2dseXBoczsKLQotICAgICAgICAvLyBG
b3IgZWFjaCBpbnB1dCBjaGFyYWN0ZXIsIHRoaXMgdGVsbHMgdXMgdGhlIGZpcnN0IGdseXBoIGlu
ZGV4IGl0Ci0gICAgICAgIC8vIGdlbmVyYXRlZC4gVGhpcyBpcyB0aGUgb25seSBhcnJheSB3aXRo
IHNpemUgb2YgdGhlIGlucHV0IGNoYXJzLgotICAgICAgICAvLwotICAgICAgICAvLyBBbGwgb2Zm
c2V0cyBhcmUgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgcnVuLiBNdWx0aXBsZSBjaGFyYWN0
ZXJzCi0gICAgICAgIC8vIGNhbiBnZW5lcmF0ZSBvbmUgZ2x5cGgsIGluIHdoaWNoIGNhc2UgdGhl
cmUgd2lsbCBiZSBhZGphY2VudAotICAgICAgICAvLyBkdXBsaWNhdGVzIGluIHRoaXMgbGlzdC4g
T25lIGNoYXJhY3RlciBjYW4gYWxzbyBnZW5lcmF0ZSBtdWx0aXBsZQotICAgICAgICAvLyBnbHlw
aHMsIGluIHdoaWNoIGNhc2UgdGhlcmUgd2lsbCBiZSBza2lwcGVkIGluZGljZXMgaW4gdGhpcyBs
aXN0LgotICAgICAgICBWZWN0b3I8V09SRCwgY1VuaXNjcmliZUhlbHBlclN0YWNrQ2hhcnM+IG1f
bG9nczsKLQotICAgICAgICAvLyBGbGFncyBhbmQgc3VjaCBmb3IgZWFjaCBnbHlwaC4KLSAgICAg
ICAgVmVjdG9yPFNDUklQVF9WSVNBVFRSLCBjVW5pc2NyaWJlSGVscGVyU3RhY2tDaGFycz4gbV92
aXN1YWxBdHRyaWJ1dGVzOwotCi0gICAgICAgIC8vIEhvcml6b250YWwgYWR2YW5jZXMgZm9yIGVh
Y2ggZ2x5cGggbGlzdGVkIGFib3ZlLCB0aGlzIGlzIGJhc2ljYWxseQotICAgICAgICAvLyBob3cg
d2lkZSBlYWNoIGdseXBoIGlzLgotICAgICAgICBWZWN0b3I8aW50LCBjVW5pc2NyaWJlSGVscGVy
U3RhY2tDaGFycz4gbV9hZHZhbmNlOwotCi0gICAgICAgIC8vIFRoaXMgY29udGFpbnMgZ2x5cGgg
b2Zmc2V0cywgZnJvbSB0aGUgbm9taW5hbCBwb3NpdGlvbiBvZiBhIGdseXBoLgotICAgICAgICAv
LyBJdCBpcyB1c2VkIHRvIGFkanVzdCB0aGUgcG9zaXRpb25zIG9mIG11bHRpcGxlIGNvbWJpbmlu
ZyBjaGFyYWN0ZXJzCi0gICAgICAgIC8vIGFyb3VuZC9hYm92ZS9iZWxvdyBiYXNlIGNoYXJhY3Rl
cnMgaW4gYSBjb250ZXh0LXNlbnNpdGl2ZSBtYW5uZXIgc28KLSAgICAgICAgLy8gdGhhdCB0aGV5
IGRvbid0IGJ1bXAgYWdhaW5zdCBlYWNoIG90aGVyIGFuZCB0aGUgYmFzZSBjaGFyYWN0ZXIuCi0g
ICAgICAgIFZlY3RvcjxHT0ZGU0VULCBjVW5pc2NyaWJlSGVscGVyU3RhY2tDaGFycz4gbV9vZmZz
ZXRzOwotCi0gICAgICAgIC8vIEZpbGxlZCBieSBhIGNhbGwgdG8gSnVzdGlmeSwgdGhpcyBpcyBl
bXB0eSBmb3Igbm9uanVzdGlmaWVkIHRleHQuCi0gICAgICAgIC8vIElmIG5vbmVtcHR5LCB0aGlz
IGNvbnRhaW5zIHRoZSBhcnJheSBvZiBqdXN0aWZ5IGNoYXJhY3RlcnMgZm9yIGVhY2gKLSAgICAg
ICAgLy8gY2hhcmFjdGVyIGFzIHJldHVybmVkIGJ5IFNjcmlwdEp1c3RpZnkuCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGFkdmFuY2UgYXJyYXksIGJ1dCB3
aXRoIGV4dHJhIHNwYWNlIGFkZGVkCi0gICAgICAgIC8vIGZvciBzb21lIGNoYXJhY3RlcnMuIFRo
ZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBnbHlwaCdzIHxqdXN0aWZ5fAotICAgICAgICAvLyB3aWR0
aCBhbmQgaXQncyB8YWR2YW5jZXwgd2lkdGggaXMgdGhlIGV4dHJhIHNwYWNlIGFkZGVkLgotICAg
ICAgICBWZWN0b3I8aW50LCBjVW5pc2NyaWJlSGVscGVyU3RhY2tDaGFycz4gbV9qdXN0aWZ5Owot
Ci0gICAgICAgIC8vIFNpemluZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBydW4uIFRoaXMgdHJlYXRz
IHRoZSBlbnRpcmUgcnVuIGFzIGEKLSAgICAgICAgLy8gY2hhcmFjdGVyIHdpdGggYSBwcmVjZWVk
aW5nIGFkdmFuY2UsIHdpZHRoLCBhbmQgZW5kaW5nIGFkdmFuY2UuICBUaGUKLSAgICAgICAgLy8g
QiB3aWR0aCBpcyB0aGUgc3VtIG9mIHRoZSB8YWR2YW5jZXwgYXJyYXksIGFuZCB0aGUgQSBhbmQg
QyB3aWR0aHMKLSAgICAgICAgLy8gYXJlIGFueSBleHRyYSBzcGFjaW5nIGFwcGxpZWQgdG8gZWFj
aCBlbmQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEl0IGlzIHVuY2xlYXIgZnJvbSB0aGUgZG9j
dW1lbnRhdGlvbiB3aGF0IHRoaXMgYWN0dWFsbHkgbWVhbnMuIEZyb20KLSAgICAgICAgLy8gZXhw
ZXJpbWVudGF0aW9uLCBpdCBzZWVtcyB0aGF0IHRoZSBzdW0gb2YgdGhlIGNoYXJhY3RlciBhZHZh
bmNlcyBpcwotICAgICAgICAvLyBhbHdheXMgdGhlIHN1bSBvZiB0aGUgQUJDIHZhbHVlcywgYW5k
IEknbSBub3Qgc3VyZSB3aGF0IHlvdSdyZQotICAgICAgICAvLyBzdXBwb3NlZCB0byBkbyB3aXRo
IHRoZSBBQkMgdmFsdWVzLgotICAgICAgICBBQkMgbV9hYmM7Ci0KLSAgICAgICAgLy8gUG9pbnRl
cnMgdG8gd2luZG93cyBmb250IGRhdGEgdXNlZCB0byByZW5kZXIgdGhpcyBydW4uCi0gICAgICAg
IEhGT05UIG1faGZvbnQ7Ci0gICAgICAgIFNDUklQVF9DQUNIRSogbV9zY3JpcHRDYWNoZTsKLQot
ICAgICAgICAvLyBBc2NlbnQgb2Zmc2V0IGJldHdlZW4gdGhlIGFzY2VudCBvZiB0aGUgcHJpbWFy
eSBmb250Ci0gICAgICAgIC8vIGFuZCB0aGF0IG9mIHRoZSBmYWxsYmFjayBmb250LiBUaGUgb2Zm
c2V0IG5lZWRzIHRvIGJlIGFwcGxpZWQsCi0gICAgICAgIC8vIHdoZW4gZHJhd2luZyBhIHN0cmlu
ZywgdG8gYWxpZ24gbXVsdGlwbGUgcnVucyByZW5kZXJlZCB3aXRoCi0gICAgICAgIC8vIGRpZmZl
cmVudCBmb250cy4KLSAgICAgICAgaW50IG1fYXNjZW50T2Zmc2V0OwotCi0gICAgICAgIFdPUkQg
bV9zcGFjZUdseXBoOwotICAgIH07Ci0KLSAgICAvLyBDb21wdXRlcyB0aGUgcnVuc18gYXJyYXkg
ZnJvbSB0aGUgdGV4dCBydW4uCi0gICAgdm9pZCBmaWxsUnVucygpOwotCi0gICAgLy8gQ29tcHV0
ZXMgdGhlIHNoYXBlc18gYXJyYXkgZ2l2ZW4gYW4gcnVuc18gYXJyYXkgYWxyZWFkeSBmaWxsZWQg
aW4uCi0gICAgdm9pZCBmaWxsU2hhcGVzKCk7Ci0KLSAgICAvLyBGaWxscyBpbiB0aGUgc2NyZWVu
X29yZGVyXyBhcnJheSAoc2VlIGJlbG93KS4KLSAgICB2b2lkIGZpbGxTY3JlZW5PcmRlcigpOwot
Ci0gICAgLy8gQ2FsbGVkIHRvIHVwZGF0ZSB0aGUgZ2x5cGggcG9zaXRpb25zIGJhc2VkIG9uIHRo
ZSBjdXJyZW50IHNwYWNpbmcKLSAgICAvLyBvcHRpb25zIHRoYXQgYXJlIHNldC4KLSAgICB2b2lk
IGFwcGx5U3BhY2luZygpOwotCi0gICAgLy8gTm9ybWFsaXplcyBhbGwgYWR2YW5jZXMgZm9yIHNw
YWNlcyB0byB0aGUgc2FtZSB3aWR0aC4gVGhpcyBrZWVwcyB3aW5kb3dzCi0gICAgLy8gZnJvbSBt
YWtpbmcgc3BhY2VzIGFmdGVyIEhpbmRpIGNoYXJhY3RlcnMgbGFyZ2VyLCB3aGljaCBpcyB0aGVu
Ci0gICAgLy8gaW5jb25zaXN0ZW50IHdpdGggb3VyIG1lYXVyZSBvZiB0aGUgd2lkdGggc2luY2Ug
V2ViS2l0IGRvZXNuJ3QgaW5jbHVkZQotICAgIC8vIHNwYWNlcyBpbiB0ZXh0LXJ1bnMgc2VudCB0
byB1bmlzY3JpYmUgdW5sZXNzIHdoaXRlLXNwYWNlOnByZS4KLSAgICB2b2lkIGFkanVzdFNwYWNl
QWR2YW5jZXMoKTsKLQotICAgIC8vIFJldHVybnMgdGhlIHRvdGFsIHdpZHRoIG9mIGEgc2luZ2xl
IGl0ZW0uCi0gICAgaW50IGFkdmFuY2VGb3JJdGVtKGludCkgY29uc3Q7Ci0KLSAgICBib29sIGNv
bnRhaW5zTWlzc2luZ0dseXBocyhjb25zdCBTaGFwaW5nJiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTQ1JJUFRfSVRFTSYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKikgY29uc3Q7Ci0KLSAgICAvLyBTaGFw
ZXMgYSBydW4gKHBvaW50ZWQgdG8gYnkgfGlucHV0fCkgdXNpbmcgfGhmb250fCBmaXJzdC4KLSAg
ICAvLyBUcmllcyBhIHNlcmllcyBvZiBmb250cyBzcGVjaWZpZWQgcmV0cmlldmVkIHdpdGggTmV4
dFdpbkZvbnREYXRhCi0gICAgLy8gYW5kIGZpbmFsbHkgYSBmb250IGNvdmVyaW5nIGNoYXJhY3Rl
cnMgaW4gfCppbnB1dHwuIEEgc3RyaW5nIHBvaW50ZWQKLSAgICAvLyBieSB8aW5wdXR8IGNvbWVz
IGZyb20gU2NyaXB0SXRlbWl6ZSBhbmQgaXMgc3VwcG9zZWQgdG8gY29udGFpbgotICAgIC8vIGNo
YXJhY3RlcnMgYmVsb25naW5nIHRvIGEgc2luZ2xlIHNjcmlwdCBhc2lkZSBmcm9tIGNoYXJhY3Rl
cnMgY29tbW9uIHRvCi0gICAgLy8gYWxsIHNjcmlwdHMgKGUuZy4gc3BhY2UpLgotICAgIGJvb2wg
c2hhcGUoY29uc3QgVUNoYXIqIGlucHV0LCBpbnQgaXRlbUxlbmd0aCwgaW50IG51bUdseXBocywg
U0NSSVBUX0lURU0mIHJ1biwgT1BFTlRZUEVfVEFHLCBTaGFwaW5nJik7Ci0KLSAgICAvLyBHZXRz
IFdpbmRvd3MgZm9udCBkYXRhIGZvciB0aGUgbmV4dCBiZXN0IGZvbnQgdG8gdHJ5IGluIHRoZSBs
aXN0Ci0gICAgLy8gb2YgZm9udHMuIFdoZW4gdGhlcmUncyBubyBtb3JlIGZvbnQgYXZhaWxhYmxl
LCByZXR1cm5zIGZhbHNlCi0gICAgLy8gd2l0aG91dCB0b3VjaGluZyBhbnkgb2Ygb3V0IHBhcmFt
cy4gTmVlZCB0byBjYWxsIFJlc2V0Rm9udEluZGV4Ci0gICAgLy8gdG8gc3RhcnQgc2Nhbm5pbmcg
b2YgdGhlIGZvbnQgbGlzdCBmcm9tIHRoZSBiZWdpbm5pbmcuCi0gICAgdmlydHVhbCBib29sIG5l
eHRXaW5Gb250RGF0YShIRk9OVCosIFNDUklQVF9DQUNIRSoqLCBTQ1JJUFRfRk9OVFBST1BFUlRJ
RVMqKiwgaW50KiBhc2NlbnQpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgLy8gUmVzZXRzIHRoZSBmb250IGluZGV4IHRvIHRoZSBmaXJzdCBpbiB0aGUgbGlzdCBv
ZiBmb250cyB0byB0cnkgYWZ0ZXIgdGhlCi0gICAgLy8gcHJpbWFyeUZvbnQgdHVybnMgb3V0IG5v
dCB0byB3b3JrLiBXaXRoIGZvbnRJbmRleCByZXNldCwKLSAgICAvLyBOZXh0V2luRm9udERhdGEg
c2NhbnMgZmFsbGJhY2sgZm9udHMgZnJvbSB0aGUgYmVnaW5uaW5nLgotICAgIHZpcnR1YWwgdm9p
ZCByZXNldEZvbnRJbmRleCgpIHt9Ci0KLSAgICAvLyBJZiBtX2NhY2hlZERDIGlzIDAsIGNyZWF0
ZXMgb25lIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBzY3JlZW4gREMuCi0gICAgdm9pZCBF
bnN1cmVDYWNoZWREQ0NyZWF0ZWQoKTsKLQotICAgIC8vIFRoZSBpbnB1dCBkYXRhIGZvciB0aGlz
IHJ1biBvZiBVbmlzY3JpYmUuIFNlZSB0aGUgY29uc3RydWN0b3IuCi0gICAgY29uc3QgVUNoYXIq
IG1faW5wdXQ7Ci0gICAgY29uc3QgaW50IG1faW5wdXRMZW5ndGg7Ci0gICAgY29uc3QgYm9vbCBt
X2lzUnRsOwotCi0gICAgLy8gV2luZG93cyBmb250IGRhdGEgZm9yIHRoZSBwcmltYXJ5IGZvbnQu
IEluIGEgc2Vuc2UsIG1fbG9nZm9udCBhbmQgbV9zdHlsZQotICAgIC8vIGFyZSByZWR1bmRhbnQg
YmVjYXVzZSBtX2hmb250IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24uIEhvd2V2ZXIsCi0g
ICAgLy8gaW52b2tpbmcgR2V0T2JqZWN0LCBldmVyeXRpbWUgd2UgbmVlZCB0aGUgaGVpZ2h0IGFu
ZCB0aGUgc3R5bGUsIGlzIHJhdGhlcgotICAgIC8vIGV4cGVuc2l2ZSBzbyB0aGF0IHdlIGNhY2hl
IHRoZW0uIFdvdWxkIGl0IGJlIGJldHRlciB0byBhZGQgZ2V0dGVyIGFuZAotICAgIC8vICh2aXJ0
dWFsKSBzZXR0ZXIgZm9yIHRoZSBoZWlnaHQgYW5kIHRoZSBzdHlsZSBvZiB0aGUgcHJpbWFyeSBm
b250LAotICAgIC8vIGluc3RlYWQgb2YgbV9sb2dmb250PyBUaGVuLCBhIGRlcml2ZWQgY2xhc3Mg
Y3RvciBjYW4gc2V0IG1fYXNjZW50LAotICAgIC8vIG1faGVpZ2h0IGFuZCBtX3N0eWxlIGlmIHRo
ZXkncmUga25vd24uIEdldHRlcnMgZm9yIHRoZW0gd291bGQgaGF2ZSB0bwotICAgIC8vICdpbmZl
cicgdGhlaXIgdmFsdWVzIGZyb20gbV9oZm9udCBPTkxZIHdoZW4gdGhleSdyZSBub3Qgc2V0Lgot
ICAgIEhGT05UIG1faGZvbnQ7Ci0gICAgLy8gV2UgY2FjaGUgdGhlIERDIHRvIHVzZSB3aXRoIFNj
cmlwdFNoYXBlL1NjcmlwdFBsYWNlLgotICAgIHN0YXRpYyBIREMgbV9jYWNoZWREQzsKLSAgICBT
Q1JJUFRfQ0FDSEUqIG1fc2NyaXB0Q2FjaGU7Ci0gICAgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBt
X2ZvbnRQcm9wZXJ0aWVzOwotICAgIGludCBtX2FzY2VudDsKLSAgICBMT0dGT05UIG1fbG9nZm9u
dDsKLSAgICBpbnQgbV9zdHlsZTsKLSAgICBXT1JEIG1fc3BhY2VHbHlwaDsKLQotICAgIC8vIE9w
dGlvbnMsIHNlZSB0aGUgZ2V0dGVycy9zZXR0ZXJzIGFib3ZlLgotICAgIGJvb2wgbV9kaXJlY3Rp
b25hbE92ZXJyaWRlOwotICAgIGJvb2wgbV9pbmhpYml0TGlnYXRlOwotICAgIGludCBtX2xldHRl
clNwYWNpbmc7Ci0gICAgaW50IG1fc3BhY2VXaWR0aDsKLSAgICBpbnQgbV93b3JkU3BhY2luZzsK
LSAgICBib29sIG1fZGlzYWJsZUZvbnRGYWxsYmFjazsKLQotICAgIC8vIFVuaXNjcmliZSBicmVh
a3MgdGhlIHRleHQgaW50byBSdW5zLiBUaGVzZSBhcmUgb25lIGxlbmd0aCBvZiB0ZXh0IHRoYXQg
aXMKLSAgICAvLyBpbiBvbmUgc2NyaXB0IGFuZCBvbmUgZGlyZWN0aW9uLiBUaGlzIGFycmF5IGlz
IGluIHJlYWRpbmcgb3JkZXIuCi0gICAgVmVjdG9yPFNDUklQVF9JVEVNLCBjVW5pc2NyaWJlSGVs
cGVyU3RhY2tSdW5zPiBtX3J1bnM7Ci0KLSAgICBWZWN0b3I8U2hhcGluZywgY1VuaXNjcmliZUhl
bHBlclN0YWNrUnVucz4gbV9zaGFwZXM7Ci0gICAgVmVjdG9yPE9QRU5UWVBFX1RBRywgY1VuaXNj
cmliZUhlbHBlclN0YWNrUnVucz4gbV9zY3JpcHRUYWdzOwotCi0gICAgLy8gVGhpcyBpcyBhIG1h
cHBpbmcgYmV0d2VlbiByZWFkaW5nIG9yZGVyIGFuZCBzY3JlZW4gb3JkZXIgZm9yIHRoZSBpdGVt
cy4KLSAgICAvLyBVbmlzY3JpYmUncyBpdGVtcyBhcnJheSBhcmUgaW4gcmVhZGluZyBvcmRlci4g
Rm9yIHJpZ2h0LXRvLWxlZnQgdGV4dCwKLSAgICAvLyBvciBtaXhlZCAoYWx0aG91Z2ggV2ViS2l0
J3MgfFRleHRSdW58IHNob3VsZCByZWFsbHkgYmUgb25seSBvbmUKLSAgICAvLyBkaXJlY3Rpb24p
LCB0aGlzIG1ha2VzIGl0IHZlcnkgZGlmZmljdWx0IHRvIGNvbXB1dGUgY2hhcmFjdGVyIG9mZnNl
dHMKLSAgICAvLyBhbmQgcG9zaXRpb25zLiBUaGlzIGxpc3QgaXMgaW4gc2NyZWVuIG9yZGVyIGZy
b20gbGVmdCB0byByaWdodCwgYW5kCi0gICAgLy8gZ2l2ZXMgdGhlIGluZGV4IGludG8gdGhlIHxt
X3J1bnN8IGFuZCB8bV9zaGFwZXN8IGFycmF5cyBvZiBlYWNoCi0gICAgLy8gc3Vic2VxdWVudCBp
dGVtLgotICAgIFZlY3RvcjxpbnQsIGNVbmlzY3JpYmVIZWxwZXJTdGFja1J1bnM+IG1fc2NyZWVu
T3JkZXI7Ci0KLSAgICAvLyBUaGlzIGNvbnRhaW5zIFVuaXNjcmliZSdzIE9wZW5UeXBlIGZlYXR1
cmUgc2V0dGluZ3MuIFRoaXMgc3RydWN0dXJlCi0gICAgLy8gaXMgZmlsbGVkIGJ5IHVzaW5nIFdl
YktpdCdzIHxGb250RmVhdHVyZVNldHRpbmdzfC4KLSAgICBURVhUUkFOR0VfUFJPUEVSVElFUyBt
X3JhbmdlUHJvcGVydGllczsKLSAgICBWZWN0b3I8T1BFTlRZUEVfRkVBVFVSRV9SRUNPUkQsIGNV
bmlzY3JpYmVIZWxwZXJGZWF0dXJlcz4gbV9mZWF0dXJlUmVjb3JkczsKLX07Ci0KLX0gIC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAgLy8gVW5pc2NyaWJlSGVscGVyX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRl
eHRSdW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4uY3BwCShyZXZpc2lvbiAxNDc3MzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxw
ZXJUZXh0UnVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
IAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJlSGVscGVy
VGV4dFJ1bi5oIgotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURh
dGFDaHJvbWl1bVdpbi5oIgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSAi
VGV4dFJ1bi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVVuaXNjcmliZUhlbHBlclRleHRS
dW46OlVuaXNjcmliZUhlbHBlclRleHRSdW4oY29uc3QgVGV4dFJ1biYgcnVuLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb250JiBmb250KQot
ICAgIDogVW5pc2NyaWJlSGVscGVyKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpLCBy
dW4ucnRsKCksCi0gICAgICAgICAgICAgICAgICAgICAgZm9udC5wcmltYXJ5Rm9udCgpLT5wbGF0
Zm9ybURhdGEoKS5oZm9udCgpLAotICAgICAgICAgICAgICAgICAgICAgIGZvbnQucHJpbWFyeUZv
bnQoKS0+cGxhdGZvcm1EYXRhKCkuc2NyaXB0Q2FjaGUoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICBmb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLnNjcmlwdEZvbnRQcm9wZXJ0aWVz
KCksCi0gICAgICAgICAgICAgICAgICAgICAgZm9udC5wcmltYXJ5Rm9udCgpLT5zcGFjZUdseXBo
KCkpCi0gICAgLCBtX2ZvbnQoJmZvbnQpCi0gICAgLCBtX2ZvbnRJbmRleCgwKQotewotICAgIHNl
dERpcmVjdGlvbmFsT3ZlcnJpZGUocnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSk7Ci0gICAgc2V0
TGV0dGVyU3BhY2luZyhmb250LmxldHRlclNwYWNpbmcoKSk7Ci0gICAgc2V0U3BhY2VXaWR0aChm
b250LnNwYWNlV2lkdGgoKSk7Ci0gICAgc2V0V29yZFNwYWNpbmcoZm9udC53b3JkU3BhY2luZygp
KTsKLSAgICBzZXRBc2NlbnQoZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKTsKLSAgICBzZXRS
YW5nZVByb3BlcnRpZXMoZm9udC5mb250RGVzY3JpcHRpb24oKS5mZWF0dXJlU2V0dGluZ3MoKSk7
Ci0KLSAgICBpbml0KCk7Ci0KLSAgICAvLyBFeHBhbnNpb24gaXMgdGhlIGFtb3VudCB0byBhZGQg
dG8gbWFrZSBqdXN0aWZpY2F0aW9uIGhhcHBlbi4gVGhpcwotICAgIC8vIHNob3VsZCBiZSBkb25l
IGFmdGVyIEluaXQoKSBzbyBhbGwgdGhlIHJ1bnMgYXJlIGFscmVhZHkgbWVhc3VyZWQuCi0gICAg
aWYgKHJ1bi5leHBhbnNpb24oKSA+IDApCi0gICAgICAgIGp1c3RpZnkocnVuLmV4cGFuc2lvbigp
KTsKLX0KLQotVW5pc2NyaWJlSGVscGVyVGV4dFJ1bjo6VW5pc2NyaWJlSGVscGVyVGV4dFJ1bigK
LSAgICBjb25zdCB3Y2hhcl90KiBpbnB1dCwKLSAgICBpbnQgaW5wdXRMZW5ndGgsCi0gICAgYm9v
bCBpc1J0bCwKLSAgICBIRk9OVCBoZm9udCwKLSAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hl
LAotICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogZm9udFByb3BlcnRpZXMpCi0gICAgOiBVbmlz
Y3JpYmVIZWxwZXIoaW5wdXQsIGlucHV0TGVuZ3RoLCBpc1J0bCwgaGZvbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgc2NyaXB0Q2FjaGUsIGZvbnRQcm9wZXJ0aWVzLCAwKQotICAgICwgbV9mb250
KDApCi0gICAgLCBtX2ZvbnRJbmRleCgtMSkKLXsKLX0KLQotdm9pZCBVbmlzY3JpYmVIZWxwZXJU
ZXh0UnVuOjp0cnlUb1ByZWxvYWRGb250KEhGT05UIGZvbnQpCi17Ci0gICAgLy8gQXNrIHRoZSBi
cm93c2VyIHRvIGdldCB0aGUgZm9udCBtZXRyaWNzIGZvciB0aGlzIGZvbnQuCi0gICAgLy8gVGhh
dCB3aWxsIHByZWxvYWQgdGhlIGZvbnQgYW5kIGl0IHNob3VsZCBub3cgYmUgYWNjZXNzaWJsZQot
ICAgIC8vIGZyb20gdGhlIHJlbmRlcmVyLgotICAgIEZvbnRQbGF0Zm9ybURhdGE6OmVuc3VyZUZv
bnRMb2FkZWQoZm9udCk7Ci19Ci0KLWJvb2wgVW5pc2NyaWJlSGVscGVyVGV4dFJ1bjo6bmV4dFdp
bkZvbnREYXRhKAotICAgIEhGT05UKiBoZm9udCwKLSAgICBTQ1JJUFRfQ0FDSEUqKiBzY3JpcHRD
YWNoZSwKLSAgICBTQ1JJUFRfRk9OVFBST1BFUlRJRVMqKiBmb250UHJvcGVydGllcywKLSAgICBp
bnQqIGFzY2VudCkKLXsKLSAgICAvLyBUaGlzIGNoZWNrIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIE5l
eHRXaW5Gb250RGF0YSBjYW4gYmUgY2FsbGVkIGFnYWluCi0gICAgLy8gYWZ0ZXIgd2UgYWxyZWFk
eSByYW4gb3V0IG9mIGZvbnRzLiBmb250RGF0YUF0IGJlaGF2ZXMgaW4gYSBzdHJhbmdlCi0gICAg
Ly8gbWFubmVyIHdoZW4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBwYXJhbSBwYXNzZWQgYW5kICMg
b2YgZm9udHMgc3RvcmVkIGluCi0gICAgLy8gV2ViS2l0OjpGb250IGlzIGxhcmdlciB0aGFuIG9u
ZS4gV2UgY2FuIGF2b2lkIHRoaXMgY2hlY2sgYnkgc2V0dGluZwotICAgIC8vIGZvbnRfaW5kZXhf
IHRvICMgb2YgZWxlbWVudHMgaW4gaGZvbnRzXyB3aGVuIHdlIHJ1biBvdXQgb2YgZm9udC4gSW4g
dGhhdAotICAgIC8vIGNhc2UsIHdlJ2QgaGF2ZSB0byBnbyB0aHJvdWdoIGEgY291cGxlIG9mIG1v
cmUgY2hlY2tzIGJlZm9yZSByZXR1cm5pbmcKLSAgICAvLyBmYWxzZS4KLSAgICBpZiAobV9mb250
SW5kZXggPT0gLTEgfHwgIW1fZm9udCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
SWYgdGhlIGZvbnQgZGF0YSBmb3IgYSBmYWxsYmFjayBmb250IHJlcXVlc3RlZCBpcyBub3QgeWV0
IHJldHJpZXZlZCwgYWRkCi0gICAgLy8gdGhlbSB0byBvdXIgdmVjdG9ycy4gTm90ZSB0aGF0ICc+
JyByYXRoZXIgdGhhbiAnPj0nIGlzIHVzZWQgdG8gdGVzdCB0aGF0Ci0gICAgLy8gY29uZGl0aW9u
LiBwcmltYXJ5Rm9udCBpcyBub3Qgc3RvcmVkIGluIGhmb250c18sIGFuZCBmcmllbmRzIHNvIHRo
YXQKLSAgICAvLyBpbmRpY2VzIGZvciBmb250RGF0YUF0IGFuZCBvdXIgdmVjdG9ycyBmb3IgZm9u
dCBkYXRhIGFyZSAxIG9mZiBmcm9tIGVhY2gKLSAgICAvLyBvdGhlci4gIFRoYXQgaXMsIHdoZW4g
ZnVsbHkgcG9wdWxhdGVkLCBoZm9udHNfIGFuZCBmcmllbmRzIGhhdmUgb25lIGZvbnQKLSAgICAv
LyBmZXdlciB0aGFuIHdoYXQncyBjb250YWluZWQgaW4gZm9udF8uCi0gICAgaWYgKHN0YXRpY19j
YXN0PHNpemVfdD4oKyttX2ZvbnRJbmRleCkgPiBtX2hmb250cy5zaXplKCkpIHsKLSAgICAgICAg
Y29uc3QgRm9udERhdGEgKmZvbnREYXRhID0gbV9mb250LT5mb250RGF0YUF0KG1fZm9udEluZGV4
KTsKLSAgICAgICAgaWYgKCFmb250RGF0YSkgewotICAgICAgICAgICAgLy8gUmFuIG91dCBvZiBm
b250cy4KLSAgICAgICAgICAgIG1fZm9udEluZGV4ID0gLTE7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGSVhNRTogdGhpcyB3b24ndCB3b3JrIGZv
ciBTZWdtZW50ZWRGb250RGF0YQotICAgICAgICAvLyBodHRwOi8vY3JidWcuY29tLzY0MjUKLSAg
ICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHNpbXBsZUZvbnREYXRhID0KLSAgICAgICAgICAg
IGZvbnREYXRhLT5mb250RGF0YUZvckNoYXJhY3RlcignICcpOwotCi0gICAgICAgIG1faGZvbnRz
LmFwcGVuZChzaW1wbGVGb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSk7Ci0gICAgICAg
IG1fc2NyaXB0Q2FjaGVzLmFwcGVuZChzaW1wbGVGb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuc2Ny
aXB0Q2FjaGUoKSk7Ci0gICAgICAgIG1fZm9udFByb3BlcnRpZXMuYXBwZW5kKHNpbXBsZUZvbnRE
YXRhLT5wbGF0Zm9ybURhdGEoKS5zY3JpcHRGb250UHJvcGVydGllcygpKTsKLSAgICAgICAgbV9h
c2NlbnRzLmFwcGVuZChzaW1wbGVGb250RGF0YS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7Ci0g
ICAgfQotCi0gICAgKmhmb250ID0gbV9oZm9udHNbbV9mb250SW5kZXggLSAxXTsKLSAgICAqc2Ny
aXB0Q2FjaGUgPSBtX3NjcmlwdENhY2hlc1ttX2ZvbnRJbmRleCAtIDFdOwotICAgICpmb250UHJv
cGVydGllcyA9IG1fZm9udFByb3BlcnRpZXNbbV9mb250SW5kZXggLSAxXTsKLSAgICAqYXNjZW50
ID0gbV9hc2NlbnRzW21fZm9udEluZGV4IC0gMV07Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgVW5pc2NyaWJlSGVscGVyVGV4dFJ1bjo6cmVzZXRGb250SW5kZXgoKQotewotICAgIG1fZm9u
dEluZGV4ID0gMDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9VbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmgJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgVW5pc2NyaWJlSGVscGVyVGV4dFJ1bl9oCi0jZGVmaW5lIFVuaXNjcmliZUhlbHBlclRl
eHRSdW5faAotCi0jaW5jbHVkZSAiVW5pc2NyaWJlSGVscGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgRm9udDsKLWNsYXNzIFRleHRSdW47Ci0KLS8vIFdyYXBwZXIgYXJvdW5k
IHRoZSBVbmlzY3JpYmUgaGVscGVyIHRoYXQgYXV0b21hdGljYWxseSBzZXRzIGl0IHVwIHdpdGgg
dGhlCi0vLyBXZWJLaXQgdHlwZXMgd2Ugc3VwcGx5LgotY2xhc3MgVW5pc2NyaWJlSGVscGVyVGV4
dFJ1biA6IHB1YmxpYyBVbmlzY3JpYmVIZWxwZXIgewotcHVibGljOgotICAgIC8vIFJlZ3VsYXIg
Y29uc3RydWN0b3IgdXNlZCBmb3IgV2ViQ29yZSB0ZXh0IHJ1biBwcm9jZXNzaW5nLgotICAgIFVu
aXNjcmliZUhlbHBlclRleHRSdW4oY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZvbnQmKTsKLQotICAg
IC8vIENvbnN0cnVjdG9yIHdpdGggdGhlIHNhbWUgaW50ZXJmYWNlIGFzIHRoZSBnZng6OlVuaXNj
cmliZVN0YXRlLiBVc2luZwotICAgIC8vIHRoaXMgY29uc3RydWN0b3Igd2lsbCBub3QgZ2l2ZSB5
b3UgZm9udCBmYWxsYmFjaywgYnV0IGl0IHdpbGwgcHJvdmlkZQotICAgIC8vIHRoZSBhYmlsaXR5
IHRvIGxvYWQgZm9udHMgdGhhdCBtYXkgbm90IGJlIGluIHRoZSBPUyBjYWNoZQotICAgIC8vICgi
VHJ5VG9QcmVsb2FkRm9udCIpIGlmIHRoZSBjYWxsZXIgZG9lcyBub3QgaGF2ZSBhIFRleHRSdW4v
Rm9udC4KLSAgICBVbmlzY3JpYmVIZWxwZXJUZXh0UnVuKGNvbnN0IHdjaGFyX3QqIGlucHV0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0TGVuZ3RoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpc1J0bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEhG
T05UIGhmb250LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSSVBUX0NBQ0hFKiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyopOwotCi1wcm90
ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHRyeVRvUHJlbG9hZEZvbnQoSEZPTlQpOwotCi1wcml2
YXRlOgotICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBXaW5kb3dzIGZvbnQgZGF0
YSAoSEZPTlQsIGV0YykgZm9yIHRoZSBuZXh0Ci0gICAgLy8gV2ViS2l0IGZvbnQgaW4gdGhlIGxp
c3QuIElmIHRoZSBmb250IGRhdGEgY29ycmVzcG9uZGluZyB0byBmb250X2luZGV4XwotICAgIC8v
IGhhcyBiZWVuIG9idGFpbmVkIGJlZm9yZSwgcmV0dXJucyB0aGUgdmFsdWVzIHN0b3JlZCBpbiBv
dXIgaW50ZXJuYWwKLSAgICAvLyB2ZWN0b3JzIChoZm9udHNfLCBldGMpLiAgT3RoZXJ3aXNlLCBp
dCBnZXRzIG5leHQgU2ltcGxlRm9udERhdGEgZnJvbQotICAgIC8vIFdlYktpdCBhbmQgYWRkcyB0
aGVtIHRvIGluIGhmb250c18gYW5kIGZyaWVuZHMgc28gdGhhdCBmb250IGRhdGEgY2FuIGJlCi0g
ICAgLy8gcmV0dXJuZWQgcXVpY2tseSBuZXh0IHRpbWUgdGhleSdyZSByZXF1ZXN0ZWQuCi0gICAg
dmlydHVhbCBib29sIG5leHRXaW5Gb250RGF0YShIRk9OVCosIFNDUklQVF9DQUNIRSoqLCBTQ1JJ
UFRfRk9OVFBST1BFUlRJRVMqKiwgaW50KiBhc2NlbnQpOwotICAgIHZpcnR1YWwgdm9pZCByZXNl
dEZvbnRJbmRleCgpOwotCi0gICAgLy8gUmVmZXJlbmNlIHRvIFdlYktpdDo6Rm9udCB0aGF0IGNv
bnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgZm9udHMKLSAgICAvLyB3ZSBjYW4gdXNl
IHRvIHJlbmRlciB0aGlzIGlucHV0IHJ1biBvZiB0ZXh0LiAgSXQgaXMgdXNlZCBpbgotICAgIC8v
IE5leHRXaW5Gb250RGF0YSB0byByZXRyaWV2ZSBXaW5kb3dzIGZvbnQgZGF0YSBmb3IgYSBzZXJp
ZXMgb2YKLSAgICAvLyBub24tcHJpbWFyeSBmb250cy4KLSAgICAvLwotICAgIC8vIFRoaXMgcG9p
bnRlciBjYW4gYmUgTlVMTCBmb3Igbm8gZm9udCBmYWxsYmFjayBoYW5kbGluZy4KLSAgICBjb25z
dCBGb250KiBtX2ZvbnQ7Ci0KLSAgICAvLyBJdCdzIHJhcmUgdGhhdCBtYW55IGZvbnRzIGFyZSBs
aXN0ZWQgaW4gc3R5bGVzaGVldHMuCi0gICAgLy8gRm91ciB3b3VsZCBiZSBsYXJnZSBlbm91Z2gg
aW4gbW9zdCBjYXNlcy4KLSAgICBjb25zdCBzdGF0aWMgc2l6ZV90IGtOdW1iZXJPZkZvbnRzID0g
NDsKLQotICAgIC8vIFRoZXNlIHZlY3RvcnMgYXJlIHVzZWQgdG8gc3RvcmUgV2luZG93cyBmb250
IGRhdGEgZm9yIG5vbi1wcmltYXJ5IGZvbnRzLgotICAgIFZlY3RvcjxIRk9OVCwga051bWJlck9m
Rm9udHM+IG1faGZvbnRzOwotICAgIFZlY3RvcjxTQ1JJUFRfQ0FDSEUqLCBrTnVtYmVyT2ZGb250
cz4gbV9zY3JpcHRDYWNoZXM7Ci0gICAgVmVjdG9yPFNDUklQVF9GT05UUFJPUEVSVElFUyosIGtO
dW1iZXJPZkZvbnRzPiBtX2ZvbnRQcm9wZXJ0aWVzOwotICAgIFZlY3RvcjxpbnQsIGtOdW1iZXJP
ZkZvbnRzPiBtX2FzY2VudHM7Ci0KLSAgICAvLyBJbmRleCBvZiB0aGUgZmFsbGJhY2sgZm9udCB3
ZSdyZSBjdXJyZW50bHkgdXNpbmcgZm9yIE5leHRXaW5Gb250RGF0YS4KLSAgICBpbnQgbV9mb250
SW5kZXg7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgIC8vIFVuaXNj
cmliZUhlbHBlclRleHRSdW5faApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVkRNWFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVkRNWFBhcnNlci5jcHAJKHJldmlzaW9uIDE0Nzcz
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZETVhQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxz
dGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lu
Y2x1ZGUgPHd0Zi9CeXRlT3JkZXIuaD4KLQotLy8gQnVmZmVyIGhlbHBlciBjbGFzcwotLy8KLS8v
IFRoaXMgY2xhc3MgcGVyZm9ybSBzb21lIHRyaXZhbCBidWZmZXIgb3BlcmF0aW9ucyB3aGlsZSBj
aGVja2luZyBmb3IKLS8vIG91dC1vZi1ib3VuZHMgZXJyb3JzLiBBcyBhIGZhbWlseSB0aGV5IHJl
dHVybiBmYWxzZSBpZiBhbnl0aGluZyBpcyBhbWlzcywKLS8vIHVwZGF0aW5nIHRoZSBjdXJyZW50
IG9mZnNldCBvdGhlcndpc2UuCi1jbGFzcyBCdWZmZXIgewotcHVibGljOgotICAgIEJ1ZmZlcihj
b25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBsZW5ndGgpCi0gICAgICAgIDogbV9idWZmZXIo
YnVmZmVyKQotICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICAgICAgLCBtX29mZnNldCgw
KSB7IH0KLQotICAgIGJvb2wgc2tpcChzaXplX3QgbnVtQnl0ZXMpCi0gICAgewotICAgICAgICBp
ZiAobV9vZmZzZXQgKyBudW1CeXRlcyA+IG1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBtX29mZnNldCArPSBudW1CeXRlczsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgYm9vbCByZWFkVTgodWludDhfdCogdmFsdWUpCi0gICAgewotICAgICAg
ICBpZiAobV9vZmZzZXQgKyBzaXplb2YodWludDhfdCkgPiBtX2xlbmd0aCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgKnZhbHVlID0gbV9idWZmZXJbbV9vZmZzZXRdOwotICAg
ICAgICBtX29mZnNldCArPSBzaXplb2YodWludDhfdCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGJvb2wgcmVhZFUxNih1aW50MTZfdCogdmFsdWUpCi0gICAgewotICAgICAg
ICBpZiAobV9vZmZzZXQgKyBzaXplb2YodWludDE2X3QpID4gbV9sZW5ndGgpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1lbWNweSh2YWx1ZSwgbV9idWZmZXIgKyBtX29mZnNl
dCwgc2l6ZW9mKHVpbnQxNl90KSk7Ci0gICAgICAgICp2YWx1ZSA9IG50b2hzKCp2YWx1ZSk7Ci0g
ICAgICAgIG1fb2Zmc2V0ICs9IHNpemVvZih1aW50MTZfdCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIGJvb2wgcmVhZFMxNihpbnQxNl90KiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiByZWFkVTE2KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPih2YWx1ZSkpOwot
ICAgIH0KLQotICAgIHNpemVfdCBvZmZzZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fb2Zmc2V0OwotICAgIH0KLQotICAgIHZvaWQgc2V0T2Zmc2V0KHNpemVfdCBuZXdvZmZzZXQp
Ci0gICAgewotICAgICAgICBtX29mZnNldCA9IG5ld29mZnNldDsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgY29uc3QgdWludDhfdCAqY29uc3QgbV9idWZmZXI7Ci0gICAgY29uc3Qgc2l6ZV90IG1f
bGVuZ3RoOwotICAgIHNpemVfdCBtX29mZnNldDsKLX07Ci0KLS8vIFZETVggcGFyc2luZyBjb2Rl
LgotLy8KLS8vIFZETVggdGFibGVzIGFyZSBmb3VuZCBpbiBzb21lIFRydWVUeXBlL09wZW5UeXBl
IGZvbnRzIGFuZCBjb250YWluCi0vLyBhc2NlbmRlci9kZXNjZW5kZXIgb3ZlcnJpZGVzIGZvciBj
ZXJ0YWluICh1c3VhbGx5IHNtYWxsKSBzaXplcy4gVGhpcyBpcwotLy8gbmVlZGVkIGluIG9yZGVy
IHRvIG1hdGNoIGZvbnQgbWV0cmljcyBvbiBXaW5kb3dzLgotLy8KLS8vIEZyZWV0eXBlIGRvZXMg
bm90IHBhcnNlIHRoZXNlIHRhYmxlcyBzbyB3ZSBkbyBzbyBoZXJlLgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLS8vIFBhcnNlIGEgVHJ1ZVR5cGUgVkRNWCB0YWJsZS4KLS8vICAgeU1heDogKG91
dHB1dCkgdGhlIGFzY2VuZGVyIHZhbHVlIGZyb20gdGhlIHRhYmxlCi0vLyAgIHlNaW46IChvdXRw
dXQpIHRoZSBkZXNjZW5kZXIgdmFsdWUgZnJvbSB0aGUgdGFibGUgKG5lZ2F0aXZlISkKLS8vICAg
dmRteDogdGhlIHRhYmxlIGJ5dGVzCi0vLyAgIHZkbXhMZW5ndGg6IGxlbmd0aCBvZiBAdmRteCwg
aW4gYnl0ZXMKLS8vICAgdGFyZ2V0UGl4ZWxTaXplOiB0aGUgcGl4ZWwgc2l6ZSBvZiB0aGUgZm9u
dCAoZS5nLiAxNikKLS8vCi0vLyBSZXR1cm5zIHRydWUgaWZmIGEgc3VpdGFibGUgbWF0Y2ggYXJl
IGZvdW5kLiBPdGhlcndpc2UsICp5TWF4IGFuZCAqeU1pbiBhcmUKLS8vIHVudG91Y2hlZC4gc2l6
ZV90IG11c3QgYmUgMzItYml0cyB0byBhdm9pZCBvdmVyZmxvdy4KLS8vCi0vLyBTZWUgaHR0cDov
L3d3dy5taWNyb3NvZnQuY29tL29wZW50eXBlL290c3BlYy92ZG14Lmh0bQotYm9vbCBwYXJzZVZE
TVgoaW50KiB5TWF4LCBpbnQqIHlNaW4sCi0gICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB2
ZG14LCBzaXplX3QgdmRteExlbmd0aCwKLSAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldFBp
eGVsU2l6ZSkKLXsKLSAgICBCdWZmZXIgYnVmKHZkbXgsIHZkbXhMZW5ndGgpOwotCi0gICAgLy8g
V2UgaWdub3JlIHRoZSB2ZXJzaW9uLiBGdXR1cmUgdGFibGVzIHNob3VsZCBiZSBiYWNrd2FyZHMg
Y29tcGF0aWJsZSB3aXRoCi0gICAgLy8gdGhpcyBsYXlvdXQuCi0gICAgdWludDE2X3QgbnVtUmF0
aW9zOwotICAgIGlmICghYnVmLnNraXAoNCkgfHwgIWJ1Zi5yZWFkVTE2KCZudW1SYXRpb3MpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBOb3cgd2UgaGF2ZSB0d28gdGFibGVzLiBG
aXJzdGx5IHdlIGhhdmUgQG51bVJhdGlvcyBSYXRpbyByZWNvcmRzLCB0aGVuIGEKLSAgICAvLyBt
YXRjaGluZyBhcnJheSBvZiBAbnVtUmF0aW9zIG9mZnNldHMuIFdlIHNhdmUgdGhlIG9mZnNldCBv
ZiB0aGUgYmVnaW5uaW5nCi0gICAgLy8gb2YgdGhpcyBzZWNvbmQgdGFibGUuCi0gICAgLy8KLSAg
ICAvLyBSYW5nZSA2IDw9IHggPD0gMjYyMTQ2Ci0gICAgdW5zaWduZWQgbG9uZyBvZmZzZXRUYWJs
ZU9mZnNldCA9Ci0gICAgICAgIGJ1Zi5vZmZzZXQoKSArIDQgLyogc2l6ZW9mIHN0cnVjdCByYXRp
byAqLyAqIG51bVJhdGlvczsKLQotICAgIHVuc2lnbmVkIGRlc2lyZWRSYXRpbyA9IDB4ZmZmZmZm
ZmY7Ci0gICAgLy8gV2UgcmVhZCA0IGJ5dGVzIHBlciByZWNvcmQsIHNvIHRoZSBvZmZzZXQgcmFu
Z2UgaXMKLSAgICAvLyAgIDYgPD0geCA8PSA1MjQyODYKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtUmF0aW9zOyArK2kpIHsKLSAgICAgICAgdWludDhfdCB4UmF0aW8sIHlSYXRpbzEs
IHlSYXRpbzI7Ci0KLSAgICAgICAgaWYgKCFidWYuc2tpcCgxKQotICAgICAgICAgICAgfHwgIWJ1
Zi5yZWFkVTgoJnhSYXRpbykKLSAgICAgICAgICAgIHx8ICFidWYucmVhZFU4KCZ5UmF0aW8xKQot
ICAgICAgICAgICAgfHwgIWJ1Zi5yZWFkVTgoJnlSYXRpbzIpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIC8vIFRoaXMgZWl0aGVyIGNvdmVycyAxOjEsIG9yIHRoaXMgaXMg
dGhlIGRlZmF1bHQgZW50cnkgKDAsIDAsIDApCi0gICAgICAgIGlmICgoeFJhdGlvID09IDEgJiYg
eVJhdGlvMSA8PSAxICYmIHlSYXRpbzIgPj0gMSkKLSAgICAgICAgICAgIHx8ICh4UmF0aW8gPT0g
MCAmJiB5UmF0aW8xID09IDAgJiYgeVJhdGlvMiA9PSAwKSkgewotICAgICAgICAgICAgZGVzaXJl
ZFJhdGlvID0gaTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKGRlc2lyZWRSYXRpbyA9PSAweGZmZmZmZmZmKSAvLyBubyByYXRpbyBmb3VuZAotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBSYW5nZSAxMCA8PSB4IDw9IDM5MzIxNgotICAgIGJ1
Zi5zZXRPZmZzZXQob2Zmc2V0VGFibGVPZmZzZXQgKyBzaXplb2YodWludDE2X3QpICogZGVzaXJl
ZFJhdGlvKTsKLQotICAgIC8vIE5vdyB3ZSByZWFkIGZyb20gdGhlIG9mZnNldCB0YWJsZSB0byBn
ZXQgdGhlIG9mZnNldCBvZiBhbm90aGVyIGFycmF5Ci0gICAgdWludDE2X3QgZ3JvdXBPZmZzZXQ7
Ci0gICAgaWYgKCFidWYucmVhZFUxNigmZ3JvdXBPZmZzZXQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgLy8gUmFuZ2UgMCA8PSB4IDw9IDY1NTM1Ci0gICAgYnVmLnNldE9mZnNldChncm91
cE9mZnNldCk7Ci0KLSAgICB1aW50MTZfdCBudW1SZWNvcmRzOwotICAgIGlmICghYnVmLnJlYWRV
MTYoJm51bVJlY29yZHMpIHx8ICFidWYuc2tpcChzaXplb2YodWludDE2X3QpKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2UgcmVhZCA2IGJ5dGVzIHBlciByZWNvcmQsIHNvIHRo
ZSBvZmZzZXQgcmFuZ2UgaXMKLSAgICAvLyAgIDQgPD0geCA8PSA0NTg3NDkKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtUmVjb3JkczsgKytpKSB7Ci0gICAgICAgIHVpbnQxNl90IHBp
eGVsU2l6ZTsKLSAgICAgICAgaWYgKCFidWYucmVhZFUxNigmcGl4ZWxTaXplKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gdGhlIGVudHJpZXMgYXJlIHNvcnRlZCwgc28g
d2UgY2FuIGFib3J0IGVhcmx5IGlmIG5lZWQgYmUKLSAgICAgICAgaWYgKHBpeGVsU2l6ZSA+IHRh
cmdldFBpeGVsU2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAo
cGl4ZWxTaXplID09IHRhcmdldFBpeGVsU2l6ZSkgewotICAgICAgICAgICAgaW50MTZfdCB0ZW1w
WU1heCwgdGVtcFlNaW47Ci0gICAgICAgICAgICBpZiAoIWJ1Zi5yZWFkUzE2KCZ0ZW1wWU1heCkK
LSAgICAgICAgICAgICAgICB8fCAhYnVmLnJlYWRTMTYoJnRlbXBZTWluKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAqeU1pbiA9IHRlbXBZTWluOwotICAgICAg
ICAgICAgKnlNYXggPSB0ZW1wWU1heDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICghYnVmLnNraXAoMiAqIHNpemVvZihpbnQxNl90KSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9WRE1YUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVkRNWFBhcnNlci5oCShyZXZpc2lvbiAxNDc3MzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WRE1YUGFyc2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAw
OSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFZETVhQYXJzZXJfaAotI2Rl
ZmluZSBWRE1YUGFyc2VyX2gKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGJvb2wgcGFyc2VW
RE1YKGludCogeW1heCwgaW50KiB5bWluLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4
X3QqIHZkbXgsIHNpemVfdCB2ZG14TGVuZ3RoLAotICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHRhcmdldFBpeGVsU2l6ZSk7Ci19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
OSArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBHbG9iYWwgcmVzb3VyY2UgY2VpbGlu
ZyAoZXhwcmVzc2VkIGluIHRlcm1zIG9mIHBpeGVscykgZm9yIERyYXdpbmdCdWZmZXIgY3JlYXRp
b24gYW5kIHJlc2l6ZS4KIC8vIFdoZW4gdGhpcyBsaW1pdCBpcyBzZXQsIERyYXdpbmdCdWZmZXI6
OmNyZWF0ZSgpIGFuZCBEcmF3aW5nQnVmZmVyOjpyZXNldCgpIGNhbGxzIHRoYXQgd291bGQKIC8v
IGV4Y2VlZCB0aGUgZ2xvYmFsIGNhcCB3aWxsIGluc3RlYWQgY2xlYXIgdGhlIGJ1ZmZlci4KLSNp
ZiBQTEFURk9STShDSFJPTUlVTSkgLy8gQ3VycmVudGx5LCB0aGlzIGNhcCBvbmx5IGV4aXN0cyBm
b3IgY2hyb21pdW0uCi1zdGF0aWMgaW50IHNfbWF4aW11bVJlc291cmNlVXNlUGl4ZWxzID0gMTYg
KiAxMDI0ICogMTAyNDsKLSNlbGlmICFQTEFURk9STShCTEFDS0JFUlJZKQorI2lmICFQTEFURk9S
TShCTEFDS0JFUlJZKQogc3RhdGljIGludCBzX21heGltdW1SZXNvdXJjZVVzZVBpeGVscyA9IDA7
CiAjZW5kaWYKIHN0YXRpYyBpbnQgc19jdXJyZW50UmVzb3VyY2VVc2VQaXhlbHMgPSAwOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29u
dGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiAxNDc3MzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwzOCArNDUsMTggQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgYm9vbCB3YXNDcmVhdGVkID0gZmFsc2U7CiAKLSNpZiBQTEFURk9STShDSFJPTUlV
TSkKLSAgICAgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogd2ViQ29udGV4dCA9IFdl
YktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+c2hhcmVkT2Zmc2NyZWVuR3JhcGhpY3NDb250ZXh0
M0QoKTsKLSAgICAgICAgR3JDb250ZXh0KiBnckNvbnRleHQgPSBXZWJLaXQ6OlBsYXRmb3JtOjpj
dXJyZW50KCktPnNoYXJlZE9mZnNjcmVlbkdyQ29udGV4dCgpOwotCi0gICAgICAgIGlmICh3ZWJD
b250ZXh0ICYmIGdyQ29udGV4dCkgewotICAgICAgICAgICAgV2ViS2l0OjpXZWJHcmFwaGljc0Nv
bnRleHQzRCogb2xkV2ViQ29udGV4dCA9IG1fY29udGV4dCA/IEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1fY29udGV4dC5nZXQoKSkgOiAwOwot
ICAgICAgICAgICAgR3JDb250ZXh0KiBvbGRHckNvbnRleHQgPSBtX2NvbnRleHQgPyBtX2NvbnRl
eHQtPmdyQ29udGV4dCgpIDogMDsKLSAgICAgICAgICAgIGlmICh3ZWJDb250ZXh0ICE9IG9sZFdl
YkNvbnRleHQgfHwgZ3JDb250ZXh0ICE9IG9sZEdyQ29udGV4dCkKLSAgICAgICAgICAgICAgICBt
X2NvbnRleHQuY2xlYXIoKTsKLQotICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQpIHsKLSAgICAg
ICAgICAgICAgICBtX2NvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdy
YXBoaWNzQ29udGV4dEZyb21FeHRlcm5hbFdlYkNvbnRleHRBbmRHckNvbnRleHQod2ViQ29udGV4
dCwgZ3JDb250ZXh0KTsKLSAgICAgICAgICAgICAgICB3YXNDcmVhdGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gRklYTUU6IERvbid0IGZhbGxiYWNrIHRvIHRoZSBs
ZWdhY3kgcGF0aCB3aGVuIGNocm9taXVtIHN1cHBvcnRzIHRoZSBuZXcgb2Zmc2NyZWVuIG1ldGhv
ZHMuCi0gICAgICAgIH0gZWxzZQotI2VuZGlmCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIElm
IHdlIGxvc3QgdGhlIGNvbnRleHQsIG9yIGNhbid0IG1ha2UgaXQgY3VycmVudCwgY3JlYXRlIGEg
bmV3IG9uZS4KLSAgICAgICAgICAgIGlmIChtX2NvbnRleHQgJiYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpIHx8IChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhp
Y3NSZXNldFN0YXR1c0FSQigpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikpKQotICAg
ICAgICAgICAgICAgIG1fY29udGV4dC5jbGVhcigpOwotCi0gICAgICAgICAgICBpZiAoIW1fY29u
dGV4dCkgewotICAgICAgICAgICAgICAgIGNyZWF0ZUNvbnRleHQoKTsKLSAgICAgICAgICAgICAg
ICB3YXNDcmVhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1f
Y29udGV4dCAmJiAhbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgICAg
ICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICAgICAgLy8gSWYgd2UgbG9zdCB0aGUgY29udGV4
dCwgb3IgY2FuJ3QgbWFrZSBpdCBjdXJyZW50LCBjcmVhdGUgYSBuZXcgb25lLgorICAgICAgICBp
ZiAobV9jb250ZXh0ICYmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSB8fCAobV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpKSkKKyAgICAgICAgICAgIG1fY29udGV4dC5jbGVh
cigpOworCisgICAgICAgIGlmICghbV9jb250ZXh0KSB7CisgICAgICAgICAgICBjcmVhdGVDb250
ZXh0KCk7CisgICAgICAgICAgICB3YXNDcmVhdGVkID0gdHJ1ZTsKICAgICAgICAgfQogCisgICAg
ICAgIGlmIChtX2NvbnRleHQgJiYgIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKwogICAgICAgICBpZiAobV9jb250ZXh0ICYm
IHdhc0NyZWF0ZWQpCiAgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+cHVz
aEdyb3VwTWFya2VyRVhUKCJTaGFyZWRHcmFwaGljc0NvbnRleHQiKTsKICAgICAgICAgcmV0dXJu
IG1fY29udGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2No
cm9taXVtL01lZGlhU3RyZWFtQ2VudGVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL01lZGlhU3RyZWFtQ2VudGVy
Q2hyb21pdW0uY3BwCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9NZWRpYVN0cmVhbUNlbnRlckNocm9taXVtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCi0KLSNpbmNsdWRlICJNZWRpYVN0cmVhbUNlbnRlckNocm9taXVt
LmgiCi0KLSNpbmNsdWRlICJNZWRpYVN0cmVhbURlc2NyaXB0b3IuaCIKLSNpbmNsdWRlICJNZWRp
YVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudC5oIgotI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5o
PgotI2luY2x1ZGUgPHB1YmxpYy9XZWJNZWRpYVN0cmVhbS5oPgotI2luY2x1ZGUgPHB1YmxpYy9X
ZWJNZWRpYVN0cmVhbUNlbnRlci5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJNZWRpYVN0cmVhbVNv
dXJjZXNSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYk1lZGlhU3RyZWFtVHJhY2suaD4K
LSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTWVkaWFTdHJlYW1DZW50ZXImIE1lZGlhU3RyZWFt
Q2VudGVyOjppbnN0YW5jZSgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKE1lZGlhU3RyZWFtQ2VudGVyQ2hyb21pdW0sIGNlbnRlciwgKCkp
OwotICAgIHJldHVybiBjZW50ZXI7Ci19Ci0KLU1lZGlhU3RyZWFtQ2VudGVyQ2hyb21pdW06Ok1l
ZGlhU3RyZWFtQ2VudGVyQ2hyb21pdW0oKQotICAgIDogbV9wcml2YXRlKGFkb3B0UHRyKFdlYktp
dDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3JlYXRlTWVkaWFTdHJlYW1DZW50ZXIodGhpcykpKQot
ewotfQotCi1NZWRpYVN0cmVhbUNlbnRlckNocm9taXVtOjp+TWVkaWFTdHJlYW1DZW50ZXJDaHJv
bWl1bSgpCi17Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1DZW50ZXJDaHJvbWl1bTo6cXVlcnlNZWRp
YVN0cmVhbVNvdXJjZXMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZXNRdWVyeUNsaWVudD4g
Y2xpZW50KQotewotICAgIGlmIChtX3ByaXZhdGUpCi0gICAgICAgIG1fcHJpdmF0ZS0+cXVlcnlN
ZWRpYVN0cmVhbVNvdXJjZXMoY2xpZW50KTsKLSAgICBlbHNlIHsKLSAgICAgICAgTWVkaWFTdHJl
YW1Tb3VyY2VWZWN0b3IgYXVkaW9Tb3VyY2VzLCB2aWRlb1NvdXJjZXM7Ci0gICAgICAgIGNsaWVu
dC0+ZGlkQ29tcGxldGVRdWVyeShhdWRpb1NvdXJjZXMsIHZpZGVvU291cmNlcyk7Ci0gICAgfQot
fQotCi12b2lkIE1lZGlhU3RyZWFtQ2VudGVyQ2hyb21pdW06OmRpZFNldE1lZGlhU3RyZWFtVHJh
Y2tFbmFibGVkKE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtLCAgTWVkaWFTdHJlYW1Db21w
b25lbnQqIGNvbXBvbmVudCkKLXsKLSAgICBpZiAobV9wcml2YXRlKSB7Ci0gICAgICAgIGlmIChj
b21wb25lbnQtPmVuYWJsZWQoKSkKLSAgICAgICAgICAgIG1fcHJpdmF0ZS0+ZGlkRW5hYmxlTWVk
aWFTdHJlYW1UcmFjayhzdHJlYW0sIGNvbXBvbmVudCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1fcHJpdmF0ZS0+ZGlkRGlzYWJsZU1lZGlhU3RyZWFtVHJhY2soc3RyZWFtLCBjb21wb25l
bnQpOwotICAgIH0KLX0KLQotYm9vbCBNZWRpYVN0cmVhbUNlbnRlckNocm9taXVtOjpkaWRBZGRN
ZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtLCBNZWRpYVN0cmVh
bUNvbXBvbmVudCogY29tcG9uZW50KQotewotICAgIHJldHVybiBtX3ByaXZhdGUgPyBtX3ByaXZh
dGUtPmRpZEFkZE1lZGlhU3RyZWFtVHJhY2soc3RyZWFtLCBjb21wb25lbnQpIDogZmFsc2U7Ci19
Ci0KLWJvb2wgTWVkaWFTdHJlYW1DZW50ZXJDaHJvbWl1bTo6ZGlkUmVtb3ZlTWVkaWFTdHJlYW1U
cmFjayhNZWRpYVN0cmVhbURlc2NyaXB0b3IqIHN0cmVhbSwgTWVkaWFTdHJlYW1Db21wb25lbnQq
IGNvbXBvbmVudCkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlID8gbV9wcml2YXRlLT5kaWRSZW1v
dmVNZWRpYVN0cmVhbVRyYWNrKHN0cmVhbSwgY29tcG9uZW50KSA6IGZhbHNlOwotfQotCi12b2lk
IE1lZGlhU3RyZWFtQ2VudGVyQ2hyb21pdW06OmRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtKE1lZGlh
U3RyZWFtRGVzY3JpcHRvciogc3RyZWFtKQotewotICAgIGlmIChtX3ByaXZhdGUpIHsKLSAgICAg
ICAgbV9wcml2YXRlLT5kaWRTdG9wTG9jYWxNZWRpYVN0cmVhbShzdHJlYW0pOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RyZWFtLT5udW1iZXJPZkF1ZGlvQ29tcG9uZW50cygp
OyBpKyspCi0gICAgICAgICAgICBzdHJlYW0tPmF1ZGlvQ29tcG9uZW50KGkpLT5zb3VyY2UoKS0+
c2V0UmVhZHlTdGF0ZShNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZUVuZGVkKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0cmVhbS0+bnVtYmVyT2ZWaWRlb0NvbXBvbmVu
dHMoKTsgaSsrKQotICAgICAgICAgICAgc3RyZWFtLT52aWRlb0NvbXBvbmVudChpKS0+c291cmNl
KCktPnNldFJlYWR5U3RhdGUoTWVkaWFTdHJlYW1Tb3VyY2U6OlJlYWR5U3RhdGVFbmRlZCk7Ci0g
ICAgfQotfQotCi12b2lkIE1lZGlhU3RyZWFtQ2VudGVyQ2hyb21pdW06OmRpZENyZWF0ZU1lZGlh
U3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciogc3RyZWFtKQotewotICAgIGlmIChtX3ByaXZh
dGUpIHsKLSAgICAgICAgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbSB3ZWJTdHJlYW0oc3RyZWFtKTsK
LSAgICAgICAgbV9wcml2YXRlLT5kaWRDcmVhdGVNZWRpYVN0cmVhbSh3ZWJTdHJlYW0pOwotICAg
IH0KLX0KLQotdm9pZCBNZWRpYVN0cmVhbUNlbnRlckNocm9taXVtOjpzdG9wTG9jYWxNZWRpYVN0
cmVhbShjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtJiBzdHJlYW0pCi17Ci0gICAgZW5kTG9j
YWxNZWRpYVN0cmVhbShzdHJlYW0pOwotfQotCi12b2lkIE1lZGlhU3RyZWFtQ2VudGVyQ2hyb21p
dW06OmFkZE1lZGlhU3RyZWFtVHJhY2soY29uc3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbSYgc3Ry
ZWFtLCBjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtVHJhY2smIGNvbXBvbmVudCkKLXsKLSAg
ICBNZWRpYVN0cmVhbUNlbnRlcjo6YWRkTWVkaWFTdHJlYW1UcmFjayhzdHJlYW0sIGNvbXBvbmVu
dCk7Ci19Ci0KLXZvaWQgTWVkaWFTdHJlYW1DZW50ZXJDaHJvbWl1bTo6cmVtb3ZlTWVkaWFTdHJl
YW1UcmFjayhjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtJiBzdHJlYW0sIGNvbnN0IFdlYktp
dDo6V2ViTWVkaWFTdHJlYW1UcmFjayYgY29tcG9uZW50KQotewotICAgIE1lZGlhU3RyZWFtQ2Vu
dGVyOjpyZW1vdmVNZWRpYVN0cmVhbVRyYWNrKHN0cmVhbSwgY29tcG9uZW50KTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL01lZGlhU3Ry
ZWFtQ2VudGVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9NZWRpYVN0cmVhbUNlbnRlckNocm9taXVtLmgJKHJldmlz
aW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9t
aXVtL01lZGlhU3RyZWFtQ2VudGVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw4MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
ICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMK
LSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNZWRpYVN0cmVhbUNlbnRlckNocm9taXVtX2gKLSNkZWZp
bmUgTWVkaWFTdHJlYW1DZW50ZXJDaHJvbWl1bV9oCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQotCi0jaW5jbHVkZSAiTWVkaWFTdHJlYW1DZW50ZXIuaCIKLQotI2luY2x1ZGUgPHB1YmxpYy9X
ZWJNZWRpYVN0cmVhbUNlbnRlckNsaWVudC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYk1lZGlhU3RyZWFtOwotY2xhc3MgV2Vi
TWVkaWFTdHJlYW1DZW50ZXI7Ci1jbGFzcyBXZWJNZWRpYVN0cmVhbVRyYWNrOwotfQotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIE1lZGlhU3RyZWFtQ29tcG9uZW50OwotY2xhc3MgTWVk
aWFTdHJlYW1EZXNjcmlwdG9yOwotY2xhc3MgTWVkaWFTdHJlYW1Tb3VyY2VzUXVlcnlDbGllbnQ7
Ci0KLWNsYXNzIE1lZGlhU3RyZWFtQ2VudGVyQ2hyb21pdW0gOiBwdWJsaWMgTWVkaWFTdHJlYW1D
ZW50ZXIsIHB1YmxpYyBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtQ2VudGVyQ2xpZW50IHsKLXB1Ymxp
YzoKLSAgICBNZWRpYVN0cmVhbUNlbnRlckNocm9taXVtKCk7Ci0gICAgfk1lZGlhU3RyZWFtQ2Vu
dGVyQ2hyb21pdW0oKTsKLQotICAgIC8vIE1lZGlhU3RyZWFtQ2VudGVyCi0gICAgdmlydHVhbCB2
b2lkIHF1ZXJ5TWVkaWFTdHJlYW1Tb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2Vz
UXVlcnlDbGllbnQ+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2V0TWVkaWFTdHJl
YW1UcmFja0VuYWJsZWQoTWVkaWFTdHJlYW1EZXNjcmlwdG9yKiwgTWVkaWFTdHJlYW1Db21wb25l
bnQqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgZGlkQWRkTWVkaWFTdHJlYW1UcmFjayhN
ZWRpYVN0cmVhbURlc2NyaXB0b3IqLCBNZWRpYVN0cmVhbUNvbXBvbmVudCopIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgYm9vbCBkaWRSZW1vdmVNZWRpYVN0cmVhbVRyYWNrKE1lZGlhU3RyZWFtRGVz
Y3JpcHRvciosIE1lZGlhU3RyZWFtQ29tcG9uZW50KikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtKE1lZGlhU3RyZWFtRGVzY3JpcHRvciopIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVNZWRpYVN0cmVhbShNZWRpYVN0cmVhbURl
c2NyaXB0b3IqKSBPVkVSUklERTsKLQotICAgIC8vIFdlYktpdDo6V2ViTWVkaWFTdHJlYW1DZW50
ZXJDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcExvY2FsTWVkaWFTdHJlYW0oY29uc3QgV2Vi
S2l0OjpXZWJNZWRpYVN0cmVhbSYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBhZGRNZWRp
YVN0cmVhbVRyYWNrKGNvbnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW0mLCBjb25zdCBXZWJLaXQ6
OldlYk1lZGlhU3RyZWFtVHJhY2smKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
TWVkaWFTdHJlYW1UcmFjayhjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtJiwgY29uc3QgV2Vi
S2l0OjpXZWJNZWRpYVN0cmVhbVRyYWNrJikgT1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgT3du
UHRyPFdlYktpdDo6V2ViTWVkaWFTdHJlYW1DZW50ZXI+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNl
bmRpZiAvLyBNZWRpYVN0cmVhbUNlbnRlckNocm9taXVtX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1JUQ0RUTUZTZW5kZXJIYW5kbGVyQ2hyb21p
dW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2Nocm9taXVtL1JUQ0RUTUZTZW5kZXJIYW5kbGVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxNDc3
MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9SVENE
VE1GU2VuZGVySGFuZGxlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09H
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLQotI2luY2x1ZGUg
IlJUQ0RUTUZTZW5kZXJIYW5kbGVyQ2hyb21pdW0uaCIKLQotI2luY2x1ZGUgIlJUQ0RUTUZTZW5k
ZXJIYW5kbGVyQ2xpZW50LmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYlJUQ0RUTUZTZW5kZXJIYW5k
bGVyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzT3duUHRyPFJUQ0RUTUZTZW5kZXJI
YW5kbGVyPiBSVENEVE1GU2VuZGVySGFuZGxlckNocm9taXVtOjpjcmVhdGUoV2ViUlRDRFRNRlNl
bmRlckhhbmRsZXIqIHdlYkhhbmRsZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSVENE
VE1GU2VuZGVySGFuZGxlckNocm9taXVtKHdlYkhhbmRsZXIpKTsKLX0KLQotUlRDRFRNRlNlbmRl
ckhhbmRsZXJDaHJvbWl1bTo6UlRDRFRNRlNlbmRlckhhbmRsZXJDaHJvbWl1bShXZWJSVENEVE1G
U2VuZGVySGFuZGxlciogd2ViSGFuZGxlcikKLSAgICA6IG1fd2ViSGFuZGxlcihhZG9wdFB0cih3
ZWJIYW5kbGVyKSkKLSAgICAsIG1fY2xpZW50KDApCi17Ci19Ci0KLVJUQ0RUTUZTZW5kZXJIYW5k
bGVyQ2hyb21pdW06On5SVENEVE1GU2VuZGVySGFuZGxlckNocm9taXVtKCkKLXsKLX0KLQotdm9p
ZCBSVENEVE1GU2VuZGVySGFuZGxlckNocm9taXVtOjpzZXRDbGllbnQoUlRDRFRNRlNlbmRlckhh
bmRsZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICBtX2NsaWVudCA9IGNsaWVudDsKLSAgICBtX3dl
YkhhbmRsZXItPnNldENsaWVudChtX2NsaWVudCA/IHRoaXMgOiAwKTsKLX0KLQotU3RyaW5nIFJU
Q0RUTUZTZW5kZXJIYW5kbGVyQ2hyb21pdW06OmN1cnJlbnRUb25lQnVmZmVyKCkKLXsKLSAgICBy
ZXR1cm4gbV93ZWJIYW5kbGVyLT5jdXJyZW50VG9uZUJ1ZmZlcigpOwotfQotCi1ib29sIFJUQ0RU
TUZTZW5kZXJIYW5kbGVyQ2hyb21pdW06OmNhbkluc2VydERUTUYoKQotewotICAgIHJldHVybiBt
X3dlYkhhbmRsZXItPmNhbkluc2VydERUTUYoKTsKLX0KLQotYm9vbCBSVENEVE1GU2VuZGVySGFu
ZGxlckNocm9taXVtOjppbnNlcnREVE1GKGNvbnN0IFN0cmluZyYgdG9uZXMsIGxvbmcgZHVyYXRp
b24sIGxvbmcgaW50ZXJUb25lR2FwKQotewotICAgIHJldHVybiBtX3dlYkhhbmRsZXItPmluc2Vy
dERUTUYodG9uZXMsIGR1cmF0aW9uLCBpbnRlclRvbmVHYXApOwotfQotCi12b2lkIFJUQ0RUTUZT
ZW5kZXJIYW5kbGVyQ2hyb21pdW06OmRpZFBsYXlUb25lKGNvbnN0IFdlYlN0cmluZyYgdG9uZSkg
Y29uc3QKLXsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRQbGF5VG9u
ZSh0b25lKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2Nocm9taXVtL1JUQ0RUTUZTZW5kZXJIYW5kbGVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9SVENEVE1GU2VuZGVy
SGFuZGxlckNocm9taXVtLmgJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1JUQ0RUTUZTZW5kZXJIYW5kbGVyQ2hyb21pdW0u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBSVENEVE1GU2VuZGVySGFuZGxlckNo
cm9taXVtX2gKLSNkZWZpbmUgUlRDRFRNRlNlbmRlckhhbmRsZXJDaHJvbWl1bV9oCi0KLSNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiUlRDRFRNRlNlbmRlckhhbmRsZXIuaCIK
LSNpbmNsdWRlICJSVENEVE1GU2VuZGVySGFuZGxlckNsaWVudC5oIgotI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJSVENEVE1GU2VuZGVySGFuZGxlci5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJSVENEVE1G
U2VuZGVySGFuZGxlckNsaWVudC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJUQ0RU
TUZTZW5kZXJIYW5kbGVyQ2xpZW50OwotCi1jbGFzcyBSVENEVE1GU2VuZGVySGFuZGxlckNocm9t
aXVtIDogcHVibGljIFJUQ0RUTUZTZW5kZXJIYW5kbGVyLCBwdWJsaWMgV2ViS2l0OjpXZWJSVENE
VE1GU2VuZGVySGFuZGxlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
UlRDRFRNRlNlbmRlckhhbmRsZXI+IGNyZWF0ZShXZWJLaXQ6OldlYlJUQ0RUTUZTZW5kZXJIYW5k
bGVyKik7Ci0gICAgdmlydHVhbCB+UlRDRFRNRlNlbmRlckhhbmRsZXJDaHJvbWl1bSgpOwotCi0g
ICAgdmlydHVhbCB2b2lkIHNldENsaWVudChSVENEVE1GU2VuZGVySGFuZGxlckNsaWVudCopIE9W
RVJSSURFOwotCi0gICAgdmlydHVhbCBTdHJpbmcgY3VycmVudFRvbmVCdWZmZXIoKSBPVkVSUklE
RTsKLQotICAgIHZpcnR1YWwgYm9vbCBjYW5JbnNlcnREVE1GKCkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCBib29sIGluc2VydERUTUYoY29uc3QgU3RyaW5nJiB0b25lcywgbG9uZyBkdXJhdGlvbiwg
bG9uZyBpbnRlclRvbmVHYXApIE9WRVJSSURFOwotCi0gICAgLy8gV2ViS2l0OjpXZWJSVENEVE1G
U2VuZGVySGFuZGxlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgZGlk
UGxheVRvbmUoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHRvbmUpIGNvbnN0IE9WRVJSSURFOwot
Ci1wcml2YXRlOgotICAgIGV4cGxpY2l0IFJUQ0RUTUZTZW5kZXJIYW5kbGVyQ2hyb21pdW0oV2Vi
S2l0OjpXZWJSVENEVE1GU2VuZGVySGFuZGxlciopOwotCi0gICAgT3duUHRyPFdlYktpdDo6V2Vi
UlRDRFRNRlNlbmRlckhhbmRsZXI+IG1fd2ViSGFuZGxlcjsKLSAgICBSVENEVE1GU2VuZGVySGFu
ZGxlckNsaWVudCogbV9jbGllbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jZW5kaWYgLy8gUlRDRFRNRlNlbmRlckhh
bmRsZXJDaHJvbWl1bV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9jaHJvbWl1bS9SVENEYXRhQ2hhbm5lbEhhbmRsZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vUlRDRGF0YUNo
YW5uZWxIYW5kbGVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1bS9SVENEYXRhQ2hhbm5lbEhhbmRsZXJD
aHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
Ci0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNp
bmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXJDaHJvbWl1bS5oIgotCi0jaW5jbHVkZSAiUlRD
RGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50LmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYlJUQ0RhdGFD
aGFubmVsSGFuZGxlci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUGFzc093blB0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IFJUQ0RhdGFD
aGFubmVsSGFuZGxlckNocm9taXVtOjpjcmVhdGUoV2ViS2l0OjpXZWJSVENEYXRhQ2hhbm5lbEhh
bmRsZXIqIHdlYkhhbmRsZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBSVENEYXRhQ2hh
bm5lbEhhbmRsZXJDaHJvbWl1bSh3ZWJIYW5kbGVyKSk7Ci19Ci0KLVJUQ0RhdGFDaGFubmVsSGFu
ZGxlckNocm9taXVtOjpSVENEYXRhQ2hhbm5lbEhhbmRsZXJDaHJvbWl1bShXZWJLaXQ6OldlYlJU
Q0RhdGFDaGFubmVsSGFuZGxlciogd2ViSGFuZGxlcikKLSAgICA6IG1fd2ViSGFuZGxlcihhZG9w
dFB0cih3ZWJIYW5kbGVyKSkKLSAgICAsIG1fY2xpZW50KDApCi17Ci19Ci0KLVJUQ0RhdGFDaGFu
bmVsSGFuZGxlckNocm9taXVtOjp+UlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2hyb21pdW0oKQotewot
fQotCi12b2lkIFJUQ0RhdGFDaGFubmVsSGFuZGxlckNocm9taXVtOjpzZXRDbGllbnQoUlRDRGF0
YUNoYW5uZWxIYW5kbGVyQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgbV9jbGllbnQgPSBjbGllbnQ7
Ci0gICAgbV93ZWJIYW5kbGVyLT5zZXRDbGllbnQobV9jbGllbnQgPyB0aGlzIDogMCk7Ci19Ci0K
LVN0cmluZyBSVENEYXRhQ2hhbm5lbEhhbmRsZXJDaHJvbWl1bTo6bGFiZWwoKQotewotICAgIHJl
dHVybiBtX3dlYkhhbmRsZXItPmxhYmVsKCk7Ci19Ci0KLWJvb2wgUlRDRGF0YUNoYW5uZWxIYW5k
bGVyQ2hyb21pdW06OmlzUmVsaWFibGUoKQotewotICAgIHJldHVybiBtX3dlYkhhbmRsZXItPmlz
UmVsaWFibGUoKTsKLX0KLQotdW5zaWduZWQgbG9uZyBSVENEYXRhQ2hhbm5lbEhhbmRsZXJDaHJv
bWl1bTo6YnVmZmVyZWRBbW91bnQoKQotewotICAgIHJldHVybiBtX3dlYkhhbmRsZXItPmJ1ZmZl
cmVkQW1vdW50KCk7Ci19Ci0KLWJvb2wgUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2hyb21pdW06OnNl
bmRTdHJpbmdEYXRhKGNvbnN0IFN0cmluZyYgZGF0YSkKLXsKLSAgICByZXR1cm4gbV93ZWJIYW5k
bGVyLT5zZW5kU3RyaW5nRGF0YShkYXRhKTsKLX0KLQotYm9vbCBSVENEYXRhQ2hhbm5lbEhhbmRs
ZXJDaHJvbWl1bTo6c2VuZFJhd0RhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCi17
Ci0gICAgcmV0dXJuIG1fd2ViSGFuZGxlci0+c2VuZFJhd0RhdGEoZGF0YSwgc2l6ZSk7Ci19Ci0K
LXZvaWQgUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2hyb21pdW06OmNsb3NlKCkKLXsKLSAgICBtX3dl
YkhhbmRsZXItPmNsb3NlKCk7Ci19Ci0KLXZvaWQgUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2hyb21p
dW06OmRpZENoYW5nZVJlYWR5U3RhdGUoV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50OjpS
ZWFkeVN0YXRlIHN0YXRlKSBjb25zdAotewotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9j
bGllbnQtPmRpZENoYW5nZVJlYWR5U3RhdGUoc3RhdGljX2Nhc3Q8UlRDRGF0YUNoYW5uZWxIYW5k
bGVyQ2xpZW50OjpSZWFkeVN0YXRlPihzdGF0ZSkpOwotfQotCi12b2lkIFJUQ0RhdGFDaGFubmVs
SGFuZGxlckNocm9taXVtOjpkaWRSZWNlaXZlU3RyaW5nRGF0YShjb25zdCBXZWJLaXQ6OldlYlN0
cmluZyYgZGF0YSkgY29uc3QKLXsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50
LT5kaWRSZWNlaXZlU3RyaW5nRGF0YShkYXRhKTsKLX0KLQotdm9pZCBSVENEYXRhQ2hhbm5lbEhh
bmRsZXJDaHJvbWl1bTo6ZGlkUmVjZWl2ZVJhd0RhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90
IHNpemUpIGNvbnN0Ci17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+ZGlk
UmVjZWl2ZVJhd0RhdGEoZGF0YSwgc2l6ZSk7Ci19Ci0KLXZvaWQgUlRDRGF0YUNoYW5uZWxIYW5k
bGVyQ2hyb21pdW06OmRpZERldGVjdEVycm9yKCkgY29uc3QKLXsKLSAgICBpZiAobV9jbGllbnQp
Ci0gICAgICAgIG1fY2xpZW50LT5kaWREZXRlY3RFcnJvcigpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vUlRDRGF0YUNoYW5uZWxIYW5k
bGVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9jaHJvbWl1bS9SVENEYXRhQ2hhbm5lbEhhbmRsZXJDaHJvbWl1bS5oCShyZXZpc2lv
biAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jaHJvbWl1
bS9SVENEYXRhQ2hhbm5lbEhhbmRsZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2hy
b21pdW1faAotI2RlZmluZSBSVENEYXRhQ2hhbm5lbEhhbmRsZXJDaHJvbWl1bV9oCi0KLSNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmgi
Ci0jaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50LmgiCi0jaW5jbHVkZSA8cHVi
bGljL1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJSVENE
YXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBS
VENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQ7Ci0KLWNsYXNzIFJUQ0RhdGFDaGFubmVsSGFuZGxl
ckNocm9taXVtIDogcHVibGljIFJUQ0RhdGFDaGFubmVsSGFuZGxlciwgcHVibGljIFdlYktpdDo6
V2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IGNyZWF0ZShXZWJLaXQ6OldlYlJUQ0RhdGFD
aGFubmVsSGFuZGxlciopOwotICAgIHZpcnR1YWwgflJUQ0RhdGFDaGFubmVsSGFuZGxlckNocm9t
aXVtKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50KFJUQ0RhdGFDaGFubmVsSGFuZGxl
ckNsaWVudCopIE9WRVJSSURFOwotCi0gICAgdmlydHVhbCBTdHJpbmcgbGFiZWwoKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWxpYWJsZSgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3VudCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9v
bCBzZW5kU3RyaW5nRGF0YShjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJv
b2wgc2VuZFJhd0RhdGEoY29uc3QgY2hhciosIHNpemVfdCkgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIGNsb3NlKCkgT1ZFUlJJREU7Ci0KLSAgICAvLyBXZWJLaXQ6OldlYlJUQ0RhdGFDaGFu
bmVsSGFuZGxlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hh
bmdlUmVhZHlTdGF0ZShSZWFkeVN0YXRlKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZVN0cmluZ0RhdGEoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJhd0RhdGEoY29uc3QgY2hhcios
IHNpemVfdCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZERldGVjdEVycm9y
KCkgY29uc3QgT1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgUlRDRGF0YUNoYW5u
ZWxIYW5kbGVyQ2hyb21pdW0oV2ViS2l0OjpXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIqKTsKLQot
ICAgIE93blB0cjxXZWJLaXQ6OldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gbV93ZWJIYW5kbGVy
OwotICAgIFJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVudCogbV9jbGllbnQ7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0j
ZW5kaWYgLy8gUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2hyb21pdW1faApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY2hyb21pdW0vUlRDUGVlckNvbm5lY3Rpb25IYW5k
bGVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2Nocm9taXVtL1JUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNocm9taXVtLmNwcAko
cmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Y2hyb21pdW0vUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDIyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKLQotI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNocm9taXVt
LmgiCi0KLSNpbmNsdWRlICJNZWRpYUNvbnN0cmFpbnRzLmgiCi0jaW5jbHVkZSAiTWVkaWFTdHJl
YW1Db21wb25lbnQuaCIKLSNpbmNsdWRlICJSVENDb25maWd1cmF0aW9uLmgiCi0jaW5jbHVkZSAi
UlRDRFRNRlNlbmRlckhhbmRsZXIuaCIKLSNpbmNsdWRlICJSVENEVE1GU2VuZGVySGFuZGxlckNo
cm9taXVtLmgiCi0jaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2hyb21pdW0uaCIKLSNp
bmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQuaCIKLSNpbmNsdWRlICJSVENJY2VD
YW5kaWRhdGVEZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVy
Q2xpZW50LmgiCi0jaW5jbHVkZSAiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uRGVzY3JpcHRvci5oIgot
I2luY2x1ZGUgIlJUQ1Nlc3Npb25EZXNjcmlwdGlvblJlcXVlc3QuaCIKLSNpbmNsdWRlICJSVENT
dGF0c1JlcXVlc3QuaCIKLSNpbmNsdWRlICJSVENWb2lkUmVxdWVzdC5oIgotI2luY2x1ZGUgPHB1
YmxpYy9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJNZWRpYUNvbnN0cmFpbnRzLmg+
Ci0jaW5jbHVkZSA8cHVibGljL1dlYk1lZGlhU3RyZWFtLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dl
Yk1lZGlhU3RyZWFtVHJhY2suaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViUlRDQ29uZmlndXJhdGlv
bi5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJSVENEVE1GU2VuZGVySGFuZGxlci5oPgotI2luY2x1
ZGUgPHB1YmxpYy9XZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaD4KLSNpbmNsdWRlIDxwdWJsaWMv
V2ViUlRDSUNFQ2FuZGlkYXRlLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlJUQ1Nlc3Npb25EZXNj
cmlwdGlvbi5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJSVENTZXNzaW9uRGVzY3JpcHRpb25SZXF1
ZXN0Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlJUQ1N0YXRzUmVxdWVzdC5oPgotI2luY2x1ZGUg
PHB1YmxpYy9XZWJSVENWb2lkUmVxdWVzdC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotV2ViS2l0OjpXZWJSVENQZWVyQ29ubmVjdGlvbkhh
bmRsZXIqIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNocm9taXVtOjp0b1dlYlJUQ1BlZXJDb25u
ZWN0aW9uSGFuZGxlcihSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIqIGhhbmRsZXIpCi17Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNocm9taXVtKj4oaGFu
ZGxlciktPm1fd2ViSGFuZGxlci5nZXQoKTsKLX0KLQotUGFzc093blB0cjxSVENQZWVyQ29ubmVj
dGlvbkhhbmRsZXI+IFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcjo6Y3JlYXRlKFJUQ1BlZXJDb25u
ZWN0aW9uSGFuZGxlckNsaWVudCogY2xpZW50KQotewotICAgIEFTU0VSVChjbGllbnQpOwotICAg
IE93blB0cjxSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDaHJvbWl1bT4gaGFuZGxlciA9IGFkb3B0
UHRyKG5ldyBSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDaHJvbWl1bShjbGllbnQpKTsKLQotICAg
IGlmICghaGFuZGxlci0+Y3JlYXRlV2ViSGFuZGxlcigpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIHJldHVybiBoYW5kbGVyLnJlbGVhc2UoKTsKLX0KLQotUlRDUGVlckNvbm5lY3Rp
b25IYW5kbGVyQ2hyb21pdW06OlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNocm9taXVtKFJUQ1Bl
ZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCogY2xpZW50KQotICAgIDogbV9jbGllbnQoY2xpZW50
KQotewotfQotCi1SVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDaHJvbWl1bTo6flJUQ1BlZXJDb25u
ZWN0aW9uSGFuZGxlckNocm9taXVtKCkKLXsKLX0KLQotYm9vbCBSVENQZWVyQ29ubmVjdGlvbkhh
bmRsZXJDaHJvbWl1bTo6Y3JlYXRlV2ViSGFuZGxlcigpCi17Ci0gICAgbV93ZWJIYW5kbGVyID0g
YWRvcHRQdHIoV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jcmVhdGVSVENQZWVyQ29ubmVj
dGlvbkhhbmRsZXIodGhpcykpOwotICAgIHJldHVybiBtX3dlYkhhbmRsZXI7Ci19Ci0KLWJvb2wg
UlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW06OmluaXRpYWxpemUoUGFzc1JlZlB0cjxS
VENDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWlu
dHM+IGNvbnN0cmFpbnRzKQotewotICAgIHJldHVybiBtX3dlYkhhbmRsZXItPmluaXRpYWxpemUo
Y29uZmlndXJhdGlvbiwgY29uc3RyYWludHMpOwotfQotCi12b2lkIFJUQ1BlZXJDb25uZWN0aW9u
SGFuZGxlckNocm9taXVtOjpjcmVhdGVPZmZlcihQYXNzUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlw
dGlvblJlcXVlc3Q+IHJlcXVlc3QsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3Ry
YWludHMpCi17Ci0gICAgbV93ZWJIYW5kbGVyLT5jcmVhdGVPZmZlcihyZXF1ZXN0LCBjb25zdHJh
aW50cyk7Ci19Ci0KLXZvaWQgUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW06OmNyZWF0
ZUFuc3dlcihQYXNzUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvblJlcXVlc3Q+IHJlcXVlc3Qs
IFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMpCi17Ci0gICAgbV93ZWJI
YW5kbGVyLT5jcmVhdGVBbnN3ZXIocmVxdWVzdCwgY29uc3RyYWludHMpOwotfQotCi12b2lkIFJU
Q1BlZXJDb25uZWN0aW9uSGFuZGxlckNocm9taXVtOjpzZXRMb2NhbERlc2NyaXB0aW9uKFBhc3NS
ZWZQdHI8UlRDVm9pZFJlcXVlc3Q+IHJlcXVlc3QsIFBhc3NSZWZQdHI8UlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uRGVzY3JpcHRvcj4gc2Vzc2lvbkRlc2NyaXB0aW9uKQotewotICAgIG1fd2ViSGFuZGxl
ci0+c2V0TG9jYWxEZXNjcmlwdGlvbihyZXF1ZXN0LCBzZXNzaW9uRGVzY3JpcHRpb24pOwotfQot
Ci12b2lkIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNocm9taXVtOjpzZXRSZW1vdGVEZXNjcmlw
dGlvbihQYXNzUmVmUHRyPFJUQ1ZvaWRSZXF1ZXN0PiByZXF1ZXN0LCBQYXNzUmVmUHRyPFJUQ1Nl
c3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3I+IHNlc3Npb25EZXNjcmlwdGlvbikKLXsKLSAgICBt
X3dlYkhhbmRsZXItPnNldFJlbW90ZURlc2NyaXB0aW9uKHJlcXVlc3QsIHNlc3Npb25EZXNjcmlw
dGlvbik7Ci19Ci0KLWJvb2wgUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW06OnVwZGF0
ZUljZShQYXNzUmVmUHRyPFJUQ0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24sIFBhc3NSZWZQ
dHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMpCi17Ci0gICAgcmV0dXJuIG1fd2ViSGFu
ZGxlci0+dXBkYXRlSUNFKGNvbmZpZ3VyYXRpb24sIGNvbnN0cmFpbnRzKTsKLX0KLQotYm9vbCBS
VENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDaHJvbWl1bTo6YWRkSWNlQ2FuZGlkYXRlKFBhc3NSZWZQ
dHI8UlRDSWNlQ2FuZGlkYXRlRGVzY3JpcHRvcj4gaWNlQ2FuZGlkYXRlKQotewotICAgIHJldHVy
biBtX3dlYkhhbmRsZXItPmFkZElDRUNhbmRpZGF0ZShpY2VDYW5kaWRhdGUpOwotfQotCi1QYXNz
UmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3I+IFJUQ1BlZXJDb25uZWN0aW9u
SGFuZGxlckNocm9taXVtOjpsb2NhbERlc2NyaXB0aW9uKCkKLXsKLSAgICByZXR1cm4gbV93ZWJI
YW5kbGVyLT5sb2NhbERlc2NyaXB0aW9uKCk7Ci19Ci0KLVBhc3NSZWZQdHI8UlRDU2Vzc2lvbkRl
c2NyaXB0aW9uRGVzY3JpcHRvcj4gUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW06OnJl
bW90ZURlc2NyaXB0aW9uKCkKLXsKLSAgICByZXR1cm4gbV93ZWJIYW5kbGVyLT5yZW1vdGVEZXNj
cmlwdGlvbigpOwotfQotCi1ib29sIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNocm9taXVtOjph
ZGRTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IG1lZGlhU3RyZWFtLCBQ
YXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGNvbnN0cmFpbnRzKQotewotICAgIHJldHVybiBt
X3dlYkhhbmRsZXItPmFkZFN0cmVhbShtZWRpYVN0cmVhbSwgY29uc3RyYWludHMpOwotfQotCi12
b2lkIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNocm9taXVtOjpyZW1vdmVTdHJlYW0oUGFzc1Jl
ZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+IG1lZGlhU3RyZWFtKQotewotICAgIG1fd2ViSGFu
ZGxlci0+cmVtb3ZlU3RyZWFtKG1lZGlhU3RyZWFtKTsKLX0KLQotdm9pZCBSVENQZWVyQ29ubmVj
dGlvbkhhbmRsZXJDaHJvbWl1bTo6Z2V0U3RhdHMoUGFzc1JlZlB0cjxSVENTdGF0c1JlcXVlc3Q+
IHJlcXVlc3QpCi17Ci0gICAgbV93ZWJIYW5kbGVyLT5nZXRTdGF0cyhyZXF1ZXN0KTsKLX0KLQot
UGFzc093blB0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxl
ckNocm9taXVtOjpjcmVhdGVEYXRhQ2hhbm5lbChjb25zdCBTdHJpbmcmIGxhYmVsLCBib29sIHJl
bGlhYmxlKQotewotICAgIFdlYktpdDo6V2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyKiB3ZWJIYW5k
bGVyID0gbV93ZWJIYW5kbGVyLT5jcmVhdGVEYXRhQ2hhbm5lbChsYWJlbCwgcmVsaWFibGUpOwot
ICAgIGlmICghd2ViSGFuZGxlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1
cm4gUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2hyb21pdW06OmNyZWF0ZSh3ZWJIYW5kbGVyKTsKLX0K
LQotUGFzc093blB0cjxSVENEVE1GU2VuZGVySGFuZGxlcj4gUlRDUGVlckNvbm5lY3Rpb25IYW5k
bGVyQ2hyb21pdW06OmNyZWF0ZURUTUZTZW5kZXIoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNvbXBv
bmVudD4gdHJhY2spCi17Ci0gICAgV2ViS2l0OjpXZWJSVENEVE1GU2VuZGVySGFuZGxlciogd2Vi
SGFuZGxlciA9IG1fd2ViSGFuZGxlci0+Y3JlYXRlRFRNRlNlbmRlcih0cmFjayk7Ci0gICAgaWYg
KCF3ZWJIYW5kbGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBSVENE
VE1GU2VuZGVySGFuZGxlckNocm9taXVtOjpjcmVhdGUod2ViSGFuZGxlcik7Ci19Ci0KLXZvaWQg
UlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW06OnN0b3AoKQotewotICAgIG1fd2ViSGFu
ZGxlci0+c3RvcCgpOwotfQotCi12b2lkIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNocm9taXVt
OjpuZWdvdGlhdGlvbk5lZWRlZCgpCi17Ci0gICAgbV9jbGllbnQtPm5lZ290aWF0aW9uTmVlZGVk
KCk7Ci19Ci0KLXZvaWQgUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW06OmRpZEdlbmVy
YXRlSUNFQ2FuZGlkYXRlKGNvbnN0IFdlYktpdDo6V2ViUlRDSUNFQ2FuZGlkYXRlJiBpY2VDYW5k
aWRhdGUpCi17Ci0gICAgbV9jbGllbnQtPmRpZEdlbmVyYXRlSWNlQ2FuZGlkYXRlKGljZUNhbmRp
ZGF0ZSk7Ci19Ci0KLXZvaWQgUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW06OmRpZENo
YW5nZVNpZ25hbGluZ1N0YXRlKFdlYktpdDo6V2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xp
ZW50OjpTaWduYWxpbmdTdGF0ZSBzdGF0ZSkKLXsKLSAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlU2ln
bmFsaW5nU3RhdGUoc3RhdGljX2Nhc3Q8UlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50OjpT
aWduYWxpbmdTdGF0ZT4oc3RhdGUpKTsKLX0KLQotdm9pZCBSVENQZWVyQ29ubmVjdGlvbkhhbmRs
ZXJDaHJvbWl1bTo6ZGlkQ2hhbmdlSUNFR2F0aGVyaW5nU3RhdGUoV2ViS2l0OjpXZWJSVENQZWVy
Q29ubmVjdGlvbkhhbmRsZXJDbGllbnQ6OklDRUdhdGhlcmluZ1N0YXRlIHN0YXRlKQotewotICAg
IG1fY2xpZW50LT5kaWRDaGFuZ2VJY2VHYXRoZXJpbmdTdGF0ZShzdGF0aWNfY2FzdDxSVENQZWVy
Q29ubmVjdGlvbkhhbmRsZXJDbGllbnQ6OkljZUdhdGhlcmluZ1N0YXRlPihzdGF0ZSkpOwotfQot
Ci12b2lkIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNocm9taXVtOjpkaWRDaGFuZ2VJQ0VDb25u
ZWN0aW9uU3RhdGUoV2ViS2l0OjpXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQ6OklD
RUNvbm5lY3Rpb25TdGF0ZSBzdGF0ZSkKLXsKLSAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlSWNlQ29u
bmVjdGlvblN0YXRlKHN0YXRpY19jYXN0PFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudDo6
SWNlQ29ubmVjdGlvblN0YXRlPihzdGF0ZSkpOwotfQotCi12b2lkIFJUQ1BlZXJDb25uZWN0aW9u
SGFuZGxlckNocm9taXVtOjpkaWRBZGRSZW1vdGVTdHJlYW0oY29uc3QgV2ViS2l0OjpXZWJNZWRp
YVN0cmVhbSYgd2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yKQotewotICAgIG1fY2xpZW50LT5kaWRB
ZGRSZW1vdGVTdHJlYW0od2ViTWVkaWFTdHJlYW1EZXNjcmlwdG9yKTsKLX0KLQotdm9pZCBSVENQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXJDaHJvbWl1bTo6ZGlkUmVtb3ZlUmVtb3RlU3RyZWFtKGNvbnN0
IFdlYktpdDo6V2ViTWVkaWFTdHJlYW0mIHdlYk1lZGlhU3RyZWFtRGVzY3JpcHRvcikKLXsKLSAg
ICBtX2NsaWVudC0+ZGlkUmVtb3ZlUmVtb3RlU3RyZWFtKHdlYk1lZGlhU3RyZWFtRGVzY3JpcHRv
cik7Ci19Ci0KLXZvaWQgUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW06OmRpZEFkZFJl
bW90ZURhdGFDaGFubmVsKFdlYktpdDo6V2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyKiB3ZWJIYW5k
bGVyKQotewotICAgIEFTU0VSVCh3ZWJIYW5kbGVyKTsKLSAgICBtX2NsaWVudC0+ZGlkQWRkUmVt
b3RlRGF0YUNoYW5uZWwoUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2hyb21pdW06OmNyZWF0ZSh3ZWJI
YW5kbGVyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9jaHJvbWl1bS9SVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDaHJvbWl1bS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1JUQ1BlZXJD
b25uZWN0aW9uSGFuZGxlckNocm9taXVtLmgJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nocm9taXVtL1JUQ1BlZXJDb25uZWN0aW9uSGFu
ZGxlckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUlRD
UGVlckNvbm5lY3Rpb25IYW5kbGVyQ2hyb21pdW1faAotI2RlZmluZSBSVENQZWVyQ29ubmVjdGlv
bkhhbmRsZXJDaHJvbWl1bV9oCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVk
ZSAiTWVkaWFTdHJlYW1EZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb25I
YW5kbGVyLmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5o
PgotI2luY2x1ZGUgPHB1YmxpYy9XZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaD4K
LSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJNZWRpYVN0cmVhbTsKLWNsYXNzIFdlYlJUQ0lD
RUNhbmRpZGF0ZTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSVENEYXRhQ2hh
bm5lbEhhbmRsZXI7Ci0KLWNsYXNzIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNocm9taXVtIDog
cHVibGljIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlciwgcHVibGljIFdlYktpdDo6V2ViUlRDUGVl
ckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBSVENQZWVy
Q29ubmVjdGlvbkhhbmRsZXJDaHJvbWl1bShSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQq
KTsKLSAgICB2aXJ0dWFsIH5SVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDaHJvbWl1bSgpOwotCi0g
ICAgYm9vbCBjcmVhdGVXZWJIYW5kbGVyKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6
ZShQYXNzUmVmUHRyPFJUQ0NvbmZpZ3VyYXRpb24+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWlu
dHM+KSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVPZmZlcihQYXNzUmVmUHRy
PFJUQ1Nlc3Npb25EZXNjcmlwdGlvblJlcXVlc3Q+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWlu
dHM+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQW5zd2VyKFBhc3NSZWZQdHI8
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uUmVxdWVzdD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50
cz4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhbERlc2NyaXB0aW9uKFBhc3NS
ZWZQdHI8UlRDVm9pZFJlcXVlc3Q+LCBQYXNzUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkRl
c2NyaXB0b3I+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVtb3RlRGVzY3JpcHRp
b24oUGFzc1JlZlB0cjxSVENWb2lkUmVxdWVzdD4sIFBhc3NSZWZQdHI8UlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uRGVzY3JpcHRvcj4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSVENT
ZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yPiBsb2NhbERlc2NyaXB0aW9uKCkgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3I+
IHJlbW90ZURlc2NyaXB0aW9uKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZUlj
ZShQYXNzUmVmUHRyPFJUQ0NvbmZpZ3VyYXRpb24+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWlu
dHM+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgYWRkSWNlQ2FuZGlkYXRlKFBhc3NSZWZQ
dHI8UlRDSWNlQ2FuZGlkYXRlRGVzY3JpcHRvcj4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9v
bCBhZGRTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbURlc2NyaXB0b3I+LCBQYXNzUmVmUHRy
PE1lZGlhQ29uc3RyYWludHM+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU3Ry
ZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1EZXNjcmlwdG9yPikgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIGdldFN0YXRzKFBhc3NSZWZQdHI8UlRDU3RhdHNSZXF1ZXN0PikgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gY3JlYXRlRGF0
YUNoYW5uZWwoY29uc3QgU3RyaW5nJiBsYWJlbCwgYm9vbCByZWxpYWJsZSkgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBQYXNzT3duUHRyPFJUQ0RUTUZTZW5kZXJIYW5kbGVyPiBjcmVhdGVEVE1GU2Vu
ZGVyKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1Db21wb25lbnQ+KSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgc3RvcCgpIE9WRVJSSURFOwotCi0gICAgLy8gV2ViS2l0OjpXZWJSVENQZWVyQ29u
bmVjdGlvbkhhbmRsZXJDbGllbnQgaW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVhbCB2b2lkIG5l
Z290aWF0aW9uTmVlZGVkKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEdlbmVyYXRl
SUNFQ2FuZGlkYXRlKGNvbnN0IFdlYktpdDo6V2ViUlRDSUNFQ2FuZGlkYXRlJikgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVNpZ25hbGluZ1N0YXRlKFdlYktpdDo6V2ViUlRD
UGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50OjpTaWduYWxpbmdTdGF0ZSkgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUlDRUdhdGhlcmluZ1N0YXRlKFdlYktpdDo6V2ViUlRD
UGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50OjpJQ0VHYXRoZXJpbmdTdGF0ZSkgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUlDRUNvbm5lY3Rpb25TdGF0ZShXZWJLaXQ6Oldl
YlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudDo6SUNFQ29ubmVjdGlvblN0YXRlKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkUmVtb3RlU3RyZWFtKGNvbnN0IFdlYktpdDo6
V2ViTWVkaWFTdHJlYW0mKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlUmVt
b3RlU3RyZWFtKGNvbnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW0mKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkQWRkUmVtb3RlRGF0YUNoYW5uZWwoV2ViS2l0OjpXZWJSVENEYXRhQ2hh
bm5lbEhhbmRsZXIqKSBPVkVSUklERTsKLQotICAgIHN0YXRpYyBXZWJLaXQ6OldlYlJUQ1BlZXJD
b25uZWN0aW9uSGFuZGxlciogdG9XZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIoUlRDUGVlckNv
bm5lY3Rpb25IYW5kbGVyKik7Ci0KLXByaXZhdGU6Ci0gICAgT3duUHRyPFdlYktpdDo6V2ViUlRD
UGVlckNvbm5lY3Rpb25IYW5kbGVyPiBtX3dlYkhhbmRsZXI7Ci0gICAgUlRDUGVlckNvbm5lY3Rp
b25IYW5kbGVyQ2xpZW50KiBtX2NsaWVudDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCi0KLSNlbmRpZiAvLyBSVENQZWVyQ29u
bmVjdGlvbkhhbmRsZXJDaHJvbWl1bV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2Nocm9taXVtL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9BdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2Nocm9taXVtL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSwgSW5jLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlX2gKLSNkZWZpbmUgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VfaAotCi0jaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VC
YXNlLmgiCi0jaW5jbHVkZSAiQXV0aGVudGljYXRpb25DbGllbnQuaCIKLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlIDogcHVibGljIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZSB7Ci0gICAg
cHVibGljOgotICAgICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpIHt9Ci0gICAgICAgIEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYsIGNvbnN0IENyZWRl
bnRpYWwmIHByb3Bvc2VkQ3JlZGVudGlhbCwgdW5zaWduZWQgcHJldmlvdXNGYWlsdXJlQ291bnQs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBSZXNvdXJjZUVycm9yJik7Ci0KLSAgICAg
ICAgQXV0aGVudGljYXRpb25DbGllbnQqIGF1dGhlbnRpY2F0aW9uQ2xpZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgZnJpZW5kIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZTsKLSAgICAgICAg
c3RhdGljIGJvb2wgcGxhdGZvcm1Db21wYXJlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLQotICAgICAgICBSZWZQdHI8QXV0
aGVudGljYXRpb25DbGllbnQ+IG1fYXV0aGVudGljYXRpb25DbGllbnQ7Ci0gICAgfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2hyb21pdW0vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VDaHJvbWl1bS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9B
dXRoZW50aWNhdGlvbkNoYWxsZW5nZUNocm9taXVtLmNwcAkocmV2aXNpb24gMTQ3NzMyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9BdXRoZW50aWNhdGlvbkNo
YWxsZW5nZUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OnBs
YXRmb3JtQ29tcGFyZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9CbG9iUmVnaXN0cnlQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9CbG9iUmVnaXN0cnlQcm94eS5jcHAJKHJldmlzaW9u
IDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQmxv
YlJlZ2lzdHJ5UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQkxPQikKLQotI2luY2x1ZGUgIkJsb2JSZWdpc3Ry
eVByb3h5LmgiCi0KLSNpbmNsdWRlICJCbG9iRGF0YS5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNp
bmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgot
I2luY2x1ZGUgPHB1YmxpYy9XZWJCbG9iRGF0YS5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJCbG9i
UmVnaXN0cnkuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMLmg+Ci0jaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotQmxvYlJlZ2lzdHJ5JiBibG9iUmVnaXN0cnkoKQotewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChCbG9iUmVnaXN0cnlQcm94
eSwgaW5zdGFuY2UsICgpKTsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19Ci0KLUJsb2JSZWdpc3Ry
eVByb3h5OjpCbG9iUmVnaXN0cnlQcm94eSgpCi0gICAgOiBtX3dlYkJsb2JSZWdpc3RyeShXZWJL
aXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmJsb2JSZWdpc3RyeSgpKQotewotfQotCi12b2lkIEJs
b2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsLCBQYXNzT3du
UHRyPEJsb2JEYXRhPiBibG9iRGF0YSkKLXsKLSAgICBpZiAobV93ZWJCbG9iUmVnaXN0cnkpIHsK
LSAgICAgICAgV2ViS2l0OjpXZWJCbG9iRGF0YSB3ZWJCbG9iRGF0YShibG9iRGF0YSk7Ci0gICAg
ICAgIG1fd2ViQmxvYlJlZ2lzdHJ5LT5yZWdpc3RlckJsb2JVUkwodXJsLCB3ZWJCbG9iRGF0YSk7
Ci0gICAgfQotfQotCi12b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkwoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpCi17Ci0gICAgaWYgKG1fd2ViQmxvYlJl
Z2lzdHJ5KQotICAgICAgICBtX3dlYkJsb2JSZWdpc3RyeS0+cmVnaXN0ZXJCbG9iVVJMKHVybCwg
c3JjVVJMKTsKLX0KLQotdm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6dW5yZWdpc3RlckJsb2JVUkwo
Y29uc3QgS1VSTCYgdXJsKQotewotICAgIGlmIChtX3dlYkJsb2JSZWdpc3RyeSkKLSAgICAgICAg
bV93ZWJCbG9iUmVnaXN0cnktPnVucmVnaXN0ZXJCbG9iVVJMKHVybCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2Nocm9taXVtL0Jsb2JSZWdpc3RyeVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9CbG9iUmVnaXN0cnlQcm94eS5oCShy
ZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9t
aXVtL0Jsb2JSZWdpc3RyeVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgQmxvYlJlZ2lzdHJ5UHJveHlfaAotI2RlZmluZSBCbG9iUmVnaXN0cnlQcm94eV9oCi0K
LSNpZiBFTkFCTEUoQkxPQikKLQotI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsgY2xhc3MgV2ViQmxvYlJlZ2lzdHJ5OyB9Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgQmxvYlJlZ2lzdHJ5UHJveHkgOiBwdWJsaWMgQmxvYlJlZ2lzdHJ5IHsKLXB1
YmxpYzoKLSAgICBCbG9iUmVnaXN0cnlQcm94eSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHJlZ2lz
dGVyQmxvYlVSTChjb25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pOwotICAgIHZpcnR1
YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHNyY1VSTCk7
Ci0gICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmKTsKLQotcHJp
dmF0ZToKLSAgICB2aXJ0dWFsIH5CbG9iUmVnaXN0cnlQcm94eSgpIHsgfQotCi0gICAgV2ViS2l0
OjpXZWJCbG9iUmVnaXN0cnkqIG1fd2ViQmxvYlJlZ2lzdHJ5OwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEJMT0IpCi0KLSNlbmRpZiAvLyBCbG9iUmVn
aXN0cnlQcm94eV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9t
aXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2aXNpb24g
MTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29r
aWVKYXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTI3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgotCi0jaW5jbHVkZSAiQ29v
a2llLmgiCi0jaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKLSNpbmNsdWRlIDxwdWJsaWMv
UGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViQ29va2llLmg+Ci0jaW5jbHVkZSA8cHVi
bGljL1dlYkNvb2tpZUphci5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkwuaD4KLSNpbmNsdWRl
IDxwdWJsaWMvV2ViVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBzZXRD
b29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0
IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY29va2llU3RyKQotewotICAgIGlmICghc2Vzc2lvbi5jb250ZXh0KCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBXZWJLaXQ6OldlYkNvb2tpZUphciogY29va2llSmFyID0gc2Vzc2lvbi5jb250
ZXh0KCktPmNvb2tpZUphcigpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUph
ci0+c2V0Q29va2llKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvb2tpZVN0cik7Ci19Ci0K
LVN0cmluZyBjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lv
biwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IEtVUkwmIHVybCkKLXsK
LSAgICBpZiAoIXNlc3Npb24uY29udGV4dCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0g
ICAgU3RyaW5nIHJlc3VsdDsKLSAgICBXZWJLaXQ6OldlYkNvb2tpZUphciogY29va2llSmFyID0g
c2Vzc2lvbi5jb250ZXh0KCktPmNvb2tpZUphcigpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAg
ICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llcyh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVz
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBLVVJM
JiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgS1VSTCYgdXJsKQotewotICAgIGlmICghc2Vz
c2lvbi5jb250ZXh0KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBTdHJpbmcgcmVz
dWx0OwotICAgIFdlYktpdDo6V2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBzZXNzaW9uLmNvbnRl
eHQoKS0+Y29va2llSmFyKCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0g
Y29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGZpcnN0UGFydHlG
b3JDb29raWVzKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIGNvb2tpZXNFbmFibGVk
KGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgS1VSTCYgY29va2ll
VVJMLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKLXsKLSAgICBib29sIHJlc3Vs
dCA9IGZhbHNlOwotICAgIGlmICghc2Vzc2lvbi5jb250ZXh0KCkpCi0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgV2ViS2l0OjpXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IHNlc3Npb24uY29u
dGV4dCgpLT5jb29raWVKYXIoKTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQg
PSBjb29raWVKYXItPmNvb2tpZXNFbmFibGVkKGNvb2tpZVVSTCwgZmlyc3RQYXJ0eUZvckNvb2tp
ZXMpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JD
b29raWVzLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewot
ICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBpZiAoIXNlc3Npb24uY29udGV4dCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJDb29r
aWU+IHdlYkNvb2tpZXM7Ci0gICAgV2ViS2l0OjpXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IHNl
c3Npb24uY29udGV4dCgpLT5jb29raWVKYXIoKTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAg
ICBjb29raWVKYXItPnJhd0Nvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcywgd2ViQ29v
a2llcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdlYkNvb2tpZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNv
b2tpZXNbaV07Ci0gICAgICAgIENvb2tpZSBjb29raWUod2ViQ29va2llLm5hbWUsIHdlYkNvb2tp
ZS52YWx1ZSwgd2ViQ29va2llLmRvbWFpbiwgd2ViQ29va2llLnBhdGgsIHdlYkNvb2tpZS5leHBp
cmVzLCB3ZWJDb29raWUuaHR0cE9ubHksIHdlYkNvb2tpZS5zZWN1cmUsIHdlYkNvb2tpZS5zZXNz
aW9uKTsKLSAgICAgICAgcmF3Q29va2llcy5hcHBlbmQoY29va2llKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgc2Vzc2lvbiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUp
Ci17Ci0gICAgaWYgKCFzZXNzaW9uLmNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdl
YktpdDo6V2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBzZXNzaW9uLmNvbnRleHQoKS0+Y29va2ll
SmFyKCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5kZWxldGVDb29r
aWUodXJsLCBjb29raWVOYW1lKTsKLX0KLQotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhj
b25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVz
Ki8pCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKLX0KLQotdm9pZCBkZWxl
dGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3Qg
U3RyaW5nJiAvKmhvc3RuYW1lKi8pCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50
ZWQKLX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
biYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9ETlNDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jaHJvbWl1bS9ETlNDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDE0NzczMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vRE5TQ2hyb21pdW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGluIEphY2tzb24gIDxjb2xsaW5qQHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRE5TLmgiCi0KLSNpbmNsdWRlIDxwdWJsaWMvUGxh
dGZvcm0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIHByZWZldGNoRE5TKGNvbnN0
IFN0cmluZyYgaG9zdG5hbWUpCi17Ci0gICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5w
cmVmZXRjaEhvc3ROYW1lKGhvc3RuYW1lKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZUVy
cm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9SZXNvdXJjZUVycm9yLmgJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VFcnJvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29v
Z2xlLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUmVzb3VyY2VFcnJvcl9oCi0jZGVmaW5lIFJlc291
cmNlRXJyb3JfaAotCi0jaW5jbHVkZSAiUmVzb3VyY2VFcnJvckJhc2UuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0gICAgY2xhc3MgUmVzb3VyY2VFcnJvciA6IHB1YmxpYyBSZXNvdXJjZUVy
cm9yQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBSZXNvdXJjZUVycm9yKCkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgUmVzb3VyY2VFcnJvcihjb25zdCBTdHJpbmcmIGRvbWFp
biwgaW50IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBmYWlsaW5nVVJMLCBjb25zdCBTdHJpbmcm
IGxvY2FsaXplZERlc2NyaXB0aW9uKQotICAgICAgICAgICAgOiBSZXNvdXJjZUVycm9yQmFzZShk
b21haW4sIGVycm9yQ29kZSwgZmFpbGluZ1VSTCwgbG9jYWxpemVkRGVzY3JpcHRpb24pCi0gICAg
ICAgIHsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIFJl
c291cmNlRXJyb3JCYXNlOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291
cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2Nocm9taXVtL1Jlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gMTQ3NzMyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZUhhbmRsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLQotI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlJl
c291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0LmgiCi0j
aW5jbHVkZSAiV3JhcHBlZFJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlIDxwdWJsaWMvUGxh
dGZvcm0uaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMRXJyb3IuaD4KLSNpbmNsdWRlIDxwdWJs
aWMvV2ViVVJMTG9hZGVyLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlVSTExvYWRlckNsaWVudC5o
PgotI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkxSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dl
YlVSTFJlc3BvbnNlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotLy8gUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bDo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbChOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50
KQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3JlcXVlc3QocmVxdWVzdCkKLSAg
ICAsIG1fb3duZXIoMCkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fc3RhdGUoQ29u
bmVjdGlvblN0YXRlTmV3KQotewotfQotCi12b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OnN0
YXJ0KCkKLXsKLSAgICBpZiAobV9zdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGVOZXcpCi0gICAgICAg
IENSQVNIKCk7Ci0gICAgbV9zdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZVN0YXJ0ZWQ7Ci0KLSAgICBt
X2xvYWRlciA9IGFkb3B0UHRyKFBsYXRmb3JtOjpjdXJyZW50KCktPmNyZWF0ZVVSTExvYWRlcigp
KTsKLSAgICBBU1NFUlQobV9sb2FkZXIpOwotCi0gICAgV3JhcHBlZFJlc291cmNlUmVxdWVzdCB3
cmFwcGVkUmVxdWVzdChtX3JlcXVlc3QpOwotICAgIHdyYXBwZWRSZXF1ZXN0LnNldEFsbG93U3Rv
cmVkQ3JlZGVudGlhbHMoYWxsb3dTdG9yZWRDcmVkZW50aWFscygpKTsKLSAgICBtX2xvYWRlci0+
bG9hZEFzeW5jaHJvbm91c2x5KHdyYXBwZWRSZXF1ZXN0LCB0aGlzKTsKLX0KLQotdm9pZCBSZXNv
dXJjZUhhbmRsZUludGVybmFsOjpjYW5jZWwoKQotewotICAgIG1fc3RhdGUgPSBDb25uZWN0aW9u
U3RhdGVDYW5jZWxlZDsKLSAgICBtX2xvYWRlci0+Y2FuY2VsKCk7Ci0KLSAgICAvLyBEbyBub3Qg
bWFrZSBhbnkgZnVydGhlciBjYWxscyB0byB0aGUgY2xpZW50LgotICAgIG1fY2xpZW50ID0gMDsK
LX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wg
dmFsdWUpCi17Ci0gICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodmFsdWUpOwotfQotCi12
b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZENoYW5nZVByaW9yaXR5KFdlYlVSTFJlcXVl
c3Q6OlByaW9yaXR5IG5ld1ByaW9yaXR5KQotewotICAgIG1fbG9hZGVyLT5kaWRDaGFuZ2VQcmlv
cml0eShuZXdQcmlvcml0eSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6YWxs
b3dTdG9yZWRDcmVkZW50aWFscygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY2xpZW50ICYmIG1f
Y2xpZW50LT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShtX293bmVyKTsKLX0KLQotdm9pZCBS
ZXNvdXJjZUhhbmRsZUludGVybmFsOjp3aWxsU2VuZFJlcXVlc3QoCi0gICAgV2ViVVJMTG9hZGVy
KiwgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViVVJMUmVzcG9uc2UmIHJlc3BvbnNl
KQotewotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgQVNTRVJUKCFyZXF1ZXN0LmlzTnVsbCgp
KTsKLSAgICBBU1NFUlQoIXJlc3BvbnNlLmlzTnVsbCgpKTsKLSAgICBtX2NsaWVudC0+d2lsbFNl
bmRSZXF1ZXN0KG1fb3duZXIsIHJlcXVlc3QudG9NdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIHJl
c3BvbnNlLnRvUmVzb3VyY2VSZXNwb25zZSgpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUlu
dGVybmFsOjpkaWRTZW5kRGF0YSgKLSAgICBXZWJVUkxMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxv
bmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQotewot
ICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKG1fb3duZXIs
IGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRs
ZUludGVybmFsOjpkaWRSZWNlaXZlUmVzcG9uc2UoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJM
UmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgQVNTRVJU
KCFyZXNwb25zZS5pc051bGwoKSk7Ci0gICAgYm9vbCBpc011bHRpcGFydCA9IHJlc3BvbnNlLmlz
TXVsdGlwYXJ0UGF5bG9hZCgpOwotICAgIGJvb2wgaXNWYWxpZFN0YXRlVHJhbnNpdGlvbiA9ICht
X3N0YXRlID09IENvbm5lY3Rpb25TdGF0ZVN0YXJ0ZWQgfHwgbV9zdGF0ZSA9PSBDb25uZWN0aW9u
U3RhdGVSZWNlaXZlZFJlc3BvbnNlKTsKLSAgICAvLyBJbiB0aGUgY2FzZSBvZiBtdWx0aXBhcnQg
bG9hZHMsIGNhbGxzIHRvIGRpZFJlY2VpdmVEYXRhICYgZGlkUmVjZWl2ZVJlc3BvbnNlIGNhbiBi
ZSBpbnRlcmxlYXZlZC4KLSAgICBpZiAoIWlzTXVsdGlwYXJ0ICYmICFpc1ZhbGlkU3RhdGVUcmFu
c2l0aW9uKQotICAgICAgICBDUkFTSCgpOwotICAgIG1fc3RhdGUgPSBDb25uZWN0aW9uU3RhdGVS
ZWNlaXZlZFJlc3BvbnNlOwotICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UobV9vd25l
ciwgcmVzcG9uc2UudG9SZXNvdXJjZVJlc3BvbnNlKCkpOwotfQotCi12b2lkIFJlc291cmNlSGFu
ZGxlSW50ZXJuYWw6OmRpZERvd25sb2FkRGF0YShXZWJVUkxMb2FkZXIqLCBpbnQgZGF0YUxlbmd0
aCkKLXsKLSAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIGlmIChtX3N0YXRlICE9IENvbm5lY3Rp
b25TdGF0ZVJlY2VpdmVkUmVzcG9uc2UpCi0gICAgICAgIENSQVNIKCk7Ci0KLSAgICBtX2NsaWVu
dC0+ZGlkRG93bmxvYWREYXRhKG1fb3duZXIsIGRhdGFMZW5ndGgpOwotfQotCi12b2lkIFJlc291
cmNlSGFuZGxlSW50ZXJuYWw6OmRpZFJlY2VpdmVEYXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNo
YXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoLCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpCi17Ci0gICAg
QVNTRVJUKG1fY2xpZW50KTsKLSAgICBpZiAobV9zdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGVSZWNl
aXZlZFJlc3BvbnNlICYmIG1fc3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlUmVjZWl2aW5nRGF0YSkK
LSAgICAgICAgQ1JBU0goKTsKLSAgICBtX3N0YXRlID0gQ29ubmVjdGlvblN0YXRlUmVjZWl2aW5n
RGF0YTsKLQotICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShtX293bmVyLCBkYXRhLCBkYXRh
TGVuZ3RoLCBlbmNvZGVkRGF0YUxlbmd0aCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbDo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIq
IGRhdGEsIGludCBkYXRhTGVuZ3RoKQotewotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgaWYg
KG1fc3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlUmVjZWl2ZWRSZXNwb25zZSAmJiBtX3N0YXRlICE9
IENvbm5lY3Rpb25TdGF0ZVJlY2VpdmluZ0RhdGEpCi0gICAgICAgIENSQVNIKCk7Ci0KLSAgICBt
X2NsaWVudC0+ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKG1fb3duZXIsIGRhdGEsIGRhdGFMZW5n
dGgpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZEZpbmlzaExvYWRpbmco
V2ViVVJMTG9hZGVyKiwgZG91YmxlIGZpbmlzaFRpbWUpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50
KTsKLSAgICBpZiAobV9zdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGVSZWNlaXZlZFJlc3BvbnNlICYm
IG1fc3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlUmVjZWl2aW5nRGF0YSkKLSAgICAgICAgQ1JBU0go
KTsKLSAgICBtX3N0YXRlID0gQ29ubmVjdGlvblN0YXRlRmluaXNoZWRMb2FkaW5nOwotICAgIG1f
Y2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKG1fb3duZXIsIGZpbmlzaFRpbWUpOwotfQotCi12b2lk
IFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZEZhaWwoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2Vi
VVJMRXJyb3ImIGVycm9yKQotewotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgbV9zdGF0ZSA9
IENvbm5lY3Rpb25TdGF0ZUZhaWxlZDsKLSAgICBtX2NsaWVudC0+ZGlkRmFpbChtX293bmVyLCBl
cnJvcik7Ci19Ci0KLVJlc291cmNlSGFuZGxlSW50ZXJuYWwqIFJlc291cmNlSGFuZGxlSW50ZXJu
YWw6OkZyb21SZXNvdXJjZUhhbmRsZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQotewotICAgIHJl
dHVybiBoYW5kbGUtPmQuZ2V0KCk7Ci19Ci0KLS8vIFJlc291cmNlSGFuZGxlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVz
b3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGll
bnQsIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50U25pZmYpCi0gICAgOiBk
KGFkb3B0UHRyKG5ldyBSZXNvdXJjZUhhbmRsZUludGVybmFsKGNvbnRleHQsIHJlcXVlc3QsIGNs
aWVudCkpKQotewotICAgIGQtPnNldE93bmVyKHRoaXMpOwotCi0gICAgLy8gRklYTUU6IEZpZ3Vy
ZSBvdXQgd2hhdCB0byBkbyB3aXRoIHRoZSBib29sIHBhcmFtcy4KLX0KLQotUGFzc1JlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGRlZmVyc0xvYWRpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKQotewotICAgIFJlZlB0cjxSZXNvdXJj
ZUhhbmRsZT4gbmV3SGFuZGxlID0gYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlKAotICAgICAg
ICBjb250ZXh0LCByZXF1ZXN0LCBjbGllbnQsIGRlZmVyc0xvYWRpbmcsIHNob3VsZENvbnRlbnRT
bmlmZikpOwotCi0gICAgaWYgKG5ld0hhbmRsZS0+c3RhcnQoKSkKLSAgICAgICAgcmV0dXJuIG5l
d0hhbmRsZS5yZWxlYXNlKCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotUmVzb3VyY2VSZXF1ZXN0
JiBSZXNvdXJjZUhhbmRsZTo6Zmlyc3RSZXF1ZXN0KCkKLXsKLSAgICByZXR1cm4gZC0+cmVxdWVz
dCgpOwotfQotCi1OZXR3b3JraW5nQ29udGV4dCogUmVzb3VyY2VIYW5kbGU6OmNvbnRleHQoKSBj
b25zdAotewotICAgIHJldHVybiBkLT5jb250ZXh0KCk7Ci19Ci0KLVJlc291cmNlSGFuZGxlQ2xp
ZW50KiBSZXNvdXJjZUhhbmRsZTo6Y2xpZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZC0+Y2xp
ZW50KCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudChSZXNvdXJjZUhhbmRs
ZUNsaWVudCogY2xpZW50KQotewotICAgIGQtPnNldENsaWVudChjbGllbnQpOwotfQotCi12b2lk
IFJlc291cmNlSGFuZGxlOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKQotewotICAgIC8vIFJlc291cmNlSGFuZGxlIG5ldmVyIHVzZXMgYXN5bmMgY2xpZW50
IGNhbGxzIG9uIENocm9taXVtIHlldC4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
dm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShi
b29sKQotewotICAgIC8vIFJlc291cmNlSGFuZGxlIG5ldmVyIHVzZXMgYXN5bmMgY2xpZW50IGNh
bGxzIG9uIENocm9taXVtIHlldC4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6c2V0RGVmZXJzTG9hZGluZyhib29sIHZhbHVlKQotewotICAgIGQt
PnNldERlZmVyc0xvYWRpbmcodmFsdWUpOwotfQotCi1ib29sIFJlc291cmNlSGFuZGxlOjpzdGFy
dCgpCi17Ci0gICAgaWYgKCFkLT5jb250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGQtPnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVzb3VyY2VIYW5k
bGU6Omhhc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGU6OmNsZWFyQXV0aGVudGljYXRpb24oKQotewot
fQotCi12b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQotewotICAgIGQtPmNhbmNlbCgpOwot
fQotCi1SZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKCkKLXsKLSAgICBkLT5zZXRPd25l
cigwKTsKLX0KLQotYm9vbCBSZXNvdXJjZUhhbmRsZTo6bG9hZHNCbG9ja2VkKCkKLXsKLSAgICBy
ZXR1cm4gZmFsc2U7IC8vIFRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBzeW5jIFhNTEh0dHBS
ZXF1ZXN0Li4uCi19Ci0KLS8vIHN0YXRpYwotdm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VFcnJvciYgZXJyb3IsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8Y2hhcj4mIGRhdGEpCi17Ci0gICAgT3duUHRyPFdlYlVSTExvYWRlcj4gbG9h
ZGVyID0gYWRvcHRQdHIoUGxhdGZvcm06OmN1cnJlbnQoKS0+Y3JlYXRlVVJMTG9hZGVyKCkpOwot
ICAgIEFTU0VSVChsb2FkZXIpOwotCi0gICAgV3JhcHBlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0
SW4ocmVxdWVzdCk7Ci0gICAgcmVxdWVzdEluLnNldEFsbG93U3RvcmVkQ3JlZGVudGlhbHMoc3Rv
cmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscyk7Ci0gICAgV3JhcHBlZFJl
c291cmNlUmVzcG9uc2UgcmVzcG9uc2VPdXQocmVzcG9uc2UpOwotICAgIFdlYlVSTEVycm9yIGVy
cm9yT3V0OwotICAgIFdlYkRhdGEgZGF0YU91dDsKLQotICAgIGxvYWRlci0+bG9hZFN5bmNocm9u
b3VzbHkocmVxdWVzdEluLCByZXNwb25zZU91dCwgZXJyb3JPdXQsIGRhdGFPdXQpOwotCi0gICAg
ZXJyb3IgPSBlcnJvck91dDsKLSAgICBkYXRhLmNsZWFyKCk7Ci0gICAgZGF0YS5hcHBlbmQoZGF0
YU91dC5kYXRhKCksIGRhdGFPdXQuc2l6ZSgpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZTo6
ZGlkQ2hhbmdlUHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbmV3UHJpb3JpdHkpCi17Ci0g
ICAgZC0+ZGlkQ2hhbmdlUHJpb3JpdHkoc3RhdGljX2Nhc3Q8V2ViVVJMUmVxdWVzdDo6UHJpb3Jp
dHk+KG5ld1ByaW9yaXR5KSk7Ci19Ci0KLS8vIHN0YXRpYwotdm9pZCBSZXNvdXJjZUhhbmRsZTo6
Y2FjaGVNZXRhZGF0YShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgVmVj
dG9yPGNoYXI+JiBkYXRhKQotewotICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y2Fj
aGVNZXRhZGF0YShyZXNwb25zZS51cmwoKSwgcmVzcG9uc2UucmVzcG9uc2VUaW1lKCksIGRhdGEu
ZGF0YSgpLCBkYXRhLnNpemUoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2hyb21pdW0vUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCShyZXZpc2lvbiAxNDc3MzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlSGFuZGxlSW50
ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbF9oCi0jZGVmaW5lIFJlc291cmNlSGFuZGxlSW50ZXJuYWxfaAotCi0jaW5j
bHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYkNvbW1vbi5oPgot
I2luY2x1ZGUgPHB1YmxpYy9XZWJVUkxMb2FkZXIuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViVVJM
TG9hZGVyQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlVSTFJlcXVlc3QuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBOZXR3b3JraW5nQ29udGV4dDsKLWNsYXNzIFJlc291
cmNlSGFuZGxlOwotY2xhc3MgUmVzb3VyY2VIYW5kbGVDbGllbnQ7Ci0KLWNsYXNzIFJlc291cmNl
SGFuZGxlSW50ZXJuYWwgOiBwdWJsaWMgV2ViS2l0OjpXZWJVUkxMb2FkZXJDbGllbnQgewotcHVi
bGljOgotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwoTmV0d29ya2luZ0NvbnRleHQqLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCopOwotCi0gICAgdmlydHVh
bCB+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpIHsgfQotCi0gICAgdm9pZCBzdGFydCgpOwotICAg
IHZvaWQgY2FuY2VsKCk7Ci0gICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOwotICAgIGJv
b2wgYWxsb3dTdG9yZWRDcmVkZW50aWFscygpIGNvbnN0OwotICAgIHZvaWQgZGlkQ2hhbmdlUHJp
b3JpdHkoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjpQcmlvcml0eSk7Ci0KLSAgICAvLyBXZWJVUkxM
b2FkZXJDbGllbnQgbWV0aG9kczoKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFdl
YktpdDo6V2ViVVJMTG9hZGVyKiwgV2ViS2l0OjpXZWJVUkxSZXF1ZXN0JiwgY29uc3QgV2ViS2l0
OjpXZWJVUkxSZXNwb25zZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShXZWJLaXQ6
OldlYlVSTExvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxv
bmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoV2ViS2l0OjpXZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJLaXQ6OldlYlVSTFJlc3Bv
bnNlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZERvd25sb2FkRGF0YShXZWJLaXQ6OldlYlVSTExv
YWRlciosIGludCBkYXRhTGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEo
V2ViS2l0OjpXZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCwg
aW50IGVuY29kZWREYXRhTGVuZ3RoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2Fj
aGVkTWV0YWRhdGEoV2ViS2l0OjpXZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQg
ZGF0YUxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoV2ViS2l0OjpX
ZWJVUkxMb2FkZXIqLCBkb3VibGUgZmluaXNoVGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZh
aWwoV2ViS2l0OjpXZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJLaXQ6OldlYlVSTEVycm9yJik7Ci0K
LSAgICBlbnVtIENvbm5lY3Rpb25TdGF0ZSB7Ci0gICAgICAgIENvbm5lY3Rpb25TdGF0ZU5ldywK
LSAgICAgICAgQ29ubmVjdGlvblN0YXRlU3RhcnRlZCwKLSAgICAgICAgQ29ubmVjdGlvblN0YXRl
UmVjZWl2ZWRSZXNwb25zZSwKLSAgICAgICAgQ29ubmVjdGlvblN0YXRlUmVjZWl2aW5nRGF0YSwK
LSAgICAgICAgQ29ubmVjdGlvblN0YXRlRmluaXNoZWRMb2FkaW5nLAotICAgICAgICBDb25uZWN0
aW9uU3RhdGVDYW5jZWxlZCwKLSAgICAgICAgQ29ubmVjdGlvblN0YXRlRmFpbGVkLAotICAgIH07
Ci0KLSAgICB2b2lkIHNldE93bmVyKFJlc291cmNlSGFuZGxlKiBvd25lcikgeyBtX293bmVyID0g
b3duZXI7IH0KLSAgICBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QoKSB7IHJldHVybiBtX3JlcXVl
c3Q7IH0KLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4g
bV9jbGllbnQ7IH0KLSAgICB2b2lkIHNldENsaWVudChSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xp
ZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9Ci0gICAgV2ViS2l0OjpXZWJVUkxMb2FkZXIqIGxv
YWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZGVyLmdldCgpOyB9Ci0gICAgTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KLQotICAg
IHN0YXRpYyBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBGcm9tUmVzb3VyY2VIYW5kbGUoUmVzb3Vy
Y2VIYW5kbGUqKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8TmV0d29ya2luZ0NvbnRleHQ+IG1f
Y29udGV4dDsKLSAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0OwotICAgIFJlc291cmNlSGFu
ZGxlKiBtX293bmVyOwotICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBtX2NsaWVudDsKLSAgICBP
d25QdHI8V2ViS2l0OjpXZWJVUkxMb2FkZXI+IG1fbG9hZGVyOwotCi0gICAgLy8gVXNlZCBmb3Ig
c2FuaXR5IGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBleHBlcmllbmNlIGlsbGVnYWwg
c3RhdGUKLSAgICAvLyB0cmFuc2l0aW9ucy4KLSAgICBDb25uZWN0aW9uU3RhdGUgbV9zdGF0ZTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVxdWVzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJj
ZVJlcXVlc3QuY3BwCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3Qu
aCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotLy8gVGhpcyBpcyB1c2VkIGJ5IHRoZSBsb2FkZXIgdG8gY29udHJv
bCB0aGUgbnVtYmVyIG9mIGlzc3VlZCBwYXJhbGxlbCBsb2FkIHJlcXVlc3RzLiAKLXVuc2lnbmVk
IGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKQotewotICAgIC8v
IFRoZSBjaHJvbWl1bSBuZXR3b3JrIHN0YWNrIGFscmVhZHkgaGFuZGxlcyBsaW1pdGluZyB0aGUg
bnVtYmVyIG9mCi0gICAgLy8gcGFyYWxsZWwgcmVxdWVzdHMgcGVyIGhvc3QsIHNvIHRoZXJlJ3Mg
bm8gbmVlZCB0byBkbyBpdCBoZXJlLiAgVGhlcmVmb3JlLAotICAgIC8vIHRoaXMgaXMgc2V0IHRv
IGEgaGlnaCB2YWx1ZSB0aGF0IHNob3VsZCBuZXZlciBiZSBoaXQgaW4gcHJhY3RpY2UuCi0gICAg
cmV0dXJuIDEwMDAwOwotfQotCi1QYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0
RGF0YT4gUmVzb3VyY2VSZXF1ZXN0Ojpkb1BsYXRmb3JtQ29weURhdGEoUGFzc093blB0cjxDcm9z
c1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+IGRhdGEpIGNvbnN0Ci17Ci0gICAgZGF0YS0+bV9y
ZXF1ZXN0b3JJRCA9IG1fcmVxdWVzdG9ySUQ7Ci0gICAgZGF0YS0+bV9yZXF1ZXN0b3JQcm9jZXNz
SUQgPSBtX3JlcXVlc3RvclByb2Nlc3NJRDsKLSAgICBkYXRhLT5tX2FwcENhY2hlSG9zdElEID0g
bV9hcHBDYWNoZUhvc3RJRDsKLSAgICBkYXRhLT5tX2hhc1VzZXJHZXN0dXJlID0gbV9oYXNVc2Vy
R2VzdHVyZTsKLSAgICBkYXRhLT5tX2Rvd25sb2FkVG9GaWxlID0gbV9kb3dubG9hZFRvRmlsZTsK
LSAgICBkYXRhLT5tX3RhcmdldFR5cGUgPSBtX3RhcmdldFR5cGU7Ci0gICAgcmV0dXJuIGRhdGE7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1BsYXRmb3JtQWRvcHQoUGFzc093blB0cjxD
cm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+IGRhdGEpCi17Ci0gICAgbV9yZXF1ZXN0b3JJ
RCA9IGRhdGEtPm1fcmVxdWVzdG9ySUQ7Ci0gICAgbV9yZXF1ZXN0b3JQcm9jZXNzSUQgPSBkYXRh
LT5tX3JlcXVlc3RvclByb2Nlc3NJRDsKLSAgICBtX2FwcENhY2hlSG9zdElEID0gZGF0YS0+bV9h
cHBDYWNoZUhvc3RJRDsKLSAgICBtX2hhc1VzZXJHZXN0dXJlID0gZGF0YS0+bV9oYXNVc2VyR2Vz
dHVyZTsKLSAgICBtX2Rvd25sb2FkVG9GaWxlID0gZGF0YS0+bV9kb3dubG9hZFRvRmlsZTsKLSAg
ICBtX3RhcmdldFR5cGUgPSBkYXRhLT5tX3RhcmdldFR5cGU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VS
ZXF1ZXN0OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJ
bmZvKSBjb25zdAotewotICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8s
IHRoaXMsIFBsYXRmb3JtTWVtb3J5VHlwZXM6OkxvYWRlcik7Ci0gICAgUmVzb3VyY2VSZXF1ZXN0
QmFzZTo6cmVwb3J0TWVtb3J5VXNhZ2VCYXNlKG1lbW9yeU9iamVjdEluZm8pOwotICAgIGluZm8u
YWRkTWVtYmVyKG1fZXh0cmFEYXRhLCAiZXh0cmFEYXRhIik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0v
UmVzb3VyY2VSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaAkocmV2aXNpb24gMTQ3NzMyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4K
LSAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBSZXNv
dXJjZVJlcXVlc3RfaAotI2RlZmluZSBSZXNvdXJjZVJlcXVlc3RfaAotCi0jaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0QmFzZS5oIgotCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFz
cyBGcmFtZTsKLQotICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdCA6IHB1YmxpYyBSZXNvdXJjZVJl
cXVlc3RCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIFRoZSB0eXBlIG9mIHRoaXMgUmVz
b3VyY2VSZXF1ZXN0LCBiYXNlZCBvbiBob3cgdGhlIHJlc291cmNlIHdpbGwgYmUgdXNlZC4KLSAg
ICAgICAgZW51bSBUYXJnZXRUeXBlIHsKLSAgICAgICAgICAgIFRhcmdldElzTWFpbkZyYW1lLAot
ICAgICAgICAgICAgVGFyZ2V0SXNTdWJmcmFtZSwKLSAgICAgICAgICAgIFRhcmdldElzU3VicmVz
b3VyY2UsIC8vIFJlc291cmNlIGlzIGEgZ2VuZXJpYyBzdWJyZXNvdXJjZS4gKEdlbmVyYWxseSBh
IHNwZWNpZmljIHR5cGUgc2hvdWxkIGJlIHNwZWNpZmllZCkKLSAgICAgICAgICAgIFRhcmdldElz
U3R5bGVTaGVldCwKLSAgICAgICAgICAgIFRhcmdldElzU2NyaXB0LAotICAgICAgICAgICAgVGFy
Z2V0SXNGb250UmVzb3VyY2UsCi0gICAgICAgICAgICBUYXJnZXRJc0ltYWdlLAotICAgICAgICAg
ICAgVGFyZ2V0SXNPYmplY3QsCi0gICAgICAgICAgICBUYXJnZXRJc01lZGlhLAotICAgICAgICAg
ICAgVGFyZ2V0SXNXb3JrZXIsCi0gICAgICAgICAgICBUYXJnZXRJc1NoYXJlZFdvcmtlciwKLSAg
ICAgICAgICAgIFRhcmdldElzUHJlZmV0Y2gsCi0gICAgICAgICAgICBUYXJnZXRJc0Zhdmljb24s
Ci0gICAgICAgICAgICBUYXJnZXRJc1hIUiwKLSAgICAgICAgICAgIFRhcmdldElzVGV4dFRyYWNr
LAotICAgICAgICAgICAgVGFyZ2V0SXNVbnNwZWNpZmllZCwKLSAgICAgICAgfTsKLQotICAgICAg
ICBjbGFzcyBFeHRyYURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxFeHRyYURhdGE+IHsKLSAgICAg
ICAgcHVibGljOgotICAgICAgICAgICAgdmlydHVhbCB+RXh0cmFEYXRhKCkgeyB9Ci0gICAgICAg
IH07Ci0KLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsKSAKLSAgICAg
ICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZShLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwg
VXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKLSAgICAgICAgICAgICwgbV9yZXF1ZXN0b3JJRCgwKQot
ICAgICAgICAgICAgLCBtX3JlcXVlc3RvclByb2Nlc3NJRCgwKQotICAgICAgICAgICAgLCBtX2Fw
cENhY2hlSG9zdElEKDApCi0gICAgICAgICAgICAsIG1faGFzVXNlckdlc3R1cmUoZmFsc2UpCi0g
ICAgICAgICAgICAsIG1fZG93bmxvYWRUb0ZpbGUoZmFsc2UpCi0gICAgICAgICAgICAsIG1fdGFy
Z2V0VHlwZShUYXJnZXRJc1Vuc3BlY2lmaWVkKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgS1VSTCYgdXJsKSAKLSAgICAgICAgICAgIDogUmVz
b3VyY2VSZXF1ZXN0QmFzZSh1cmwsIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCi0gICAgICAgICAg
ICAsIG1fcmVxdWVzdG9ySUQoMCkKLSAgICAgICAgICAgICwgbV9yZXF1ZXN0b3JQcm9jZXNzSUQo
MCkKLSAgICAgICAgICAgICwgbV9hcHBDYWNoZUhvc3RJRCgwKQotICAgICAgICAgICAgLCBtX2hh
c1VzZXJHZXN0dXJlKGZhbHNlKQotICAgICAgICAgICAgLCBtX2Rvd25sb2FkVG9GaWxlKGZhbHNl
KQotICAgICAgICAgICAgLCBtX3RhcmdldFR5cGUoVGFyZ2V0SXNVbnNwZWNpZmllZCkKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgcG9s
aWN5ID0gVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkgCi0gICAgICAgICAgICA6IFJlc291cmNlUmVx
dWVzdEJhc2UodXJsLCBwb2xpY3kpCi0gICAgICAgICAgICAsIG1fcmVxdWVzdG9ySUQoMCkKLSAg
ICAgICAgICAgICwgbV9yZXF1ZXN0b3JQcm9jZXNzSUQoMCkKLSAgICAgICAgICAgICwgbV9hcHBD
YWNoZUhvc3RJRCgwKQotICAgICAgICAgICAgLCBtX2hhc1VzZXJHZXN0dXJlKGZhbHNlKQotICAg
ICAgICAgICAgLCBtX2Rvd25sb2FkVG9GaWxlKGZhbHNlKQotICAgICAgICAgICAgLCBtX3Rhcmdl
dFR5cGUoVGFyZ2V0SXNVbnNwZWNpZmllZCkKLSAgICAgICAgewotICAgICAgICAgICAgc2V0SFRU
UFJlZmVycmVyKHJlZmVycmVyKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUmVzb3Vy
Y2VSZXF1ZXN0KCkKLSAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZShLVVJMKCksIFVz
ZVByb3RvY29sQ2FjaGVQb2xpY3kpCi0gICAgICAgICAgICAsIG1fcmVxdWVzdG9ySUQoMCkKLSAg
ICAgICAgICAgICwgbV9yZXF1ZXN0b3JQcm9jZXNzSUQoMCkKLSAgICAgICAgICAgICwgbV9hcHBD
YWNoZUhvc3RJRCgwKQotICAgICAgICAgICAgLCBtX2hhc1VzZXJHZXN0dXJlKGZhbHNlKQotICAg
ICAgICAgICAgLCBtX2Rvd25sb2FkVG9GaWxlKGZhbHNlKQotICAgICAgICAgICAgLCBtX3Rhcmdl
dFR5cGUoVGFyZ2V0SXNVbnNwZWNpZmllZCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gQWxsb3dzIHRoZSByZXF1ZXN0IHRvIGJlIG1hdGNoZWQgdXAgd2l0aCBpdHMgcmVxdWVz
dG9yLgotICAgICAgICBpbnQgcmVxdWVzdG9ySUQoKSBjb25zdCB7IHJldHVybiBtX3JlcXVlc3Rv
cklEOyB9Ci0gICAgICAgIHZvaWQgc2V0UmVxdWVzdG9ySUQoaW50IHJlcXVlc3RvcklEKSB7IG1f
cmVxdWVzdG9ySUQgPSByZXF1ZXN0b3JJRDsgfQotCi0gICAgICAgIC8vIFRoZSBwcm9jZXNzIGlk
IG9mIHRoZSBwcm9jZXNzIGZyb20gd2hpY2ggdGhpcyByZXF1ZXN0IG9yaWdpbmF0ZWQuIEluCi0g
ICAgICAgIC8vIHRoZSBjYXNlIG9mIG91dC1vZi1wcm9jZXNzIHBsdWdpbnMsIHRoaXMgYWxsb3dz
IHRvIGxpbmsgYmFjayB0aGUKLSAgICAgICAgLy8gcmVxdWVzdCB0byB0aGUgcGx1Z2luIHByb2Nl
c3MgKGFzIGl0IGlzIHByb2Nlc3NlZCB0aHJvdWdoIGEgcmVuZGVyCi0gICAgICAgIC8vIHZpZXcg
cHJvY2VzcykuCi0gICAgICAgIGludCByZXF1ZXN0b3JQcm9jZXNzSUQoKSBjb25zdCB7IHJldHVy
biBtX3JlcXVlc3RvclByb2Nlc3NJRDsgfQotICAgICAgICB2b2lkIHNldFJlcXVlc3RvclByb2Nl
c3NJRChpbnQgcmVxdWVzdG9yUHJvY2Vzc0lEKSB7IG1fcmVxdWVzdG9yUHJvY2Vzc0lEID0gcmVx
dWVzdG9yUHJvY2Vzc0lEOyB9Ci0KLSAgICAgICAgLy8gQWxsb3dzIHRoZSByZXF1ZXN0IHRvIGJl
IG1hdGNoZWQgdXAgd2l0aCBpdHMgYXBwIGNhY2hlIGhvc3QuCi0gICAgICAgIGludCBhcHBDYWNo
ZUhvc3RJRCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwQ2FjaGVIb3N0SUQ7IH0KLSAgICAgICAgdm9p
ZCBzZXRBcHBDYWNoZUhvc3RJRChpbnQgaWQpIHsgbV9hcHBDYWNoZUhvc3RJRCA9IGlkOyB9Ci0K
LSAgICAgICAgLy8gVHJ1ZSBpZiByZXF1ZXN0IHdhcyB1c2VyIGluaXRpYXRlZC4KLSAgICAgICAg
Ym9vbCBoYXNVc2VyR2VzdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVXNlckdlc3R1cmU7IH0K
LSAgICAgICAgdm9pZCBzZXRIYXNVc2VyR2VzdHVyZShib29sIGhhc1VzZXJHZXN0dXJlKSB7IG1f
aGFzVXNlckdlc3R1cmUgPSBoYXNVc2VyR2VzdHVyZTsgfQotCi0gICAgICAgIC8vIFRydWUgaWYg
cmVxdWVzdCBzaG91bGQgYmUgZG93bmxvYWRlZCB0byBmaWxlLgotICAgICAgICBib29sIGRvd25s
b2FkVG9GaWxlKCkgY29uc3QgeyByZXR1cm4gbV9kb3dubG9hZFRvRmlsZTsgfQotICAgICAgICB2
b2lkIHNldERvd25sb2FkVG9GaWxlKGJvb2wgZG93bmxvYWRUb0ZpbGUpIHsgbV9kb3dubG9hZFRv
RmlsZSA9IGRvd25sb2FkVG9GaWxlOyB9Ci0KLSAgICAgICAgLy8gRXh0cmEgZGF0YSBhc3NvY2lh
dGVkIHdpdGggdGhpcyByZXF1ZXN0LgotICAgICAgICBFeHRyYURhdGEqIGV4dHJhRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fZXh0cmFEYXRhLmdldCgpOyB9Ci0gICAgICAgIHZvaWQgc2V0RXh0cmFE
YXRhKFBhc3NSZWZQdHI8RXh0cmFEYXRhPiBleHRyYURhdGEpIHsgbV9leHRyYURhdGEgPSBleHRy
YURhdGE7IH0KLQotICAgICAgICAvLyBXaGF0IHRoaXMgcmVxdWVzdCBpcyBmb3IuCi0gICAgICAg
IFRhcmdldFR5cGUgdGFyZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0VHlwZTsgfQot
ICAgICAgICB2b2lkIHNldFRhcmdldFR5cGUoVGFyZ2V0VHlwZSB0eXBlKSB7IG1fdGFyZ2V0VHlw
ZSA9IHR5cGU7IH0KLQotICAgICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBSZXNv
dXJjZVJlcXVlc3RCYXNlOwotCi0gICAgICAgIHZvaWQgZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3Qo
KSB7IH0KLSAgICAgICAgdm9pZCBkb1VwZGF0ZVJlc291cmNlUmVxdWVzdCgpIHsgfQotICAgICAg
ICB2b2lkIGRvVXBkYXRlUGxhdGZvcm1IVFRQQm9keSgpIHsgfQotICAgICAgICB2b2lkIGRvVXBk
YXRlUmVzb3VyY2VIVFRQQm9keSgpIHsgfQotCi0gICAgICAgIFBhc3NPd25QdHI8Q3Jvc3NUaHJl
YWRSZXNvdXJjZVJlcXVlc3REYXRhPiBkb1BsYXRmb3JtQ29weURhdGEoUGFzc093blB0cjxDcm9z
c1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+KSBjb25zdDsKLSAgICAgICAgdm9pZCBkb1BsYXRm
b3JtQWRvcHQoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+KTsKLQot
ICAgICAgICBpbnQgbV9yZXF1ZXN0b3JJRDsKLSAgICAgICAgaW50IG1fcmVxdWVzdG9yUHJvY2Vz
c0lEOwotICAgICAgICBpbnQgbV9hcHBDYWNoZUhvc3RJRDsKLSAgICAgICAgYm9vbCBtX2hhc1Vz
ZXJHZXN0dXJlOwotICAgICAgICBib29sIG1fZG93bmxvYWRUb0ZpbGU7Ci0gICAgICAgIFJlZlB0
cjxFeHRyYURhdGE+IG1fZXh0cmFEYXRhOwotICAgICAgICBUYXJnZXRUeXBlIG1fdGFyZ2V0VHlw
ZTsKLSAgICB9OwotCi0gICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YSA6
IHB1YmxpYyBDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGFCYXNlIHsKLSAgICAgICAgaW50
IG1fcmVxdWVzdG9ySUQ7Ci0gICAgICAgIGludCBtX3JlcXVlc3RvclByb2Nlc3NJRDsKLSAgICAg
ICAgaW50IG1fYXBwQ2FjaGVIb3N0SUQ7Ci0gICAgICAgIGJvb2wgbV9oYXNVc2VyR2VzdHVyZTsK
LSAgICAgICAgYm9vbCBtX2Rvd25sb2FkVG9GaWxlOwotICAgICAgICBSZXNvdXJjZVJlcXVlc3Q6
OlRhcmdldFR5cGUgbV90YXJnZXRUeXBlOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9t
aXVtL1Jlc291cmNlUmVzcG9uc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXNwb25zZS5jcHAJKHJldmlzaW9uIDE0
NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3Vy
Y2VSZXNwb25zZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhPiBSZXNvdXJj
ZVJlc3BvbnNlOjpkb1BsYXRmb3JtQ29weURhdGEoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291
cmNlUmVzcG9uc2VEYXRhPiBkYXRhKSBjb25zdAotewotICAgIGRhdGEtPm1fc2VjdXJpdHlJbmZv
ID0gQ1N0cmluZyhtX3NlY3VyaXR5SW5mby5kYXRhKCksIG1fc2VjdXJpdHlJbmZvLmxlbmd0aCgp
KTsKLSAgICBkYXRhLT5tX2h0dHBWZXJzaW9uID0gbV9odHRwVmVyc2lvbjsKLSAgICBkYXRhLT5t
X2FwcENhY2hlSUQgPSBtX2FwcENhY2hlSUQ7Ci0gICAgZGF0YS0+bV9hcHBDYWNoZU1hbmlmZXN0
VVJMID0gbV9hcHBDYWNoZU1hbmlmZXN0VVJMLmNvcHkoKTsKLSAgICBkYXRhLT5tX2lzTXVsdGlw
YXJ0UGF5bG9hZCA9IG1faXNNdWx0aXBhcnRQYXlsb2FkOwotICAgIGRhdGEtPm1fd2FzRmV0Y2hl
ZFZpYVNQRFkgPSBtX3dhc0ZldGNoZWRWaWFTUERZOwotICAgIGRhdGEtPm1fd2FzTnBuTmVnb3Rp
YXRlZCA9IG1fd2FzTnBuTmVnb3RpYXRlZDsKLSAgICBkYXRhLT5tX3dhc0FsdGVybmF0ZVByb3Rv
Y29sQXZhaWxhYmxlID0gbV93YXNBbHRlcm5hdGVQcm90b2NvbEF2YWlsYWJsZTsKLSAgICBkYXRh
LT5tX3dhc0ZldGNoZWRWaWFQcm94eSA9IG1fd2FzRmV0Y2hlZFZpYVByb3h5OwotICAgIGRhdGEt
Pm1fcmVzcG9uc2VUaW1lID0gbV9yZXNwb25zZVRpbWU7Ci0gICAgZGF0YS0+bV9yZW1vdGVJUEFk
ZHJlc3MgPSBtX3JlbW90ZUlQQWRkcmVzcy5pc29sYXRlZENvcHkoKTsKLSAgICBkYXRhLT5tX3Jl
bW90ZVBvcnQgPSBtX3JlbW90ZVBvcnQ7Ci0gICAgLy8gQnVnIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MDM5NyB0aGlzIGRvZXNuJ3Qgc3VwcG9ydCBtX2Rvd25sb2Fk
ZWRGaWxlLAotICAgIC8vIG9yIHdoYXRldmVyIHZhbHVlcyBtYXkgYmUgcHJlc2VudCBpbiB0aGUg
b3BhcXVlIG1fZXh0cmFEYXRhIHN0cnVjdHVyZS4KLSAgICByZXR1cm4gZGF0YTsKLX0KLQotdm9p
ZCBSZXNvdXJjZVJlc3BvbnNlOjpkb1BsYXRmb3JtQWRvcHQoUGFzc093blB0cjxDcm9zc1RocmVh
ZFJlc291cmNlUmVzcG9uc2VEYXRhPiBkYXRhKQotewotICAgIG1fc2VjdXJpdHlJbmZvID0gZGF0
YS0+bV9zZWN1cml0eUluZm87Ci0gICAgbV9odHRwVmVyc2lvbiA9IGRhdGEtPm1faHR0cFZlcnNp
b247Ci0gICAgbV9hcHBDYWNoZUlEID0gZGF0YS0+bV9hcHBDYWNoZUlEOwotICAgIG1fYXBwQ2Fj
aGVNYW5pZmVzdFVSTCA9IGRhdGEtPm1fYXBwQ2FjaGVNYW5pZmVzdFVSTC5jb3B5KCk7Ci0gICAg
bV9pc011bHRpcGFydFBheWxvYWQgPSBkYXRhLT5tX2lzTXVsdGlwYXJ0UGF5bG9hZDsKLSAgICBt
X3dhc0ZldGNoZWRWaWFTUERZID0gZGF0YS0+bV93YXNGZXRjaGVkVmlhU1BEWTsKLSAgICBtX3dh
c05wbk5lZ290aWF0ZWQgPSBkYXRhLT5tX3dhc05wbk5lZ290aWF0ZWQ7Ci0gICAgbV93YXNBbHRl
cm5hdGVQcm90b2NvbEF2YWlsYWJsZSA9IGRhdGEtPm1fd2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFp
bGFibGU7Ci0gICAgbV93YXNGZXRjaGVkVmlhUHJveHkgPSBkYXRhLT5tX3dhc0ZldGNoZWRWaWFQ
cm94eTsKLSAgICBtX3Jlc3BvbnNlVGltZSA9IGRhdGEtPm1fcmVzcG9uc2VUaW1lOwotICAgIG1f
cmVtb3RlSVBBZGRyZXNzID0gZGF0YS0+bV9yZW1vdGVJUEFkZHJlc3M7Ci0gICAgbV9yZW1vdGVQ
b3J0ID0gZGF0YS0+bV9yZW1vdGVQb3J0OwotICAgIC8vIEJ1ZyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzOTcgdGhpcyBkb2Vzbid0IHN1cHBvcnQgbV9kb3dubG9h
ZGVkRmlsZSwKLSAgICAvLyBvciB3aGF0ZXZlciB2YWx1ZXMgbWF5IGJlIHByZXNlbnQgaW4gdGhl
IG9wYXF1ZSBtX2V4dHJhRGF0YSBzdHJ1Y3R1cmUuCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3Vy
Y2VSZXNwb25zZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2hyb21pdW0vUmVzb3VyY2VSZXNwb25zZS5oCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwyMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFJlc291cmNlUmVzcG9uc2Vf
aAotI2RlZmluZSBSZXNvdXJjZVJlc3BvbnNlX2gKLQotI2luY2x1ZGUgIkZpbGUuaCIKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2VCYXNlLmgi
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LSAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlIDogcHVibGljIFJlc291cmNlUmVzcG9uc2VCYXNl
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgdG8gUmVzb3VyY2VS
ZXNwb25zZUJhc2UgYW5kIGltcGxlbWVudCBmb3IgYWxsIHBvcnRzIChzZWUgaGlzdG9yeSBpbiBo
dHRwOi8vd2Via2l0Lm9yZy9iLzg2NTIyKS4KLSAgICAgICAgZW51bSBIVFRQVmVyc2lvbiB7IFVu
a25vd24sIEhUVFBfMF85LCBIVFRQXzFfMCwgSFRUUF8xXzEgfTsKLQotICAgICAgICBjbGFzcyBF
eHRyYURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxFeHRyYURhdGE+IHsKLSAgICAgICAgcHVibGlj
OgotICAgICAgICAgICAgdmlydHVhbCB+RXh0cmFEYXRhKCkgeyB9Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgUmVzb3VyY2VSZXNwb25zZSgpCi0gICAgICAgICAgICA6IG1faHR0cFZlcnNpb24oVW5r
bm93bikKLSAgICAgICAgICAgICwgbV9hcHBDYWNoZUlEKDApCi0gICAgICAgICAgICAsIG1faXNN
dWx0aXBhcnRQYXlsb2FkKGZhbHNlKQotICAgICAgICAgICAgLCBtX3dhc0ZldGNoZWRWaWFTUERZ
KGZhbHNlKQotICAgICAgICAgICAgLCBtX3dhc05wbk5lZ290aWF0ZWQoZmFsc2UpCi0gICAgICAg
ICAgICAsIG1fd2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGUoZmFsc2UpCi0gICAgICAgICAg
ICAsIG1fd2FzRmV0Y2hlZFZpYVByb3h5KGZhbHNlKQotICAgICAgICAgICAgLCBtX3Jlc3BvbnNl
VGltZSgwKQotICAgICAgICAgICAgLCBtX3JlbW90ZVBvcnQoMCkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgUmVzb3VyY2VSZXNwb25zZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCwgY29uc3QgU3RyaW5nJiB0
ZXh0RW5jb2RpbmdOYW1lLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQotICAgICAgICAgICAgOiBS
ZXNvdXJjZVJlc3BvbnNlQmFzZSh1cmwsIG1pbWVUeXBlLCBleHBlY3RlZExlbmd0aCwgdGV4dEVu
Y29kaW5nTmFtZSwgZmlsZW5hbWUpCi0gICAgICAgICAgICAsIG1faHR0cFZlcnNpb24oVW5rbm93
bikKLSAgICAgICAgICAgICwgbV9hcHBDYWNoZUlEKDApCi0gICAgICAgICAgICAsIG1faXNNdWx0
aXBhcnRQYXlsb2FkKGZhbHNlKQotICAgICAgICAgICAgLCBtX3dhc0ZldGNoZWRWaWFTUERZKGZh
bHNlKQotICAgICAgICAgICAgLCBtX3dhc05wbk5lZ290aWF0ZWQoZmFsc2UpCi0gICAgICAgICAg
ICAsIG1fd2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGUoZmFsc2UpCi0gICAgICAgICAgICAs
IG1fd2FzRmV0Y2hlZFZpYVByb3h5KGZhbHNlKQotICAgICAgICAgICAgLCBtX3Jlc3BvbnNlVGlt
ZSgwKQotICAgICAgICAgICAgLCBtX3JlbW90ZVBvcnQoMCkKLSAgICAgICAgewotICAgICAgICB9
Ci0KLSAgICAgICAgSFRUUFZlcnNpb24gaHR0cFZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX2h0
dHBWZXJzaW9uOyB9Ci0gICAgICAgIHZvaWQgc2V0SFRUUFZlcnNpb24oSFRUUFZlcnNpb24gdmVy
c2lvbikgeyBtX2h0dHBWZXJzaW9uID0gdmVyc2lvbjsgfQotCi0gICAgICAgIGNvbnN0IENTdHJp
bmcmIGdldFNlY3VyaXR5SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fc2VjdXJpdHlJbmZvOyB9Ci0g
ICAgICAgIHZvaWQgc2V0U2VjdXJpdHlJbmZvKGNvbnN0IENTdHJpbmcmIHNlY3VyaXR5SW5mbykg
eyBtX3NlY3VyaXR5SW5mbyA9IHNlY3VyaXR5SW5mbzsgfQotCi0gICAgICAgIGxvbmcgbG9uZyBh
cHBDYWNoZUlEKCkgY29uc3QgeyByZXR1cm4gbV9hcHBDYWNoZUlEOyB9Ci0gICAgICAgIHZvaWQg
c2V0QXBwQ2FjaGVJRChsb25nIGxvbmcgaWQpIHsgbV9hcHBDYWNoZUlEID0gaWQ7IH0KLQotICAg
ICAgICBjb25zdCBLVVJMJiBhcHBDYWNoZU1hbmlmZXN0VVJMKCkgY29uc3QgeyByZXR1cm4gbV9h
cHBDYWNoZU1hbmlmZXN0VVJMOyB9Ci0gICAgICAgIHZvaWQgc2V0QXBwQ2FjaGVNYW5pZmVzdFVS
TChjb25zdCBLVVJMJiB1cmwpIHsgbV9hcHBDYWNoZU1hbmlmZXN0VVJMID0gdXJsOyB9Ci0KLSAg
ICAgICAgYm9vbCB3YXNGZXRjaGVkVmlhU1BEWSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzRmV0Y2hl
ZFZpYVNQRFk7IH0KLSAgICAgICAgdm9pZCBzZXRXYXNGZXRjaGVkVmlhU1BEWShib29sIHZhbHVl
KSB7IG1fd2FzRmV0Y2hlZFZpYVNQRFkgPSB2YWx1ZTsgfQotCi0gICAgICAgIGJvb2wgd2FzTnBu
TmVnb3RpYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzTnBuTmVnb3RpYXRlZDsgfQotICAgICAg
ICB2b2lkIHNldFdhc05wbk5lZ290aWF0ZWQoYm9vbCB2YWx1ZSkgeyBtX3dhc05wbk5lZ290aWF0
ZWQgPSB2YWx1ZTsgfQotCi0gICAgICAgIGJvb2wgd2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFi
bGUoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgcmV0dXJuIG1fd2FzQWx0ZXJuYXRlUHJv
dG9jb2xBdmFpbGFibGU7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRXYXNBbHRlcm5hdGVQ
cm90b2NvbEF2YWlsYWJsZShib29sIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgbV93YXNB
bHRlcm5hdGVQcm90b2NvbEF2YWlsYWJsZSA9IHZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ym9vbCB3YXNGZXRjaGVkVmlhUHJveHkoKSBjb25zdCB7IHJldHVybiBtX3dhc0ZldGNoZWRWaWFQ
cm94eTsgfQotICAgICAgICB2b2lkIHNldFdhc0ZldGNoZWRWaWFQcm94eShib29sIHZhbHVlKSB7
IG1fd2FzRmV0Y2hlZFZpYVByb3h5ID0gdmFsdWU7IH0KLQotICAgICAgICBib29sIGlzTXVsdGlw
YXJ0UGF5bG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNNdWx0aXBhcnRQYXlsb2FkOyB9Ci0gICAg
ICAgIHZvaWQgc2V0SXNNdWx0aXBhcnRQYXlsb2FkKGJvb2wgdmFsdWUpIHsgbV9pc011bHRpcGFy
dFBheWxvYWQgPSB2YWx1ZTsgfQotCi0gICAgICAgIGRvdWJsZSByZXNwb25zZVRpbWUoKSBjb25z
dCB7IHJldHVybiBtX3Jlc3BvbnNlVGltZTsgfQotICAgICAgICB2b2lkIHNldFJlc3BvbnNlVGlt
ZShkb3VibGUgcmVzcG9uc2VUaW1lKSB7IG1fcmVzcG9uc2VUaW1lID0gcmVzcG9uc2VUaW1lOyB9
Ci0KLSAgICAgICAgY29uc3QgU3RyaW5nJiByZW1vdGVJUEFkZHJlc3MoKSBjb25zdCB7IHJldHVy
biBtX3JlbW90ZUlQQWRkcmVzczsgfQotICAgICAgICB2b2lkIHNldFJlbW90ZUlQQWRkcmVzcyhj
b25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fcmVtb3RlSVBBZGRyZXNzID0gdmFsdWU7IH0KLQotICAg
ICAgICB1bnNpZ25lZCBzaG9ydCByZW1vdGVQb3J0KCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdGVQ
b3J0OyB9Ci0gICAgICAgIHZvaWQgc2V0UmVtb3RlUG9ydCh1bnNpZ25lZCBzaG9ydCB2YWx1ZSkg
eyBtX3JlbW90ZVBvcnQgPSB2YWx1ZTsgfQotCi0gICAgICAgIGNvbnN0IEZpbGUqIGRvd25sb2Fk
ZWRGaWxlKCkgY29uc3QgeyByZXR1cm4gbV9kb3dubG9hZGVkRmlsZS5nZXQoKTsgfQotICAgICAg
ICB2b2lkIHNldERvd25sb2FkZWRGaWxlKFBhc3NSZWZQdHI8RmlsZT4gZG93bmxvYWRlZEZpbGUp
IHsgbV9kb3dubG9hZGVkRmlsZSA9IGRvd25sb2FkZWRGaWxlOyB9Ci0KLSAgICAgICAgLy8gRXh0
cmEgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXNwb25zZS4KLSAgICAgICAgRXh0cmFEYXRh
KiBleHRyYURhdGEoKSBjb25zdCB7IHJldHVybiBtX2V4dHJhRGF0YS5nZXQoKTsgfQotICAgICAg
ICB2b2lkIHNldEV4dHJhRGF0YShQYXNzUmVmUHRyPEV4dHJhRGF0YT4gZXh0cmFEYXRhKSB7IG1f
ZXh0cmFEYXRhID0gZXh0cmFEYXRhOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQg
Y2xhc3MgUmVzb3VyY2VSZXNwb25zZUJhc2U7Ci0KLSAgICAgICAgdm9pZCBkb1VwZGF0ZVJlc291
cmNlUmVzcG9uc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9u
c2VEYXRhPiBkb1BsYXRmb3JtQ29weURhdGEoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNl
UmVzcG9uc2VEYXRhPikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZG9QbGF0Zm9ybUFkb3B0KFBhc3NP
d25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4pOwotCi0gICAgICAgIC8vIEFu
IG9wYXF1ZSB2YWx1ZSB0aGF0IGNvbnRhaW5zIHNvbWUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRo
ZSBzZWN1cml0eSBvZgotICAgICAgICAvLyB0aGUgY29ubmVjdGlvbiBmb3IgdGhpcyByZXF1ZXN0
LCBzdWNoIGFzIFNTTCBjb25uZWN0aW9uIGluZm8gKGVtcHR5Ci0gICAgICAgIC8vIHN0cmluZyBp
ZiBub3Qgb3ZlciBIVFRQUykuCi0gICAgICAgIENTdHJpbmcgbV9zZWN1cml0eUluZm87Ci0KLSAg
ICAgICAgLy8gSFRUUCB2ZXJzaW9uIHVzZWQgaW4gdGhlIHJlc3BvbnNlLCBpZiBrbm93bi4KLSAg
ICAgICAgSFRUUFZlcnNpb24gbV9odHRwVmVyc2lvbjsKLQotICAgICAgICAvLyBUaGUgaWQgb2Yg
dGhlIGFwcGNhY2hlIHRoaXMgcmVzcG9uc2Ugd2FzIHJldHJpZXZlZCBmcm9tLCBvciB6ZXJvIGlm
Ci0gICAgICAgIC8vIHRoZSByZXNwb25zZSB3YXMgbm90IHJldHJpZXZlZCBmcm9tIGFuIGFwcGNh
Y2hlLgotICAgICAgICBsb25nIGxvbmcgbV9hcHBDYWNoZUlEOwotCi0gICAgICAgIC8vIFRoZSBt
YW5pZmVzdCB1cmwgb2YgdGhlIGFwcGNhY2hlIHRoaXMgcmVzcG9uc2Ugd2FzIHJldHJpZXZlZCBm
cm9tLCBpZiBhbnkuCi0gICAgICAgIC8vIE5vdGU6IG9ubHkgdmFsaWQgZm9yIG1haW4gcmVzb3Vy
Y2UgcmVzcG9uc2VzLgotICAgICAgICBLVVJMIG1fYXBwQ2FjaGVNYW5pZmVzdFVSTDsKLQotICAg
ICAgICAvLyBTZXQgdG8gdHJ1ZSBpZiB0aGlzIGlzIHBhcnQgb2YgYSBtdWx0aXBhcnQgcmVzcG9u
c2UuCi0gICAgICAgIGJvb2wgbV9pc011bHRpcGFydFBheWxvYWQ7Ci0KLSAgICAgICAgLy8gV2Fz
IHRoZSByZXNvdXJjZSBmZXRjaGVkIG92ZXIgU1BEWS4gIFNlZSBodHRwOi8vZGV2LmNocm9taXVt
Lm9yZy9zcGR5Ci0gICAgICAgIGJvb2wgbV93YXNGZXRjaGVkVmlhU1BEWTsKLQotICAgICAgICAv
LyBXYXMgdGhlIHJlc291cmNlIGZldGNoZWQgb3ZlciBhIGNoYW5uZWwgd2hpY2ggdXNlZCBUTFMv
TmV4dC1Qcm90b2NvbC1OZWdvdGlhdGlvbiAoYWxzbyBTUERZIHJlbGF0ZWQpLgotICAgICAgICBi
b29sIG1fd2FzTnBuTmVnb3RpYXRlZDsKLQotICAgICAgICAvLyBXYXMgdGhlIHJlc291cmNlIGZl
dGNoZWQgb3ZlciBhIGNoYW5uZWwgd2hpY2ggc3BlY2lmaWVkICJBbHRlcm5hdGUtUHJvdG9jb2wi
Ci0gICAgICAgIC8vIChlLmcuOiBBbHRlcm5hdGUtUHJvdG9jb2w6IDQ0MzpucG4tc3BkeS8xKS4K
LSAgICAgICAgYm9vbCBtX3dhc0FsdGVybmF0ZVByb3RvY29sQXZhaWxhYmxlOwotCi0gICAgICAg
IC8vIFdhcyB0aGUgcmVzb3VyY2UgZmV0Y2hlZCBvdmVyIGFuIGV4cGxpY2l0IHByb3h5IChIVFRQ
LCBTT0NLUywgZXRjKS4KLSAgICAgICAgYm9vbCBtX3dhc0ZldGNoZWRWaWFQcm94eTsKLQotICAg
ICAgICAvLyBUaGUgdGltZSBhdCB3aGljaCB0aGUgcmVzcG9uc2UgaGVhZGVycyB3ZXJlIHJlY2Vp
dmVkLiAgRm9yIGNhY2hlZAotICAgICAgICAvLyByZXNwb25zZXMsIHRoaXMgdGltZSBjb3VsZCBi
ZSAiZmFyIiBpbiB0aGUgcGFzdC4KLSAgICAgICAgZG91YmxlIG1fcmVzcG9uc2VUaW1lOwotCi0g
ICAgICAgIC8vIFJlbW90ZSBJUCBhZGRyZXNzIG9mIHRoZSBzb2NrZXQgd2hpY2ggZmV0Y2hlZCB0
aGlzIHJlc291cmNlLgotICAgICAgICBTdHJpbmcgbV9yZW1vdGVJUEFkZHJlc3M7Ci0KLSAgICAg
ICAgLy8gUmVtb3RlIHBvcnQgbnVtYmVyIG9mIHRoZSBzb2NrZXQgd2hpY2ggZmV0Y2hlZCB0aGlz
IHJlc291cmNlLgotICAgICAgICB1bnNpZ25lZCBzaG9ydCBtX3JlbW90ZVBvcnQ7Ci0KLSAgICAg
ICAgLy8gVGhlIGRvd25sb2FkZWQgZmlsZSBpZiB0aGUgbG9hZCBzdHJlYW1lZCB0byBhIGZpbGUu
Ci0gICAgICAgIFJlZlB0cjxGaWxlPiBtX2Rvd25sb2FkZWRGaWxlOwotCi0gICAgICAgIC8vIEV4
dHJhRGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc3BvbnNlLgotICAgICAgICBSZWZQdHI8RXh0
cmFEYXRhPiBtX2V4dHJhRGF0YTsKLSAgICB9OwotCi0gICAgc3RydWN0IENyb3NzVGhyZWFkUmVz
b3VyY2VSZXNwb25zZURhdGEgOiBwdWJsaWMgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0
YUJhc2UgewotICAgICAgICBDU3RyaW5nIG1fc2VjdXJpdHlJbmZvOwotICAgICAgICBSZXNvdXJj
ZVJlc3BvbnNlOjpIVFRQVmVyc2lvbiBtX2h0dHBWZXJzaW9uOwotICAgICAgICBsb25nIGxvbmcg
bV9hcHBDYWNoZUlEOwotICAgICAgICBLVVJMIG1fYXBwQ2FjaGVNYW5pZmVzdFVSTDsKLSAgICAg
ICAgYm9vbCBtX2lzTXVsdGlwYXJ0UGF5bG9hZDsKLSAgICAgICAgYm9vbCBtX3dhc0ZldGNoZWRW
aWFTUERZOwotICAgICAgICBib29sIG1fd2FzTnBuTmVnb3RpYXRlZDsKLSAgICAgICAgYm9vbCBt
X3dhc0FsdGVybmF0ZVByb3RvY29sQXZhaWxhYmxlOwotICAgICAgICBib29sIG1fd2FzRmV0Y2hl
ZFZpYVByb3h5OwotICAgICAgICBkb3VibGUgbV9yZXNwb25zZVRpbWU7Ci0gICAgICAgIFN0cmlu
ZyBtX3JlbW90ZUlQQWRkcmVzczsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgbV9yZW1vdGVQb3J0
OwotICAgICAgICBTdHJpbmcgbV9kb3dubG9hZEZpbGVQYXRoOwotICAgIH07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2Nocm9taXVtL1NvY2tldFN0cmVhbUVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Tb2NrZXRTdHJlYW1FcnJvci5oCShy
ZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9t
aXVtL1NvY2tldFN0cmVhbUVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgU29ja2V0U3RyZWFtRXJyb3JfaAotI2RlZmluZSBTb2NrZXRTdHJlYW1FcnJvcl9oCi0K
LSNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBTb2NrZXRTdHJlYW1FcnJvciA6IHB1YmxpYyBTb2NrZXRTdHJlYW1FcnJvckJh
c2UgewotcHVibGljOgotICAgIFNvY2tldFN0cmVhbUVycm9yKCkgeyB9Ci0gICAgZXhwbGljaXQg
U29ja2V0U3RyZWFtRXJyb3IoaW50IGVycm9yQ29kZSkKLSAgICAgICAgICAgIDogU29ja2V0U3Ry
ZWFtRXJyb3JCYXNlKGVycm9yQ29kZSkgeyB9Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgIC8vIFNvY2tldFN0cmVhbUVycm9yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vU29ja2V0U3RyZWFtSGFuZGxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1NvY2tldFN0
cmVhbUhhbmRsZS5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2hyb21pdW0vU29ja2V0U3RyZWFtSGFuZGxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwyMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
b2NrZXRTdHJlYW1IYW5kbGUuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5h
bC5oIgotCi0jaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxl
Q2xpZW50LmgiCi0jaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8cHVibGlj
L1dlYkRhdGEuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViU29ja2V0U3RyZWFtSGFuZGxlLmg+Ci0j
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Tb2Nr
ZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6U29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWwoU29ja2V0
U3RyZWFtSGFuZGxlKiBoYW5kbGUpCi0gICAgOiBtX2hhbmRsZShoYW5kbGUpCi0gICAgLCBtX21h
eFBlbmRpbmdTZW5kQWxsb3dlZCgwKQotICAgICwgbV9wZW5kaW5nQW1vdW50U2VudCgwKQotewot
fQotCi1Tb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6flNvY2tldFN0cmVhbUhhbmRsZUludGVy
bmFsKCkKLXsKLSAgICBtX2hhbmRsZSA9IDA7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxl
SW50ZXJuYWw6OmNvbm5lY3QoY29uc3QgS1VSTCYgdXJsKQotewotICAgIG1fc29ja2V0ID0gYWRv
cHRQdHIoV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jcmVhdGVTb2NrZXRTdHJlYW1IYW5k
bGUoKSk7Ci0gICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbCAlcCBj
b25uZWN0KCkiLCB0aGlzKTsKLSAgICBBU1NFUlQobV9zb2NrZXQpOwotICAgIEFTU0VSVChtX2hh
bmRsZSk7Ci0gICAgaWYgKG1faGFuZGxlLT5tX2NsaWVudCkKLSAgICAgICAgbV9oYW5kbGUtPm1f
Y2xpZW50LT53aWxsT3BlblNvY2tldFN0cmVhbShtX2hhbmRsZSk7Ci0gICAgbV9zb2NrZXQtPmNv
bm5lY3QodXJsLCB0aGlzKTsKLX0KLQotaW50IFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpz
ZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCi17Ci0gICAgTE9HKE5ldHdvcmssICJTb2Nr
ZXRTdHJlYW1IYW5kbGVJbnRlcm5hbCAlcCBzZW5kKCkgbGVuPSVkIiwgdGhpcywgbGVuKTsKLSAg
ICAvLyBGSVhNRTogfG1fc29ja2V0fCBzaG91bGQgbm90IGJlIG51bGwgaGVyZSwgYnV0IGl0IHNl
ZW1zIHRoYXQgdGhlcmUgaXMgdGhlCi0gICAgLy8gY2FzZS4gV2Ugc2hvdWxkIGZpZ3VyZSBvdXQg
c3VjaCBhIHBhdGggYW5kIGZpeCBpdCByYXRoZXIgdGhhbiBjaGVja2luZwotICAgIC8vIG51bGwg
aGVyZS4KLSAgICBpZiAoIW1fc29ja2V0KSB7Ci0gICAgICAgIExPRyhOZXR3b3JrLCAiU29ja2V0
U3RyZWFtSGFuZGxlSW50ZXJuYWwgJXAgc2VuZCgpIG1fc29ja2V0IGlzIE5VTEwiLCB0aGlzKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChtX3BlbmRpbmdBbW91bnRTZW50ICsg
bGVuID4gbV9tYXhQZW5kaW5nU2VuZEFsbG93ZWQpCi0gICAgICAgIGxlbiA9IG1fbWF4UGVuZGlu
Z1NlbmRBbGxvd2VkIC0gbV9wZW5kaW5nQW1vdW50U2VudDsKLQotICAgIGlmIChsZW4gPD0gMCkK
LSAgICAgICAgcmV0dXJuIGxlbjsKLSAgICBXZWJLaXQ6OldlYkRhdGEgd2ViZGF0YShkYXRhLCBs
ZW4pOwotICAgIGlmIChtX3NvY2tldC0+c2VuZCh3ZWJkYXRhKSkgewotICAgICAgICBtX3BlbmRp
bmdBbW91bnRTZW50ICs9IGxlbjsKLSAgICAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1I
YW5kbGVJbnRlcm5hbCAlcCBzZW5kKCkgU2VudCAlZCBieXRlcyIsIHRoaXMsIGxlbik7Ci0gICAg
ICAgIHJldHVybiBsZW47Ci0gICAgfQotICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFu
ZGxlSW50ZXJuYWwgJXAgc2VuZCgpIG1fc29ja2V0LT5zZW5kKCkgZmFpbGVkIiwgdGhpcyk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6OmNsb3Nl
KCkKLXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsICVwIGNs
b3NlKCkiLCB0aGlzKTsKLSAgICBpZiAobV9zb2NrZXQpCi0gICAgICAgIG1fc29ja2V0LT5jbG9z
ZSgpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOjpkaWRPcGVuU3RyZWFt
KFdlYktpdDo6V2ViU29ja2V0U3RyZWFtSGFuZGxlKiBzb2NrZXRIYW5kbGUsIGludCBtYXhQZW5k
aW5nU2VuZEFsbG93ZWQpCi17Ci0gICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGVJ
bnRlcm5hbCAlcCBkaWRPcGVuU3RyZWFtKCkgbWF4UGVuZGluZ1NlbmRBbGxvd2VkPSVkIiwgdGhp
cywgbWF4UGVuZGluZ1NlbmRBbGxvd2VkKTsKLSAgICBBU1NFUlQobWF4UGVuZGluZ1NlbmRBbGxv
d2VkID4gMCk7Ci0gICAgaWYgKG1faGFuZGxlICYmIG1fc29ja2V0KSB7Ci0gICAgICAgIEFTU0VS
VChzb2NrZXRIYW5kbGUgPT0gbV9zb2NrZXQuZ2V0KCkpOwotICAgICAgICBtX21heFBlbmRpbmdT
ZW5kQWxsb3dlZCA9IG1heFBlbmRpbmdTZW5kQWxsb3dlZDsKLSAgICAgICAgbV9oYW5kbGUtPm1f
c3RhdGUgPSBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpPcGVuOwotICAgICAgICBpZiAobV9oYW5k
bGUtPm1fY2xpZW50KSB7Ci0gICAgICAgICAgICBtX2hhbmRsZS0+bV9jbGllbnQtPmRpZE9wZW5T
b2NrZXRTdHJlYW0obV9oYW5kbGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWwgJXAgZGlk
T3BlblN0cmVhbSgpIG1faGFuZGxlIG9yIG1fc29ja2V0IGlzIE5VTEwiLCB0aGlzKTsKLX0KLQot
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkU2VuZERhdGEoV2ViS2l0OjpXZWJT
b2NrZXRTdHJlYW1IYW5kbGUqIHNvY2tldEhhbmRsZSwgaW50IGFtb3VudFNlbnQpCi17Ci0gICAg
TE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbCAlcCBkaWRTZW5kRGF0YSgp
IGFtb3VudFNlbnQ9JWQiLCB0aGlzLCBhbW91bnRTZW50KTsKLSAgICBBU1NFUlQoYW1vdW50U2Vu
dCA+IDApOwotICAgIGlmIChtX2hhbmRsZSAmJiBtX3NvY2tldCkgewotICAgICAgICBBU1NFUlQo
c29ja2V0SGFuZGxlID09IG1fc29ja2V0LmdldCgpKTsKLSAgICAgICAgbV9wZW5kaW5nQW1vdW50
U2VudCAtPSBhbW91bnRTZW50OwotICAgICAgICBBU1NFUlQobV9wZW5kaW5nQW1vdW50U2VudCA+
PSAwKTsKLSAgICAgICAgbV9oYW5kbGUtPnNlbmRQZW5kaW5nRGF0YSgpOwotICAgIH0KLX0KLQot
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2ZURhdGEoV2ViS2l0OjpX
ZWJTb2NrZXRTdHJlYW1IYW5kbGUqIHNvY2tldEhhbmRsZSwgY29uc3QgV2ViS2l0OjpXZWJEYXRh
JiBkYXRhKQotewotICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWwg
JXAgZGlkUmVjZWl2ZURhdGEoKSBSZWNlaXZlZCAlbHUgYnl0ZXMiLCB0aGlzLCBkYXRhLnNpemUo
KSk7Ci0gICAgaWYgKG1faGFuZGxlICYmIG1fc29ja2V0KSB7Ci0gICAgICAgIEFTU0VSVChzb2Nr
ZXRIYW5kbGUgPT0gbV9zb2NrZXQuZ2V0KCkpOwotICAgICAgICBpZiAobV9oYW5kbGUtPm1fY2xp
ZW50KQotICAgICAgICAgICAgbV9oYW5kbGUtPm1fY2xpZW50LT5kaWRSZWNlaXZlU29ja2V0U3Ry
ZWFtRGF0YShtX2hhbmRsZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLSAgICB9Ci19Ci0K
LXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6OmRpZENsb3NlKFdlYktpdDo6V2ViU29j
a2V0U3RyZWFtSGFuZGxlKiBzb2NrZXRIYW5kbGUpCi17Ci0gICAgTE9HKE5ldHdvcmssICJTb2Nr
ZXRTdHJlYW1IYW5kbGVJbnRlcm5hbCAlcCBkaWRDbG9zZSgpIiwgdGhpcyk7Ci0gICAgaWYgKG1f
aGFuZGxlICYmIG1fc29ja2V0KSB7Ci0gICAgICAgIEFTU0VSVChzb2NrZXRIYW5kbGUgPT0gbV9z
b2NrZXQuZ2V0KCkpOwotICAgICAgICBtX3NvY2tldC5jbGVhcigpOwotICAgICAgICBTb2NrZXRT
dHJlYW1IYW5kbGUqIGggPSBtX2hhbmRsZTsKLSAgICAgICAgbV9oYW5kbGUgPSAwOwotICAgICAg
ICBpZiAoaC0+bV9jbGllbnQpCi0gICAgICAgICAgICBoLT5tX2NsaWVudC0+ZGlkQ2xvc2VTb2Nr
ZXRTdHJlYW0oaCk7Ci0gICAgfQotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFs
OjpkaWRGYWlsKFdlYktpdDo6V2ViU29ja2V0U3RyZWFtSGFuZGxlKiBzb2NrZXRIYW5kbGUsIGNv
bnN0IFdlYktpdDo6V2ViU29ja2V0U3RyZWFtRXJyb3ImIGVycikKLXsKLSAgICBMT0coTmV0d29y
aywgIlNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsICVwIGRpZEZhaWwoKSIsIHRoaXMpOwotICAg
IGlmIChtX2hhbmRsZSAmJiBtX3NvY2tldCkgewotICAgICAgICBBU1NFUlQoc29ja2V0SGFuZGxl
ID09IG1fc29ja2V0LmdldCgpKTsKLSAgICAgICAgbV9zb2NrZXQuY2xlYXIoKTsKLSAgICAgICAg
U29ja2V0U3RyZWFtSGFuZGxlKiBoID0gbV9oYW5kbGU7Ci0gICAgICAgIG1faGFuZGxlID0gMDsK
LSAgICAgICAgaWYgKGgtPm1fY2xpZW50KQotICAgICAgICAgICAgaC0+bV9jbGllbnQtPmRpZENs
b3NlU29ja2V0U3RyZWFtKGgpOyAvLyBkaWRGYWlsKGgsIGVycik7Ci0gICAgfQotfQotCi0vLyBG
SVhNRTogYXV0aAotCi0vLyBTb2NrZXRTdHJlYW1IYW5kbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Tb2NrZXRTdHJlYW1IYW5k
bGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBLVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRs
ZUNsaWVudCogY2xpZW50KQotICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZSh1cmwsIGNsaWVu
dCkKLXsKLSAgICBtX2ludGVybmFsID0gU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWw6OmNyZWF0
ZSh0aGlzKTsKLSAgICBtX2ludGVybmFsLT5jb25uZWN0KG1fdXJsKTsKLX0KLQotU29ja2V0U3Ry
ZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxlKCkKLXsKLSAgICBzZXRDbGllbnQoMCk7Ci0g
ICAgbV9pbnRlcm5hbC5jbGVhcigpOwotfQotCi1pbnQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0
Zm9ybVNlbmQoY29uc3QgY2hhciogYnVmLCBpbnQgbGVuKQotewotICAgIGlmICghbV9pbnRlcm5h
bCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1faW50ZXJuYWwtPnNlbmQoYnVmLCBs
ZW4pOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCi17Ci0g
ICAgaWYgKG1faW50ZXJuYWwpCi0gICAgICAgIG1faW50ZXJuYWwtPmNsb3NlKCk7Ci19Ci0KLXZv
aWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKLXsKLSAgICBpZiAobV9j
bGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UodGhpcywgY2hhbGxlbmdlKTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlY2Vp
dmVkQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBj
b25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0
aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgIC8vIEVOQUJMRShXRUJfU09DS0VUUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2hyb21pdW0vU29ja2V0U3RyZWFtSGFuZGxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Tb2NrZXRTdHJlYW1I
YW5kbGUuaAkocmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jaHJvbWl1bS9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFNvY2tldFN0cmVhbUhhbmRsZV9oCi0jZGVmaW5lIFNvY2tl
dFN0cmVhbUhhbmRsZV9oCi0KLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmgiCi0K
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlOwotICAgIGNsYXNzIENyZWRlbnRpYWw7Ci0gICAgY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxl
Q2xpZW50OwotICAgIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsOwotCi0gICAgY2xh
c3MgU29ja2V0U3RyZWFtSGFuZGxlIDogcHVibGljIFJlZkNvdW50ZWQ8U29ja2V0U3RyZWFtSGFu
ZGxlPiwgcHVibGljIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoY29uc3QgS1VS
TCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQqIGNsaWVudCkgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IFNvY2tldFN0cmVhbUhhbmRsZSh1cmwsIGNsaWVudCkpOyB9Ci0KLSAgICAgICAgdmly
dHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIC8v
IFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgZnVuY3Rpb25zLgotICAgICAgICB2aXJ0dWFsIGludCBw
bGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkgT1ZFUlJJREU7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNsb3NlKCkgT1ZFUlJJREU7Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgS1VSTCYsIFNvY2tldFN0cmVhbUhh
bmRsZUNsaWVudCopOwotCi0gICAgICAgIC8vIE5vIGF1dGhlbnRpY2F0aW9uIGZvciBzdHJlYW1z
IHBlciBzZSwgYnV0IHByb3h5IG1heSBhc2sgZm9yIGNyZWRlbnRpYWxzLgotICAgICAgICB2b2lk
IGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYpOwotICAgICAgICB2b2lkIHJlY2VpdmVkQ3JlZGVudGlhbChjb25zdCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IENyZWRlbnRpYWwmKTsKLSAgICAgICAgdm9pZCByZWNl
aXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKTsKLSAgICAgICAgdm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwotCi0gICAgICAgIGZyaWVuZCBjbGFzcyBTb2NrZXRT
dHJlYW1IYW5kbGVJbnRlcm5hbDsKLSAgICAgICAgT3duUHRyPFNvY2tldFN0cmVhbUhhbmRsZUlu
dGVybmFsPiBtX2ludGVybmFsOwotICAgIH07Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAgLy8gU29ja2V0U3RyZWFtSGFuZGxlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2hyb21pdW0vU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1NvY2tl
dFN0cmVhbUhhbmRsZUludGVybmFsLmgJKHJldmlzaW9uIDE0NzczMikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vU29ja2V0U3RyZWFtSGFuZGxlSW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTb2NrZXRTdHJlYW1IYW5k
bGVJbnRlcm5hbF9oCi0jZGVmaW5lIFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsX2gKLQotI2lm
IEVOQUJMRShXRUJfU09DS0VUUykKLQotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgot
I2luY2x1ZGUgPHB1YmxpYy9XZWJTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaD4KLSNpbmNsdWRl
IDxwdWJsaWMvV2ViVVJMLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkRhdGE7Ci1jbGFzcyBXZWJTb2NrZXRTdHJlYW1FcnJv
cjsKLWNsYXNzIFdlYlNvY2tldFN0cmVhbUhhbmRsZTsKLQotfQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsIDogcHVibGljIFdlYktpdDo6
V2ViU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxTb2NrZXRTdHJlYW1IYW5kbGVJbnRlcm5hbD4gY3JlYXRlKFNvY2tldFN0cmVhbUhhbmRs
ZSogaGFuZGxlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTb2NrZXRTdHJl
YW1IYW5kbGVJbnRlcm5hbChoYW5kbGUpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+U29ja2V0U3Ry
ZWFtSGFuZGxlSW50ZXJuYWwoKTsKLQotICAgIHZvaWQgY29ubmVjdChjb25zdCBLVVJMJik7Ci0g
ICAgaW50IHNlbmQoY29uc3QgY2hhciosIGludCk7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi0gICAg
dmlydHVhbCB2b2lkIGRpZE9wZW5TdHJlYW0oV2ViS2l0OjpXZWJTb2NrZXRTdHJlYW1IYW5kbGUq
LCBpbnQpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShXZWJLaXQ6OldlYlNvY2tldFN0
cmVhbUhhbmRsZSosIGludCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFdlYktp
dDo6V2ViU29ja2V0U3RyZWFtSGFuZGxlKiwgY29uc3QgV2ViS2l0OjpXZWJEYXRhJik7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZENsb3NlKFdlYktpdDo6V2ViU29ja2V0U3RyZWFtSGFuZGxlKik7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoV2ViS2l0OjpXZWJTb2NrZXRTdHJlYW1IYW5kbGUqLCBj
b25zdCBXZWJLaXQ6OldlYlNvY2tldFN0cmVhbUVycm9yJik7Ci0KLSAgICBzdGF0aWMgV2ViS2l0
OjpXZWJTb2NrZXRTdHJlYW1IYW5kbGUqIHRvV2ViU29ja2V0U3RyZWFtSGFuZGxlKFNvY2tldFN0
cmVhbUhhbmRsZSogaGFuZGxlKQotICAgIHsKLSAgICAgICAgaWYgKGhhbmRsZSAmJiBoYW5kbGUt
Pm1faW50ZXJuYWwpCi0gICAgICAgICAgICByZXR1cm4gaGFuZGxlLT5tX2ludGVybmFsLT5tX3Nv
Y2tldC5nZXQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsKFNvY2tldFN0cmVhbUhhbmRsZSopOwot
Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKiBtX2hhbmRsZTsKLSAgICBPd25QdHI8V2ViS2l0OjpX
ZWJTb2NrZXRTdHJlYW1IYW5kbGU+IG1fc29ja2V0OwotICAgIGludCBtX21heFBlbmRpbmdTZW5k
QWxsb3dlZDsKLSAgICBpbnQgbV9wZW5kaW5nQW1vdW50U2VudDsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfU09DS0VUUykKLQotI2VuZGlmIC8v
IFNvY2tldFN0cmVhbUhhbmRsZUludGVybmFsX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVt
Q2hyb21pdW0uY3BwCShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTUUxpdGVG
aWxlU3lzdGVtLmgiCi0KLSNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgotI2luY2x1ZGUgPHB1
YmxpYy9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHNxbGl0ZTMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLS8vIFNRTGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCkg
aXMgaW1wbGVtZW50ZWQgaW4gdGhlCi0vLyBwbGF0Zm9ybS1zcGVjaWZpYyBmaWxlcyBTUUxpdGVG
aWxlU3lzdGVtQ2hyb21pdW17V2lufFBvc2l4fS5jcHAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
U1FMaXRlRmlsZVN5c3RlbTo6U1FMaXRlRmlsZVN5c3RlbSgpCi17Ci19Ci0KLWludCBTUUxpdGVG
aWxlU3lzdGVtOjpvcGVuRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgc3FsaXRlMyoq
IGRhdGFiYXNlLCBib29sIGZvcldlYlNRTERhdGFiYXNlKQotewotICAgIGlmICghZm9yV2ViU1FM
RGF0YWJhc2UpIHsKLSAgICAgICAgU3RyaW5nIHBhdGggPSBmaWxlTmFtZTsKLSAgICAgICAgcmV0
dXJuIHNxbGl0ZTNfb3BlbjE2KHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwg
ZGF0YWJhc2UpOwotICAgIH0KLQotICAgIHJldHVybiBzcWxpdGUzX29wZW5fdjIoZmlsZU5hbWUu
dXRmOCgpLmRhdGEoKSwgZGF0YWJhc2UsIFNRTElURV9PUEVOX1JFQURXUklURSB8IFNRTElURV9P
UEVOX0NSRUFURSwgImNocm9taXVtX3ZmcyIpOwotfQotCi1TdHJpbmcgU1FMaXRlRmlsZVN5c3Rl
bTo6Z2V0RmlsZU5hbWVGb3JOZXdEYXRhYmFzZSgKLSAgY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBkYk5hbWUsIGNvbnN0IFN0cmluZyAmb3JpZ2luSWRlbnRpZmllciwgU1FMaXRlRGF0YWJh
c2UqKQotewotICAgIC8vIE5vdCB1c2VkIGJ5IENocm9taXVtJ3MgRGF0YWJhc2VUcmFja2VyIGlt
cGxlbWVudGF0aW9uCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0cmlu
ZygpOwotfQotCi1TdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6YXBwZW5kRGF0YWJhc2VGaWxlTmFt
ZVRvUGF0aChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQotewotICAgIC8v
IE5vdCB1c2VkIGJ5IENocm9taXVtJ3MgRGF0YWJhc2VUcmFja2VyIGltcGxlbWVudGF0aW9uCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1ib29s
IFNRTGl0ZUZpbGVTeXN0ZW06OmVuc3VyZURhdGFiYXNlRGlyZWN0b3J5RXhpc3RzKGNvbnN0IFN0
cmluZyYpCi17Ci0gICAgLy8gTm90IHVzZWQgYnkgQ2hyb21pdW0ncyBEYXRhYmFzZVRyYWNrZXIg
aW1wbGVtZW50YXRpb24KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZW5zdXJlRGF0YWJhc2VGaWxlRXhpc3Rz
KGNvbnN0IFN0cmluZyYsIGJvb2wpCi17Ci0gICAgLy8gTm90IHVzZWQgYnkgQ2hyb21pdW0ncyBE
YXRhYmFzZVRyYWNrZXIgaW1wbGVtZW50YXRpb24KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1w
dHlEYXRhYmFzZURpcmVjdG9yeShjb25zdCBTdHJpbmcmKQotewotICAgIC8vIE5vdCB1c2VkIGJ5
IENocm9taXVtJ3MgRGF0YWJhc2VUcmFja2VyIGltcGxlbWVudGF0aW9uCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNRTGl0ZUZpbGVTeXN0
ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQotewotICAgIHJl
dHVybiAoV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5kYXRhYmFzZURlbGV0ZUZpbGUoZmls
ZU5hbWUsIGZhbHNlKSA9PSBTUUxJVEVfT0spOwotfQotCi1sb25nIGxvbmcgU1FMaXRlRmlsZVN5
c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQotewotICAg
IHJldHVybiBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmRhdGFiYXNlR2V0RmlsZVNpemUo
ZmlsZU5hbWUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtUG9zaXgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9T
UUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1Qb3NpeC5jcHAJKHJldmlzaW9uIDE0NzczMikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21p
dW1Qb3NpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTk3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgotCi0jaW5jbHVkZSA8cHVibGlj
L1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8c3FsaXRlMy5oPgotCi0jaW5jbHVkZSA8ZmNudGwuaD4K
LSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLS8vIERlZmluZWQgaW4gQ2hyb21pdW0ncyBjb2RlYmFzZSBpbiB0aGly
ZF9wYXJ0eS9zcWxpdGUvc3JjL29zX3VuaXguYwotZXh0ZXJuICJDIiB7Ci12b2lkIGNocm9taXVt
X3NxbGl0ZTNfaW5pdGlhbGl6ZV91bml4X3NxbGl0ZTNfZmlsZShzcWxpdGUzX2ZpbGUqIGZpbGUp
OwotaW50IGNocm9taXVtX3NxbGl0ZTNfZmlsbF9pbl91bml4X3NxbGl0ZTNfZmlsZShzcWxpdGUz
X3ZmcyogdmZzLCBpbnQgZmQsIGludCBkaXJmZCwgc3FsaXRlM19maWxlKiBmaWxlLCBjb25zdCBj
aGFyKiBmaWxlTmFtZSwgaW50IG5vTG9jayk7Ci1pbnQgY2hyb21pdW1fc3FsaXRlM19nZXRfcmV1
c2FibGVfZmlsZV9oYW5kbGUoc3FsaXRlM19maWxlKiBmaWxlLCBjb25zdCBjaGFyKiBmaWxlTmFt
ZSwgaW50IGZsYWdzLCBpbnQqIGZkKTsKLXZvaWQgY2hyb21pdW1fc3FsaXRlM191cGRhdGVfcmV1
c2FibGVfZmlsZV9oYW5kbGUoc3FsaXRlM19maWxlKiBmaWxlLCBpbnQgZmQsIGludCBmbGFncyk7
Ci12b2lkIGNocm9taXVtX3NxbGl0ZTNfZGVzdHJveV9yZXVzYWJsZV9maWxlX2hhbmRsZShzcWxp
dGUzX2ZpbGUqIGZpbGUpOwotfQotCi0vLyBDaHJvbWl1bSdzIFBvc2l4IGltcGxlbWVudGF0aW9u
IG9mIFNRTGl0ZSBWRlMKLW5hbWVzcGFjZSB7Ci0KLS8vIE9wZW5zIGEgZmlsZS4KLS8vCi0vLyB2
ZnMgLSBwb2ludGVyIHRvIHRoZSBzcWxpdGUzX3ZmcyBvYmplY3QuCi0vLyBmaWxlTmFtZSAtIHRo
ZSBuYW1lIG9mIHRoZSBmaWxlLgotLy8gaWQgLSB0aGUgc3RydWN0dXJlIHRoYXQgd2lsbCBtYW5p
cHVsYXRlIHRoZSBuZXdseSBvcGVuZWQgZmlsZS4KLS8vIGRlc2lyZWRGbGFncyAtIHRoZSBkZXNp
cmVkIG9wZW4gbW9kZSBmbGFncy4KLS8vIHVzZWRGbGFncyAtIHRoZSBhY3R1YWwgb3BlbiBtb2Rl
IGZsYWdzIHRoYXQgd2VyZSB1c2VkLgotaW50IGNocm9taXVtT3BlbihzcWxpdGUzX3ZmcyogdmZz
LCBjb25zdCBjaGFyKiBmaWxlTmFtZSwKLSAgICAgICAgICAgICAgICAgc3FsaXRlM19maWxlKiBp
ZCwgaW50IGRlc2lyZWRGbGFncywgaW50KiB1c2VkRmxhZ3MpCi17Ci0gICAgY2hyb21pdW1fc3Fs
aXRlM19pbml0aWFsaXplX3VuaXhfc3FsaXRlM19maWxlKGlkKTsKLSAgICBpbnQgZmQgPSAtMTsK
LSAgICBpbnQgcmVzdWx0ID0gY2hyb21pdW1fc3FsaXRlM19nZXRfcmV1c2FibGVfZmlsZV9oYW5k
bGUoaWQsIGZpbGVOYW1lLCBkZXNpcmVkRmxhZ3MsICZmZCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBT
UUxJVEVfT0spCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZiAoZmQgPCAwKSB7Ci0g
ICAgICAgIGZkID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5kYXRhYmFzZU9wZW5GaWxl
KFN0cmluZyhmaWxlTmFtZSksIGRlc2lyZWRGbGFncyk7Ci0gICAgICAgIGlmICgoZmQgPCAwKSAm
JiAoZGVzaXJlZEZsYWdzICYgU1FMSVRFX09QRU5fUkVBRFdSSVRFKSkgewotICAgICAgICAgICAg
aW50IG5ld0ZsYWdzID0gKGRlc2lyZWRGbGFncyAmIH4oU1FMSVRFX09QRU5fUkVBRFdSSVRFIHwg
U1FMSVRFX09QRU5fQ1JFQVRFKSkgfCBTUUxJVEVfT1BFTl9SRUFET05MWTsKLSAgICAgICAgICAg
IGZkID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5kYXRhYmFzZU9wZW5GaWxlKFN0cmlu
ZyhmaWxlTmFtZSksIG5ld0ZsYWdzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZmQgPCAw
KSB7Ci0gICAgICAgIGNocm9taXVtX3NxbGl0ZTNfZGVzdHJveV9yZXVzYWJsZV9maWxlX2hhbmRs
ZShpZCk7Ci0gICAgICAgIHJldHVybiBTUUxJVEVfQ0FOVE9QRU47Ci0gICAgfQotCi0gICAgaWYg
KHVzZWRGbGFncykKLSAgICAgICAgKnVzZWRGbGFncyA9IGRlc2lyZWRGbGFnczsKLSAgICBjaHJv
bWl1bV9zcWxpdGUzX3VwZGF0ZV9yZXVzYWJsZV9maWxlX2hhbmRsZShpZCwgZmQsIGRlc2lyZWRG
bGFncyk7Ci0KLSAgICBmY250bChmZCwgRl9TRVRGRCwgZmNudGwoZmQsIEZfR0VURkQpIHwgRkRf
Q0xPRVhFQyk7Ci0KLSAgICAvLyBUaGUgbWFzayAweDAwMDA3RjAwIGdpdmVzIHVzIHRoZSA3IGJp
dHMgdGhhdCBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgdGhlIGZpbGUgU1FMaXRlIGlzIHRyeWluZyB0
byBvcGVuLgotICAgIGludCBmaWxlVHlwZSA9IGRlc2lyZWRGbGFncyAmIDB4MDAwMDdGMDA7Ci0g
ICAgaW50IG5vTG9jayA9IChmaWxlVHlwZSAhPSBTUUxJVEVfT1BFTl9NQUlOX0RCKTsKLSAgICBy
ZXN1bHQgPSBjaHJvbWl1bV9zcWxpdGUzX2ZpbGxfaW5fdW5peF9zcWxpdGUzX2ZpbGUodmZzLCBm
ZCwgLTEsIGlkLCBmaWxlTmFtZSwgbm9Mb2NrKTsKLSAgICBpZiAocmVzdWx0ICE9IFNRTElURV9P
SykKLSAgICAgICAgY2hyb21pdW1fc3FsaXRlM19kZXN0cm95X3JldXNhYmxlX2ZpbGVfaGFuZGxl
KGlkKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBEZWxldGVzIHRoZSBnaXZlbiBmaWxl
LgotLy8KLS8vIHZmcyAtIHBvaW50ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KLS8vIGZp
bGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZpbGUuCi0vLyBzeW5jRGlyIC0gZGV0ZXJtaW5lcyBp
ZiB0aGUgZGlyZWN0b3J5IHRvIHdoaWNoIHRoaXMgZmlsZSBiZWxvbmdzCi0vLyAgICAgICAgICAg
c2hvdWxkIGJlIHN5bmNoZWQgYWZ0ZXIgdGhlIGZpbGUgaXMgZGVsZXRlZC4KLWludCBjaHJvbWl1
bURlbGV0ZShzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQgc3luY0RpcikK
LXsKLSAgICByZXR1cm4gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5kYXRhYmFzZURlbGV0
ZUZpbGUoU3RyaW5nKGZpbGVOYW1lKSwgc3luY0Rpcik7Ci19Ci0KLS8vIENoZWNrIHRoZSBleGlz
dGFuY2UgYW5kIHN0YXR1cyBvZiB0aGUgZ2l2ZW4gZmlsZS4KLS8vCi0vLyB2ZnMgLSBwb2ludGVy
IHRvIHRoZSBzcWxpdGUzX3ZmcyBvYmplY3QuCi0vLyBmaWxlTmFtZSAtIHRoZSBuYW1lIG9mIHRo
ZSBmaWxlLgotLy8gZmxhZyAtIHRoZSB0eXBlIG9mIHRlc3QgdG8gbWFrZSBvbiB0aGlzIGZpbGUu
Ci0vLyByZXMgLSB0aGUgcmVzdWx0LgotaW50IGNocm9taXVtQWNjZXNzKHNxbGl0ZTNfdmZzKiwg
Y29uc3QgY2hhciogZmlsZU5hbWUsIGludCBmbGFnLCBpbnQqIHJlcykKLXsKLSAgICBpbnQgYXR0
ciA9IHN0YXRpY19jYXN0PGludD4oV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5kYXRhYmFz
ZUdldEZpbGVBdHRyaWJ1dGVzKFN0cmluZyhmaWxlTmFtZSkpKTsKLSAgICBpZiAoYXR0ciA8IDAp
IHsKLSAgICAgICAgKnJlcyA9IDA7Ci0gICAgICAgIHJldHVybiBTUUxJVEVfT0s7Ci0gICAgfQot
Ci0gICAgc3dpdGNoIChmbGFnKSB7Ci0gICAgY2FzZSBTUUxJVEVfQUNDRVNTX0VYSVNUUzoKLSAg
ICAgICAgKnJlcyA9IDE7ICAgLy8gaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgYXR0ciA8IDAK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTUUxJVEVfQUNDRVNTX1JFQURXUklURToKLSAgICAg
ICAgKnJlcyA9IChhdHRyICYgV19PSykgJiYgKGF0dHIgJiBSX09LKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBTUUxJVEVfQUNDRVNTX1JFQUQ6Ci0gICAgICAgICpyZXMgPSAoYXR0ciAmIFJf
T0spOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gU1FMSVRF
X0VSUk9SOwotICAgIH0KLQotICAgIHJldHVybiBTUUxJVEVfT0s7Ci19Ci0KLS8vIFR1cm5zIGEg
cmVsYXRpdmUgcGF0aG5hbWUgaW50byBhIGZ1bGwgcGF0aG5hbWUuCi0vLwotLy8gdmZzIC0gcG9p
bnRlciB0byB0aGUgc3FsaXRlM192ZnMgb2JqZWN0LgotLy8gcmVsYXRpdmVQYXRoIC0gdGhlIHJl
bGF0aXZlIHBhdGguCi0vLyBidWZTaXplIC0gdGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIg
aW4gYnl0ZXMuCi0vLyBhYnNvbHV0ZVBhdGggLSB0aGUgb3V0cHV0IGJ1ZmZlciB3aGVyZSB0aGUg
YWJzb2x1dGUgcGF0aCB3aWxsIGJlIHN0b3JlZC4KLWludCBjaHJvbWl1bUZ1bGxQYXRobmFtZShz
cWxpdGUzX3ZmcyogdmZzLCBjb25zdCBjaGFyKiByZWxhdGl2ZVBhdGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgaW50LCBjaGFyKiBhYnNvbHV0ZVBhdGgpCi17Ci0gICAgLy8gVGhlIHJlbmRl
cmVyIHByb2Nlc3MgZG9lc24ndCBuZWVkIHRvIGtub3cgdGhlIGFic29sdXRlIHBhdGggb2YgdGhl
IGZpbGUKLSAgICBzcWxpdGUzX3NucHJpbnRmKHZmcy0+bXhQYXRobmFtZSwgYWJzb2x1dGVQYXRo
LCAiJXMiLCByZWxhdGl2ZVBhdGgpOwotICAgIHJldHVybiBTUUxJVEVfT0s7Ci19Ci0KLSNpZm5k
ZWYgU1FMSVRFX09NSVRfTE9BRF9FWFRFTlNJT04KLS8vIFJldHVybnMgTlVMTCwgdGh1cyBkaXNh
bGxvd2luZyBsb2FkaW5nIGxpYnJhcmllcyBpbiB0aGUgcmVuZGVyZXIgcHJvY2Vzcy4KLS8vCi0v
LyB2ZnMgLSBwb2ludGVyIHRvIHRoZSBzcWxpdGUzX3ZmcyBvYmplY3QuCi0vLyBmaWxlTmFtZSAt
IHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBmaWxlLgotdm9pZCogY2hyb21pdW1EbE9w
ZW4oc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKikKLXsKLSAgICByZXR1cm4gMDsKLX0KLSNlbHNl
Ci0jZGVmaW5lIGNocm9taXVtRGxPcGVuIDAKLSNlbmRpZiAvLyBTUUxJVEVfT01JVF9MT0FEX0VY
VEVOU0lPTgotCi19IC8vIG5hbWVzcGFjZQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQg
U1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKQotewotICAgIHNxbGl0ZTNfdmZz
KiB1bml4X3ZmcyA9IHNxbGl0ZTNfdmZzX2ZpbmQoInVuaXgiKTsKLSAgICBzdGF0aWMgc3FsaXRl
M192ZnMgY2hyb21pdW1fdmZzID0gewotICAgICAgICAxLAotICAgICAgICB1bml4X3Zmcy0+c3pP
c0ZpbGUsCi0gICAgICAgIHVuaXhfdmZzLT5teFBhdGhuYW1lLAotICAgICAgICAwLAotICAgICAg
ICAiY2hyb21pdW1fdmZzIiwKLSAgICAgICAgdW5peF92ZnMtPnBBcHBEYXRhLAotICAgICAgICBj
aHJvbWl1bU9wZW4sCi0gICAgICAgIGNocm9taXVtRGVsZXRlLAotICAgICAgICBjaHJvbWl1bUFj
Y2VzcywKLSAgICAgICAgY2hyb21pdW1GdWxsUGF0aG5hbWUsCi0gICAgICAgIGNocm9taXVtRGxP
cGVuLAotICAgICAgICB1bml4X3Zmcy0+eERsRXJyb3IsCi0gICAgICAgIHVuaXhfdmZzLT54RGxT
eW0sCi0gICAgICAgIHVuaXhfdmZzLT54RGxDbG9zZSwKLSAgICAgICAgdW5peF92ZnMtPnhSYW5k
b21uZXNzLAotICAgICAgICB1bml4X3Zmcy0+eFNsZWVwLAotICAgICAgICB1bml4X3Zmcy0+eEN1
cnJlbnRUaW1lLAotICAgICAgICB1bml4X3Zmcy0+eEdldExhc3RFcnJvcgotICAgIH07Ci0gICAg
c3FsaXRlM192ZnNfcmVnaXN0ZXIoJmNocm9taXVtX3ZmcywgMCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9T
UUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1XaW4uY3Bw
CShyZXZpc2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21p
dW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwx
NjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVt
LmgiCi0KLSNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxzcWxpdGUzLmg+
Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotLy8g
RGVmaW5lZCBpbiBDaHJvbWl1bSdzIGNvZGViYXNlIGluIHRoaXJkX3BhcnR5L3NxbGl0ZS9zcmMv
b3Nfd2luLmMKLWV4dGVybiAiQyIgewotaW50IGNocm9taXVtX3NxbGl0ZTNfaW5pdGlhbGl6ZV93
aW5fc3FsaXRlM19maWxlKHNxbGl0ZTNfZmlsZSogZmlsZSwgSEFORExFIGhhbmRsZSk7Ci19Ci0K
LS8vIENocm9taXVtJ3MgV2luZG93cyBpbXBsZW1lbnRhdGlvbiBvZiBTUUxpdGUgVkZTCi1uYW1l
c3BhY2UgewotCi0vLyBPcGVucyBhIGZpbGUuCi0vLwotLy8gdmZzIC0gcG9pbnRlciB0byB0aGUg
c3FsaXRlM192ZnMgb2JqZWN0LgotLy8gZmlsZU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgZmlsZS4K
LS8vIGlkIC0gdGhlIHN0cnVjdHVyZSB0aGF0IHdpbGwgbWFuaXB1bGF0ZSB0aGUgbmV3bHkgb3Bl
bmVkIGZpbGUuCi0vLyBkZXNpcmVkRmxhZ3MgLSB0aGUgZGVzaXJlZCBvcGVuIG1vZGUgZmxhZ3Mu
Ci0vLyB1c2VkRmxhZ3MgLSB0aGUgYWN0dWFsIG9wZW4gbW9kZSBmbGFncyB0aGF0IHdlcmUgdXNl
ZC4KLWludCBjaHJvbWl1bU9wZW4oc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwK
LSAgICAgICAgICAgICAgICAgc3FsaXRlM19maWxlKiBpZCwgaW50IGRlc2lyZWRGbGFncywgaW50
KiB1c2VkRmxhZ3MpCi17Ci0gICAgSEFORExFIGggPSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50
KCktPmRhdGFiYXNlT3BlbkZpbGUoU3RyaW5nKGZpbGVOYW1lKSwgZGVzaXJlZEZsYWdzKTsKLSAg
ICBpZiAoaCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICBpZiAoZGVzaXJlZEZs
YWdzICYgU1FMSVRFX09QRU5fUkVBRFdSSVRFKSB7Ci0gICAgICAgICAgICBpbnQgbmV3RmxhZ3Mg
PSAoZGVzaXJlZEZsYWdzIHwgU1FMSVRFX09QRU5fUkVBRE9OTFkpICYgflNRTElURV9PUEVOX1JF
QURXUklURTsKLSAgICAgICAgICAgIHJldHVybiBjaHJvbWl1bU9wZW4oMCwgZmlsZU5hbWUsIGlk
LCBuZXdGbGFncywgdXNlZEZsYWdzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1
cm4gU1FMSVRFX0NBTlRPUEVOOwotICAgIH0KLSAgICBpZiAodXNlZEZsYWdzKSB7Ci0gICAgICAg
IGlmIChkZXNpcmVkRmxhZ3MgJiBTUUxJVEVfT1BFTl9SRUFEV1JJVEUpCi0gICAgICAgICAgICAq
dXNlZEZsYWdzID0gU1FMSVRFX09QRU5fUkVBRFdSSVRFOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAqdXNlZEZsYWdzID0gU1FMSVRFX09QRU5fUkVBRE9OTFk7Ci0gICAgfQotCi0gICAgY2hy
b21pdW1fc3FsaXRlM19pbml0aWFsaXplX3dpbl9zcWxpdGUzX2ZpbGUoaWQsIGgpOwotICAgIHJl
dHVybiBTUUxJVEVfT0s7Ci19Ci0KLS8vIERlbGV0ZXMgdGhlIGdpdmVuIGZpbGUuCi0vLwotLy8g
dmZzIC0gcG9pbnRlciB0byB0aGUgc3FsaXRlM192ZnMgb2JqZWN0LgotLy8gZmlsZU5hbWUgLSB0
aGUgbmFtZSBvZiB0aGUgZmlsZS4KLS8vIHN5bmNEaXIgLSBkZXRlcm1pbmVzIGlmIHRoZSBkaXJl
Y3RvcnkgdG8gd2hpY2ggdGhpcyBmaWxlIGJlbG9uZ3MKLS8vICAgICAgICAgICBzaG91bGQgYmUg
c3luY2hlZCBhZnRlciB0aGUgZmlsZSBpcyBkZWxldGVkLgotaW50IGNocm9taXVtRGVsZXRlKHNx
bGl0ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsIGludCkKLXsKLSAgICByZXR1cm4gV2Vi
S2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5kYXRhYmFzZURlbGV0ZUZpbGUoU3RyaW5nKGZpbGVO
YW1lKSwgZmFsc2UpOwotfQotCi0vLyBDaGVjayB0aGUgZXhpc3RhbmNlIGFuZCBzdGF0dXMgb2Yg
dGhlIGdpdmVuIGZpbGUuCi0vLwotLy8gdmZzIC0gcG9pbnRlciB0byB0aGUgc3FsaXRlM192ZnMg
b2JqZWN0LgotLy8gZmlsZU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KLS8vIGZsYWcgLSB0
aGUgdHlwZSBvZiB0ZXN0IHRvIG1ha2Ugb24gdGhpcyBmaWxlLgotLy8gcmVzIC0gdGhlIHJlc3Vs
dC4KLWludCBjaHJvbWl1bUFjY2VzcyhzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYXIqIGZpbGVOYW1l
LCBpbnQgZmxhZywgaW50KiByZXMpCi17Ci0gICAgRFdPUkQgYXR0ciA9IFdlYktpdDo6UGxhdGZv
cm06OmN1cnJlbnQoKS0+ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhTdHJpbmcoZmlsZU5hbWUp
KTsKLSAgICBzd2l0Y2ggKGZsYWcpIHsKLSAgICBjYXNlIFNRTElURV9BQ0NFU1NfUkVBRDoKLSAg
ICBjYXNlIFNRTElURV9BQ0NFU1NfRVhJU1RTOgotICAgICAgICAqcmVzID0gKGF0dHIgIT0gSU5W
QUxJRF9GSUxFX0FUVFJJQlVURVMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNRTElURV9B
Q0NFU1NfUkVBRFdSSVRFOgotICAgICAgICAqcmVzID0gKChhdHRyICYgRklMRV9BVFRSSUJVVEVf
UkVBRE9OTFkpID09IDApOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gU1FMSVRFX0VSUk9SOwotICAgIH0KLQotICAgIHJldHVybiBTUUxJVEVfT0s7Ci19Ci0K
LS8vIFR1cm5zIGEgcmVsYXRpdmUgcGF0aG5hbWUgaW50byBhIGZ1bGwgcGF0aG5hbWUuCi0vLwot
Ly8gdmZzIC0gcG9pbnRlciB0byB0aGUgc3FsaXRlM192ZnMgb2JqZWN0LgotLy8gcmVsYXRpdmVQ
YXRoIC0gdGhlIHJlbGF0aXZlIHBhdGguCi0vLyBidWZTaXplIC0gdGhlIHNpemUgb2YgdGhlIG91
dHB1dCBidWZmZXIgaW4gYnl0ZXMuCi0vLyBhYnNvbHV0ZVBhdGggLSB0aGUgb3V0cHV0IGJ1ZmZl
ciB3aGVyZSB0aGUgYWJzb2x1dGUgcGF0aCB3aWxsIGJlIHN0b3JlZC4KLWludCBjaHJvbWl1bUZ1
bGxQYXRobmFtZShzcWxpdGUzX3ZmcyogdmZzLCBjb25zdCBjaGFyKiByZWxhdGl2ZVBhdGgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBjaGFyKiBhYnNvbHV0ZVBhdGgpCi17Ci0gICAg
Ly8gVGhlIHJlbmRlcmVyIHByb2Nlc3MgZG9lc24ndCBuZWVkIHRvIGtub3cgdGhlIGFic29sdXRl
IHBhdGggb2YgdGhlIGZpbGUKLSAgICBzcWxpdGUzX3NucHJpbnRmKHZmcy0+bXhQYXRobmFtZSwg
YWJzb2x1dGVQYXRoLCAiJXMiLCByZWxhdGl2ZVBhdGgpOwotICAgIHJldHVybiBTUUxJVEVfT0s7
Ci19Ci0KLSNpZm5kZWYgU1FMSVRFX09NSVRfTE9BRF9FWFRFTlNJT04KLS8vIFJldHVybnMgTlVM
TCwgdGh1cyBkaXNhbGxvd2luZyBsb2FkaW5nIGxpYnJhcmllcyBpbiB0aGUgcmVuZGVyZXIgcHJv
Y2Vzcy4KLS8vCi0vLyB2ZnMgLSBwb2ludGVyIHRvIHRoZSBzcWxpdGUzX3ZmcyBvYmplY3QuCi0v
LyBmaWxlTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBmaWxlLgotdm9pZCog
Y2hyb21pdW1EbE9wZW4oc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKikKLXsKLSAgICByZXR1cm4g
MDsKLX0KLSNlbHNlCi0jZGVmaW5lIGNocm9taXVtRGxPcGVuIDAKLSNlbmRpZiAvLyBTUUxJVEVf
T01JVF9MT0FEX0VYVEVOU0lPTgotCi19IC8vIG5hbWVzcGFjZQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXZvaWQgU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMoKQotewotICAg
IHNxbGl0ZTNfdmZzKiB3aW4zMl92ZnMgPSBzcWxpdGUzX3Zmc19maW5kKCJ3aW4zMiIpOwotICAg
IHN0YXRpYyBzcWxpdGUzX3ZmcyBjaHJvbWl1bV92ZnMgPSB7Ci0gICAgICAgIDEsCi0gICAgICAg
IHdpbjMyX3Zmcy0+c3pPc0ZpbGUsCi0gICAgICAgIHdpbjMyX3Zmcy0+bXhQYXRobmFtZSwKLSAg
ICAgICAgMCwKLSAgICAgICAgImNocm9taXVtX3ZmcyIsCi0gICAgICAgIHdpbjMyX3Zmcy0+cEFw
cERhdGEsCi0gICAgICAgIGNocm9taXVtT3BlbiwKLSAgICAgICAgY2hyb21pdW1EZWxldGUsCi0g
ICAgICAgIGNocm9taXVtQWNjZXNzLAotICAgICAgICBjaHJvbWl1bUZ1bGxQYXRobmFtZSwKLSAg
ICAgICAgY2hyb21pdW1EbE9wZW4sCi0gICAgICAgIHdpbjMyX3Zmcy0+eERsRXJyb3IsCi0gICAg
ICAgIHdpbjMyX3Zmcy0+eERsU3ltLAotICAgICAgICB3aW4zMl92ZnMtPnhEbENsb3NlLAotICAg
ICAgICB3aW4zMl92ZnMtPnhSYW5kb21uZXNzLAotICAgICAgICB3aW4zMl92ZnMtPnhTbGVlcCwK
LSAgICAgICAgd2luMzJfdmZzLT54Q3VycmVudFRpbWUsCi0gICAgICAgIHdpbjMyX3Zmcy0+eEdl
dExhc3RFcnJvcgotICAgIH07Ci0gICAgc3FsaXRlM192ZnNfcmVnaXN0ZXIoJmNocm9taXVtX3Zm
cywgMCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvY2hyb21pdW0vSHlwaGVuYXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY2hyb21pdW0vSHlwaGVuYXRpb24uY3BwCShyZXZp
c2lvbiAxNDc3MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2Nocm9taXVtL0h5
cGhlbmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIeXBoZW5hdGlvbi5oIgotCi0jaW5j
bHVkZSA8cHVibGljL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYkh5cGhlbmF0b3Iu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIGNhbkh5cGhlbmF0ZShjb25zdCBBdG9t
aWNTdHJpbmcmIGxvY2FsZUlkZW50aWZpZXIpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6UGxhdGZv
cm06OmN1cnJlbnQoKS0+aHlwaGVuYXRvcigpLT5jYW5IeXBoZW5hdGUobG9jYWxlSWRlbnRpZmll
cik7Ci19Ci0KLXNpemVfdCBsYXN0SHlwaGVuTG9jYXRpb24oY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBiZWZvcmVJbmRleCwgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbGVJZGVudGlmaWVyKQotewotICAgIHJldHVybiBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJy
ZW50KCktPmh5cGhlbmF0b3IoKS0+Y29tcHV0ZUxhc3RIeXBoZW5Mb2NhdGlvbihjaGFyYWN0ZXJz
LCBsZW5ndGgsIGJlZm9yZUluZGV4LCBsb2NhbGVJZGVudGlmaWVyKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9jaHJvbWl1
bS9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvY2hyb21pdW0vVGV4dEJyZWFrSXRlcmF0b3JJ
bnRlcm5hbElDVUNocm9taXVtLmNwcAkocmV2aXNpb24gMTQ3NzMyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9jaHJvbWl1bS9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmgiCi0KLSNpbmNsdWRlICJMYW5ndWFnZS5o
IgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIFVJTGFuZ3VhZ2UoKQotewotICAgIC8vIENocm9t
ZSdzIFVJIGxhbmd1YWdlIGNhbiBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgT1MgVUkgbGFuZ3VhZ2Ug
b24gV2luZG93cy4KLSAgICAvLyBXZSB3YW50IHRvIHJldHVybiBDaHJvbWUncyBVSSBsYW5ndWFn
ZSBoZXJlLgotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ1N0cmluZywgbG9jYWxlLCAoZGVmYXVs
dExhbmd1YWdlKCkubGF0aW4xKCkpKTsKLSAgICByZXR1cm4gbG9jYWxlLmRhdGEoKTsKLX0KLQot
Y29uc3QgY2hhciogY3VycmVudFNlYXJjaExvY2FsZUlEKCkKLXsKLSAgICByZXR1cm4gVUlMYW5n
dWFnZSgpOwotfQotCi1jb25zdCBjaGFyKiBjdXJyZW50VGV4dEJyZWFrTG9jYWxlSUQoKQotewot
ICAgIHJldHVybiBVSUxhbmd1YWdlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>